From: Daniel Wagner Date: Fri, 28 Oct 2022 14:42:21 +0000 (+0200) Subject: fabrics: Duplicate strings when merging configs X-Git-Tag: v1.2~3^2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=d187b21add042f941436f94d5dc75bb566f9fe3d;p=users%2Fsagi%2Flibnvme.git fabrics: Duplicate strings when merging configs 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 --- diff --git a/src/nvme/fabrics.c b/src/nvme/fabrics.c index 7c2b3711..a501f790 100644 --- a/src/nvme/fabrics.c +++ b/src/nvme/fabrics.c @@ -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);