In the Linux kernel, the following vulnerability has been resolved:
class: fix possible memory leak in _classregister()
If classaddgroups() returns error, the 'cp->subsys' need be unregister, and the 'cp' need be freed.
We can not call ksetunregister() here, because the 'cls' will be freed in callback function classrelease() and it's also freed in caller's error path, it will cause double free.
So fix this by calling kobjectdel() and kfreeconst(name) to cleanup kobject. Besides, call kfree() to free the 'cp'.
Fault injection test can trigger this:
unreferenced object 0xffff888102fa8190 (size 8): comm "modprobe", pid 502, jiffies 4294906074 (age 49.296s) hex dump (first 8 bytes): 70 6b 74 63 64 76 64 00 pktcdvd. backtrace: [<00000000e7c7703d>] _kmalloctrackcaller+0x1ae/0x320 [<000000005e4d70bc>] kstrdup+0x3a/0x70 [<00000000c2e5e85a>] kstrdupconst+0x68/0x80 [<000000000049a8c7>] kvasprintfconst+0x10b/0x190 [<0000000029123163>] kobjectsetnamevargs+0x56/0x150 [<00000000747219c9>] kobjectsetname+0xab/0xe0 [<0000000005f1ea4e>] _classregister+0x15c/0x49a
unreferenced object 0xffff888037274000 (size 1024): comm "modprobe", pid 502, jiffies 4294906074 (age 49.296s) hex dump (first 32 bytes): 00 40 27 37 80 88 ff ff 00 40 27 37 80 88 ff ff .@'7.....@'7.... 00 00 00 00 ad 4e ad de ff ff ff ff 00 00 00 00 .....N.......... backtrace: [<00000000151f9600>] kmemcachealloctrace+0x17c/0x2f0 [<00000000ecf3dd95>] _class_register+0x86/0x49a
[
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"8165776207833069628413736231252387578",
"192854508527926922051443593569563433794",
"28205244146730055092381967133045347666",
"287933177121486952170286019752856774861"
]
},
"target": {
"file": "drivers/base/class.c"
},
"signature_version": "v1",
"id": "CVE-2022-50578-05cf6927",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3e0efc3f3f5e5c73996782f8db69963e501bb878",
"signature_type": "Line"
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"8165776207833069628413736231252387578",
"192854508527926922051443593569563433794",
"28205244146730055092381967133045347666",
"287933177121486952170286019752856774861"
]
},
"target": {
"file": "drivers/base/class.c"
},
"signature_version": "v1",
"id": "CVE-2022-50578-33374728",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e764ad5918a099ebeb909ccff83893a714e497e1",
"signature_type": "Line"
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"8165776207833069628413736231252387578",
"192854508527926922051443593569563433794",
"28205244146730055092381967133045347666",
"287933177121486952170286019752856774861"
]
},
"target": {
"file": "drivers/base/class.c"
},
"signature_version": "v1",
"id": "CVE-2022-50578-80f13232",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@18a7200646958cf8e1b8a933de08122fc50676cd",
"signature_type": "Line"
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"8165776207833069628413736231252387578",
"192854508527926922051443593569563433794",
"28205244146730055092381967133045347666",
"287933177121486952170286019752856774861"
]
},
"target": {
"file": "drivers/base/class.c"
},
"signature_version": "v1",
"id": "CVE-2022-50578-8b90b758",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@abaedb68a769e6bf36836b55a2f49b531c5f3f7b",
"signature_type": "Line"
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"8165776207833069628413736231252387578",
"192854508527926922051443593569563433794",
"28205244146730055092381967133045347666",
"287933177121486952170286019752856774861"
]
},
"target": {
"file": "drivers/base/class.c"
},
"signature_version": "v1",
"id": "CVE-2022-50578-a59610c3",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@417ef049e3fd3b0d2593c1d5ffa3d0d5d0a018a7",
"signature_type": "Line"
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"8165776207833069628413736231252387578",
"192854508527926922051443593569563433794",
"28205244146730055092381967133045347666",
"287933177121486952170286019752856774861"
]
},
"target": {
"file": "drivers/base/class.c"
},
"signature_version": "v1",
"id": "CVE-2022-50578-fe851d12",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3bb9c92c27624ad076419a70f2b1a30cd1f8bbbd",
"signature_type": "Line"
}
]