summaryrefslogtreecommitdiff
path: root/drivers/base
diff options
context:
space:
mode:
authorZijun Hu <quic_zijuhu@quicinc.com>2024-07-27 16:34:01 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-12-14 19:54:00 +0100
commitfc1f391a71a3ee88291e205cffd673fe24d99266 (patch)
tree6f2f12f7f952b5e5e3d977144c06c931387cd1e1 /drivers/base
parentd5a63a0bc860c441c4e5dcf28ec8036c9d3b2463 (diff)
downloadlinux-fc1f391a71a3ee88291e205cffd673fe24d99266.tar.gz
linux-fc1f391a71a3ee88291e205cffd673fe24d99266.tar.bz2
linux-fc1f391a71a3ee88291e205cffd673fe24d99266.zip
driver core: bus: Fix double free in driver API bus_register()
commit bfa54a793ba77ef696755b66f3ac4ed00c7d1248 upstream. For bus_register(), any error which happens after kset_register() will cause that @priv are freed twice, fixed by setting @priv with NULL after the first free. Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com> Link: https://lore.kernel.org/r/20240727-bus_register_fix-v1-1-fed8dd0dba7a@quicinc.com Signed-off-by: Sasha Levin <sashal@kernel.org> [ Brennan : Backport requires bus->p = NULL instead of priv = NULL ] Signed-off-by: Brennan Lamoreaux <brennan.lamoreaux@broadcom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/bus.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 339a9edcde5f..941532ddfdc6 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -853,6 +853,8 @@ bus_devices_fail:
bus_remove_file(bus, &bus_attr_uevent);
bus_uevent_fail:
kset_unregister(&bus->p->subsys);
+ /* Above kset_unregister() will kfree @bus->p */
+ bus->p = NULL;
out:
kfree(bus->p);
bus->p = NULL;