nvme: fix potential memory leak in option parsing
When specifying same string type option several times, current option parsing may cause memory leak. Hence, call kfree for previous one in this case. Signed-off-by: Chengguang Xu <cgxu519@gmx.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
f53823c181
commit
59a2f3f00f
1 changed files with 6 additions and 0 deletions
|
@ -668,6 +668,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
|
|||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
kfree(opts->transport);
|
||||
opts->transport = p;
|
||||
break;
|
||||
case NVMF_OPT_NQN:
|
||||
|
@ -676,6 +677,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
|
|||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
kfree(opts->subsysnqn);
|
||||
opts->subsysnqn = p;
|
||||
nqnlen = strlen(opts->subsysnqn);
|
||||
if (nqnlen >= NVMF_NQN_SIZE) {
|
||||
|
@ -698,6 +700,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
|
|||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
kfree(opts->traddr);
|
||||
opts->traddr = p;
|
||||
break;
|
||||
case NVMF_OPT_TRSVCID:
|
||||
|
@ -706,6 +709,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
|
|||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
kfree(opts->trsvcid);
|
||||
opts->trsvcid = p;
|
||||
break;
|
||||
case NVMF_OPT_QUEUE_SIZE:
|
||||
|
@ -792,6 +796,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
|
|||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
nvmf_host_put(opts->host);
|
||||
opts->host = nvmf_host_add(p);
|
||||
kfree(p);
|
||||
if (!opts->host) {
|
||||
|
@ -817,6 +822,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
|
|||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
kfree(opts->host_traddr);
|
||||
opts->host_traddr = p;
|
||||
break;
|
||||
case NVMF_OPT_HOST_ID:
|
||||
|
|
Loading…
Reference in a new issue