* [PATCH] usb: host: sl811_cs: fix memory leak on probe failure
@ 2026-08-27 7:41 Zongmin Zhou
2026-08-28 17:36 ` Nikolay Kulikov
0 siblings, 1 reply; 5+ messages in thread
From: Zongmin Zhou @ 2026-08-27 7:41 UTC (permalink / raw)
To: gregkh, kees, david-b; +Cc: linux-usb, linux-kernel, Zongmin Zhou
From: Zongmin Zhou <zhouzongmin@kylinos.cn>
sl811_cs_probe() leaks the local_info_t allocated into link->priv when
sl811_cs_config() fails: the only kfree() lives in the remove callback
sl811_cs_detach(), which the PCMCIA core never calls for a device whose
probe failed.
Free the private data when sl811_cs_config() fails.
Fixes: c6de2b64eb57 ("[PATCH] USB: add sl811_cs support")
Signed-off-by: Zongmin Zhou <zhouzongmin@kylinos.cn>
---
drivers/usb/host/sl811_cs.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/host/sl811_cs.c b/drivers/usb/host/sl811_cs.c
index ada91ca33f65..fd0cd541bf53 100644
--- a/drivers/usb/host/sl811_cs.c
+++ b/drivers/usb/host/sl811_cs.c
@@ -177,6 +177,7 @@ failed:
static int sl811_cs_probe(struct pcmcia_device *link)
{
local_info_t *local;
+ int ret;
local = kzalloc_obj(local_info_t);
if (!local)
@@ -184,7 +185,11 @@ static int sl811_cs_probe(struct pcmcia_device *link)
local->p_dev = link;
link->priv = local;
- return sl811_cs_config(link);
+ ret = sl811_cs_config(link);
+ if (ret)
+ kfree(local);
+
+ return ret;
}
static const struct pcmcia_device_id sl811_ids[] = {
--
2.34.1
No virus found
Checked by Hillstone Network AntiVirus
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] usb: host: sl811_cs: fix memory leak on probe failure 2026-08-27 7:41 [PATCH] usb: host: sl811_cs: fix memory leak on probe failure Zongmin Zhou @ 2026-08-28 17:36 ` Nikolay Kulikov 2026-08-31 6:11 ` Zongmin Zhou 0 siblings, 1 reply; 5+ messages in thread From: Nikolay Kulikov @ 2026-08-28 17:36 UTC (permalink / raw) To: Zongmin Zhou; +Cc: gregkh, kees, david-b, linux-usb, linux-kernel, Zongmin Zhou On Thu, Aug 27, 2026 at 03:41:20PM +0800, Zongmin Zhou wrote: > From: Zongmin Zhou <zhouzongmin@kylinos.cn> > > sl811_cs_probe() leaks the local_info_t allocated into link->priv when > sl811_cs_config() fails: the only kfree() lives in the remove callback > sl811_cs_detach(), which the PCMCIA core never calls for a device whose > probe failed. > > Free the private data when sl811_cs_config() fails. > > Fixes: c6de2b64eb57 ("[PATCH] USB: add sl811_cs support") The code looks good to me, but I have a question regarding the Fixes tag. In the commit you cited, a failure triggered a call to sl811_cs_detach(), which freed that memory. However, that behavior was changed in commit f8cfa618dccb ("[PATCH] pcmcia: unify attach, EVENT_CARD_INSERTION handlers into one probe callback") where the call was removed, leaving the memory unfreed. Shouldn't that be the commit referenced in the Fixes? Thanks, Nikolay ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] usb: host: sl811_cs: fix memory leak on probe failure 2026-08-28 17:36 ` Nikolay Kulikov @ 2026-08-31 6:11 ` Zongmin Zhou 2026-08-31 14:58 ` Nikolay Kulikov 0 siblings, 1 reply; 5+ messages in thread From: Zongmin Zhou @ 2026-08-31 6:11 UTC (permalink / raw) To: Nikolay Kulikov Cc: gregkh, kees, david-b, linux-usb, linux-kernel, Zongmin Zhou 在 2026/8/29 01:36, Nikolay Kulikov 写道: > On Thu, Aug 27, 2026 at 03:41:20PM +0800, Zongmin Zhou wrote: >> From: Zongmin Zhou <zhouzongmin@kylinos.cn> >> >> sl811_cs_probe() leaks the local_info_t allocated into link->priv when >> sl811_cs_config() fails: the only kfree() lives in the remove callback >> sl811_cs_detach(), which the PCMCIA core never calls for a device whose >> probe failed. >> >> Free the private data when sl811_cs_config() fails. >> >> Fixes: c6de2b64eb57 ("[PATCH] USB: add sl811_cs support") > The code looks good to me, but I have a question regarding the Fixes > tag. > > In the commit you cited, a failure triggered a call to > sl811_cs_detach(), which freed that memory. However, that behavior was > changed in commit > > f8cfa618dccb ("[PATCH] pcmcia: unify attach, EVENT_CARD_INSERTION handlers into one probe callback") > > where the call was removed, leaving the memory unfreed. Shouldn't that > be the commit referenced in the Fixes? Hi Nikolay, You're right that c6de2b64eb57 did not introduce the leak -- but neither did f8cfa618dccb. The leak was introduced by 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions") f8cfa618dccb dropped the detach-on-failure path because registration moved into the core, and its probe ended with sl811_cs_config(link); return 0; A config failure was never propagated, so probe() always succeeded after the allocation and it remained paired with the kfree() in remove(). No leak either. 15b99ac17295 made sl811_cs_config() return -ENODEV and the probe return that value -- the first time probe could fail after the allocation. Since the core never calls ->remove() for a failed probe, link->priv leaked from then on. If you agree, I'll send a v2 with Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions") Thanks, Zongmin > > > Thanks, > Nikolay ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] usb: host: sl811_cs: fix memory leak on probe failure 2026-08-31 6:11 ` Zongmin Zhou @ 2026-08-31 14:58 ` Nikolay Kulikov 2026-09-01 2:03 ` [PATCH v2] " Zongmin Zhou 0 siblings, 1 reply; 5+ messages in thread From: Nikolay Kulikov @ 2026-08-31 14:58 UTC (permalink / raw) To: Zongmin Zhou; +Cc: gregkh, kees, david-b, linux-usb, linux-kernel, Zongmin Zhou On Mon, Aug 31, 2026 at 02:11:16PM +0800, Zongmin Zhou wrote: > > 在 2026/8/29 01:36, Nikolay Kulikov 写道: > > On Thu, Aug 27, 2026 at 03:41:20PM +0800, Zongmin Zhou wrote: > > > From: Zongmin Zhou <zhouzongmin@kylinos.cn> > > > > > > sl811_cs_probe() leaks the local_info_t allocated into link->priv when > > > sl811_cs_config() fails: the only kfree() lives in the remove callback > > > sl811_cs_detach(), which the PCMCIA core never calls for a device whose > > > probe failed. > > > > > > Free the private data when sl811_cs_config() fails. > > > > > > Fixes: c6de2b64eb57 ("[PATCH] USB: add sl811_cs support") > > The code looks good to me, but I have a question regarding the Fixes > > tag. > > > > In the commit you cited, a failure triggered a call to > > sl811_cs_detach(), which freed that memory. However, that behavior was > > changed in commit > > > > f8cfa618dccb ("[PATCH] pcmcia: unify attach, EVENT_CARD_INSERTION handlers into one probe callback") > > > > where the call was removed, leaving the memory unfreed. Shouldn't that > > be the commit referenced in the Fixes? > Hi Nikolay, > > You're right that c6de2b64eb57 did not introduce the leak -- but neither did > f8cfa618dccb. > The leak was introduced by 15b99ac17295 ("[PATCH] pcmcia: add return value > to _config() functions") > > f8cfa618dccb dropped the detach-on-failure path because registration > moved into the core, and its probe ended with > sl811_cs_config(link); > return 0; > A config failure was never propagated, so probe() always succeeded > after the allocation and it remained paired with the kfree() in > remove(). No leak either. > > 15b99ac17295 made sl811_cs_config() return -ENODEV and the probe return > that value -- the first time probe could fail after the allocation. > Since the core never calls ->remove() for a failed probe, link->priv > leaked from then on. > > If you agree, I'll send a v2 with > Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() > functions") Yes, it really should be 15b99ac17295. In v2, you can add my Reviewed-by: Nikolay Kulikov <nikolayof23@gmail.com> > > Thanks, > Zongmin > > > > > > Thanks, > > Nikolay > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] usb: host: sl811_cs: fix memory leak on probe failure 2026-08-31 14:58 ` Nikolay Kulikov @ 2026-09-01 2:03 ` Zongmin Zhou 0 siblings, 0 replies; 5+ messages in thread From: Zongmin Zhou @ 2026-09-01 2:03 UTC (permalink / raw) To: nikolayof23, david-b, gregkh, kees; +Cc: linux-kernel, linux-usb, Zongmin Zhou From: Zongmin Zhou <zhouzongmin@kylinos.cn> sl811_cs_probe() leaks the local_info_t allocated into link->priv when sl811_cs_config() fails: the only kfree() lives in the remove callback sl811_cs_detach(), which the PCMCIA core never calls for a device whose probe failed. Free the private data when sl811_cs_config() fails. Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions") Reviewed-by: Nikolay Kulikov <nikolayof23@gmail.com> Signed-off-by: Zongmin Zhou <zhouzongmin@kylinos.cn> --- Changes in v2: - Fix the Fixes tag to 15b99ac17295, the commit that made sl811_cs_config() failures observable as probe failures. - Add Reviewed-by from Nikolay Kulikov. drivers/usb/host/sl811_cs.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/usb/host/sl811_cs.c b/drivers/usb/host/sl811_cs.c index ada91ca33f65..fd0cd541bf53 100644 --- a/drivers/usb/host/sl811_cs.c +++ b/drivers/usb/host/sl811_cs.c @@ -177,6 +177,7 @@ failed: static int sl811_cs_probe(struct pcmcia_device *link) { local_info_t *local; + int ret; local = kzalloc_obj(local_info_t); if (!local) @@ -184,7 +185,11 @@ static int sl811_cs_probe(struct pcmcia_device *link) local->p_dev = link; link->priv = local; - return sl811_cs_config(link); + ret = sl811_cs_config(link); + if (ret) + kfree(local); + + return ret; } static const struct pcmcia_device_id sl811_ids[] = { -- 2.34.1 No virus found Checked by Hillstone Network AntiVirus ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-09-01 2:04 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-27 7:41 [PATCH] usb: host: sl811_cs: fix memory leak on probe failure Zongmin Zhou 2026-08-28 17:36 ` Nikolay Kulikov 2026-08-31 6:11 ` Zongmin Zhou 2026-08-31 14:58 ` Nikolay Kulikov 2026-09-01 2:03 ` [PATCH v2] " Zongmin Zhou
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox