[PATCH] fix: nvmet: nvmet_sq_create: fix ctrl reference leak on nvmet_check_sqid failure
WenTao Liang
vulab at iscas.ac.cn
Sat Jun 27 21:02:05 PDT 2026
> 2026年6月26日 23:40,WenTao Liang <vulab at iscas.ac.cn> 写道:
>
> After kref_get_unless_zero successfully acquires a ctrl reference, the
> nvmet_check_sqid failure path returns the status directly without calling
> nvmet_ctrl_put, leaving the ctrl reference permanently leaked.
>
> Add nvmet_ctrl_put before returning on the nvmet_check_sqid error path to
> properly release the acquired reference.
>
> Cc: stable at vger.kernel.org
> Fixes: a07b4970f464 ("nvmet: add a generic NVMe target")
> Signed-off-by: WenTao Liang <vulab at iscas.ac.cn>
> ---
> drivers/nvme/target/core.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
> index 62dd59b9aa4f..52fc2dade4ea 100644
> --- a/drivers/nvme/target/core.c
> +++ b/drivers/nvme/target/core.c
> @@ -943,8 +943,10 @@ u16 nvmet_sq_create(struct nvmet_ctrl *ctrl, struct nvmet_sq *sq,
> return NVME_SC_INTERNAL | NVME_STATUS_DNR;
>
> status = nvmet_check_sqid(ctrl, sqid, true);
> - if (status != NVME_SC_SUCCESS)
> + if (status != NVME_SC_SUCCESS) {
> + nvmet_ctrl_put(ctrl);
> return status;
> + }
>
> ret = nvmet_sq_init(sq, cq);
> if (ret) {
> --
> 2.39.5 (Apple Git-154)
Please ignore this patch. I will resend a proper version after
learning the kernel submission process.
Apologies for the noise.
Best regards,
WenTao Liang
More information about the Linux-nvme
mailing list