In the Linux kernel, the following vulnerability has been resolved:
mm, slub: do not call doslabfree for kfence object
In 782f8906f805 the freeing of kfence objects was moved from deep inside doslabfree to the wrapper functions outside. This is a nice change, but unfortunately it missed one spot in _kmemcachefreebulk.
This results in a crash like this:
BUG skbuffheadcache (Tainted: G S B E ): Padding overwritten. 0xffff88907fea0f00-0xffff88907fea0fff @offset=3840
slaberr (mm/slub.c:1129) freetopartiallist (mm/slub.c:? mm/slub.c:4036) slabpadcheck (mm/slub.c:864 mm/slub.c:1290) checkslab (mm/slub.c:?) freetopartiallist (mm/slub.c:3171 mm/slub.c:4036) kmemcacheallocbulk (mm/slub.c:? mm/slub.c:4495 mm/slub.c:4586 mm/slub.c:4635) napibuild_skb (net/core/skbuff.c:348 net/core/skbuff.c:527 net/core/skbuff.c:549)
All the other callers to doslabfree appear to be ok.
Add a kfencefree check in _kmemcachefree_bulk to avoid the crash.
[
{
"id": "CVE-2024-44973-283c2dbf",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"313962731866920444231132140212047270061",
"119820150823630960250499902687824590621",
"248225784813638780709339266791010191600"
],
"threshold": 0.9
},
"target": {
"file": "mm/slub.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a371d558e6f3aed977a8a7346350557de5d25190"
},
{
"id": "CVE-2024-44973-37fc57e9",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"function_hash": "11416989238723569750487132065917155946",
"length": 326.0
},
"target": {
"file": "mm/slub.c",
"function": "__kmem_cache_free_bulk"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a371d558e6f3aed977a8a7346350557de5d25190"
},
{
"id": "CVE-2024-44973-4df90a06",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"line_hashes": [
"313962731866920444231132140212047270061",
"119820150823630960250499902687824590621",
"248225784813638780709339266791010191600"
],
"threshold": 0.9
},
"target": {
"file": "mm/slub.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b35cd7f1e969aaa63e6716d82480f6b8a3230949"
},
{
"id": "CVE-2024-44973-f074444d",
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"function_hash": "11416989238723569750487132065917155946",
"length": 326.0
},
"target": {
"file": "mm/slub.c",
"function": "__kmem_cache_free_bulk"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b35cd7f1e969aaa63e6716d82480f6b8a3230949"
}
]