nvmf: Fix the bug when free listen_addrs.
it will free invalid address when we start nvmf using profile, this patch fix the bug. Change-Id: I5100eadc2fd129a5b9e3588decac1429d03d78a4 Signed-off-by: Cunyin Chang <cunyin.chang@intel.com>
This commit is contained in:
parent
c90f57f99f
commit
aa2de5c6f6
@ -337,6 +337,7 @@ spdk_nvmf_parse_subsystem(struct spdk_conf_section *sp)
|
|||||||
int lcore;
|
int lcore;
|
||||||
int num_listen_addrs;
|
int num_listen_addrs;
|
||||||
struct rpc_listen_address listen_addrs[MAX_LISTEN_ADDRESSES];
|
struct rpc_listen_address listen_addrs[MAX_LISTEN_ADDRESSES];
|
||||||
|
char *listen_addrs_str[MAX_LISTEN_ADDRESSES] = {};
|
||||||
int num_hosts;
|
int num_hosts;
|
||||||
char *hosts[MAX_HOSTS];
|
char *hosts[MAX_HOSTS];
|
||||||
const char *bdf;
|
const char *bdf;
|
||||||
@ -351,23 +352,25 @@ spdk_nvmf_parse_subsystem(struct spdk_conf_section *sp)
|
|||||||
/* Parse Listen sections */
|
/* Parse Listen sections */
|
||||||
num_listen_addrs = 0;
|
num_listen_addrs = 0;
|
||||||
for (i = 0; i < MAX_LISTEN_ADDRESSES; i++) {
|
for (i = 0; i < MAX_LISTEN_ADDRESSES; i++) {
|
||||||
char *listen_addr;
|
|
||||||
|
|
||||||
listen_addrs[num_listen_addrs].transport =
|
listen_addrs[num_listen_addrs].transport =
|
||||||
spdk_conf_section_get_nmval(sp, "Listen", i, 0);
|
spdk_conf_section_get_nmval(sp, "Listen", i, 0);
|
||||||
listen_addr = spdk_conf_section_get_nmval(sp, "Listen", i, 1);
|
if (!listen_addrs[num_listen_addrs].transport) {
|
||||||
|
|
||||||
if (!listen_addrs[num_listen_addrs].transport || !listen_addr) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
listen_addr = strdup(listen_addr);
|
listen_addrs_str[i] = spdk_conf_section_get_nmval(sp, "Listen", i, 1);
|
||||||
|
if (!listen_addrs_str[i]) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ret = spdk_parse_ip_addr(listen_addr, &listen_addrs[num_listen_addrs].traddr,
|
listen_addrs_str[i] = strdup(listen_addrs_str[i]);
|
||||||
|
|
||||||
|
ret = spdk_parse_ip_addr(listen_addrs_str[i], &listen_addrs[num_listen_addrs].traddr,
|
||||||
&listen_addrs[num_listen_addrs].trsvcid);
|
&listen_addrs[num_listen_addrs].trsvcid);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SPDK_ERRLOG("Unable to parse listen address '%s'\n", listen_addr);
|
SPDK_ERRLOG("Unable to parse listen address '%s'\n", listen_addrs_str[i]);
|
||||||
free(listen_addr);
|
free(listen_addrs_str[i]);
|
||||||
|
listen_addrs_str[i] = NULL;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -402,9 +405,8 @@ spdk_nvmf_parse_subsystem(struct spdk_conf_section *sp)
|
|||||||
bdf, sn,
|
bdf, sn,
|
||||||
num_devs, devs);
|
num_devs, devs);
|
||||||
|
|
||||||
for (i = 0; i < num_listen_addrs; i++) {
|
for (i = 0; i < MAX_LISTEN_ADDRESSES; i++) {
|
||||||
free(listen_addrs[i].traddr);
|
free(listen_addrs_str[i]);
|
||||||
free(listen_addrs[i].trsvcid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user