]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
driver core: bus: Fix double free in driver API bus_register()
authorZijun Hu <quic_zijuhu@quicinc.com>
Sat, 27 Jul 2024 08:34:01 +0000 (16:34 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 14 Dec 2024 18:51:14 +0000 (19:51 +0100)
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>
drivers/base/bus.c

index 548291d15c2906d4f9a820225acc907bf677d22f..3ec131d877120abd747c43036acc03539de5db78 100644 (file)
@@ -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;