]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
fabrics: Duplicate strings when merging configs
authorDaniel Wagner <dwagner@suse.de>
Fri, 28 Oct 2022 14:42:21 +0000 (16:42 +0200)
committerDaniel Wagner <dwagner@suse.de>
Fri, 28 Oct 2022 14:46:54 +0000 (16:46 +0200)
We have to use strdup here, because the merged config will be freeing
these pointers eventually. Without it, we are going to double free it.

Signed-off-by: Daniel Wagner <dwagner@suse.de>
src/nvme/fabrics.c

index 7c2b371140c7f619451c23e0c00900b3ce88bbb7..a501f7900c5fa84311eae27406bdfc637c2c5384 100644 (file)
@@ -191,13 +191,15 @@ void nvmf_default_config(struct nvme_fabrics_config *cfg)
 
 #define MERGE_CFG_OPTION(c, n, o, d)                   \
        if ((c)->o == d) (c)->o = (n)->o
+#define MERGE_CFG_OPTION_STR(c, n, o, d)               \
+       if ((c)->o == d && (n)->o) (c)->o = strdup((n)->o)
 static struct nvme_fabrics_config *merge_config(nvme_ctrl_t c,
                const struct nvme_fabrics_config *cfg)
 {
        struct nvme_fabrics_config *ctrl_cfg = nvme_ctrl_get_config(c);
 
-       MERGE_CFG_OPTION(ctrl_cfg, cfg, host_traddr, NULL);
-       MERGE_CFG_OPTION(ctrl_cfg, cfg, host_iface, NULL);
+       MERGE_CFG_OPTION_STR(ctrl_cfg, cfg, host_traddr, NULL);
+       MERGE_CFG_OPTION_STR(ctrl_cfg, cfg, host_iface, NULL);
        MERGE_CFG_OPTION(ctrl_cfg, cfg, nr_io_queues, 0);
        MERGE_CFG_OPTION(ctrl_cfg, cfg, nr_write_queues, 0);
        MERGE_CFG_OPTION(ctrl_cfg, cfg, nr_poll_queues, 0);