]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
i3c: master: svc: Recycle unused IBI slot
authorStanley Chu <stanley.chuys@gmail.com>
Fri, 29 Aug 2025 01:23:09 +0000 (09:23 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Oct 2025 09:56:28 +0000 (11:56 +0200)
[ Upstream commit 3448a934ba6f803911ac084d05a2ffce507ea6c6 ]

In svc_i3c_master_handle_ibi(), an IBI slot is fetched from the pool
to store the IBI payload. However, when an error condition is encountered,
the function returns without recycling the IBI slot, resulting in an IBI
slot leak.

Fixes: c85e209b799f ("i3c: master: svc: fix ibi may not return mandatory data byte")
Signed-off-by: Stanley Chu <yschu@nuvoton.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20250829012309.3562585-3-yschu@nuvoton.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/i3c/master/svc-i3c-master.c

index a18d5876678c1fc7e62c686f85700f9f045189af..fda472d84549b87b3522654a39196803e878b769 100644 (file)
@@ -361,6 +361,7 @@ static int svc_i3c_master_handle_ibi(struct svc_i3c_master *master,
                                                SVC_I3C_MSTATUS_COMPLETE(val), 0, 1000);
        if (ret) {
                dev_err(master->dev, "Timeout when polling for COMPLETE\n");
+               i3c_generic_ibi_recycle_slot(data->ibi_pool, slot);
                return ret;
        }