In the Linux kernel, the following vulnerability has been resolved:
lib: alloctagmoduleunload must wait for pending kfreercu calls
Ben Greear reports following splat: ------------[ cut here ]------------ net/netfilter/nfnatcore.c:1114 module nfnat func:nfnatregisterfn has 256 allocated at module unload WARNING: CPU: 1 PID: 10421 at lib/alloctag.c:168 alloctagmoduleunload+0x22b/0x3f0 Modules linked in: nfnat(-) btrfs ufs qnx4 hfsplus hfs minix vfat msdos fat ... Hardware name: Default string Default string/SKYBAY, BIOS 5.12 08/04/2020 RIP: 0010:alloctagmoduleunload+0x22b/0x3f0 codetagunloadmodule+0x19b/0x2a0 ? codetagloadmodule+0x80/0x80
nfnat module exit calls kfreercu on those addresses, but the free operation is likely still pending by the time alloc_tag checks for leaks.
Wait for outstanding kfree_rcu operations to complete before checking resolves this warning.
Reproducer: unshare -n iptables-nft -t nat -A PREROUTING -p tcp grep nfnat /proc/allocinfo # will list 4 allocations rmmod nftchainnat rmmod nfnat # will WARN.
[akpm@linux-foundation.org: add comment]
[
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"262489207155748115043380417121937368464",
"336744520723280304355635571953995049781",
"177366391636063832344984511243712946088"
]
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@dc783ba4b9df3fb3e76e968b2cbeb9960069263c",
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2024-50212-30c0d3bc",
"signature_type": "Line",
"target": {
"file": "lib/codetag.c"
}
},
{
"digest": {
"function_hash": "141680292660938078231858300219214919496",
"length": 714.0
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@dc783ba4b9df3fb3e76e968b2cbeb9960069263c",
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2024-50212-7a56e48a",
"signature_type": "Function",
"target": {
"file": "lib/codetag.c",
"function": "codetag_unload_module"
}
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"262489207155748115043380417121937368464",
"336744520723280304355635571953995049781",
"177366391636063832344984511243712946088"
]
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@24211fb49c9ac1b576470b7e393a5a0b50af2707",
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2024-50212-7b695066",
"signature_type": "Line",
"target": {
"file": "lib/codetag.c"
}
},
{
"digest": {
"function_hash": "141680292660938078231858300219214919496",
"length": 714.0
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@24211fb49c9ac1b576470b7e393a5a0b50af2707",
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2024-50212-7da11bf5",
"signature_type": "Function",
"target": {
"file": "lib/codetag.c",
"function": "codetag_unload_module"
}
}
]