In the Linux kernel, the following vulnerability has been resolved:
netfilter: bpf: must hold reference on net namespace
BUG: KASAN: slab-use-after-free in _nfunregisternethook+0x640/0x6b0 Read of size 8 at addr ffff8880106fe400 by task repro/72= bpfnflinkrelease+0xda/0x1e0 bpflinkfree+0x139/0x2d0 bpflinkrelease+0x68/0x80 _fput+0x414/0xb60
Eric says: It seems that bpf was able to defer the _nfunregisternethook() after exit()/close() time. Perhaps a netns reference is missing, because the netns has been dismantled/freed already. bpfnflink_attach() does : link->net = net; But I do not see a reference being taken on net.
Add such a reference and release it after hook unreg. Note that I was unable to get syzbot reproducer to work, so I do not know if this resolves this splat.
[
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f41bd93b3e0508edc7ba820357f949071dcc0acc",
"id": "CVE-2024-50130-116739ee",
"target": {
"file": "net/netfilter/nf_bpf_link.c"
},
"signature_version": "v1",
"digest": {
"line_hashes": [
"337390387045765784565917987904861560078",
"230921912482870718071664023502938772841",
"18176702465860930897218463883276600011",
"143690948464569323398329512731946574237",
"125388335833633613957181634424791199092",
"156985405311920459386390093868118002129",
"8273955081059952374463036426475065718",
"205395068252976896875454079283704949736",
"333523770422117181556284308284686654141",
"33995631870894759694749938231733490730",
"223674056423739471302620160323550277443"
],
"threshold": 0.9
},
"signature_type": "Line",
"deprecated": false
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@d0d7939543a1b3bb93af9a18d258a774daf8f162",
"id": "CVE-2024-50130-14517dc5",
"target": {
"function": "bpf_nf_link_release",
"file": "net/netfilter/nf_bpf_link.c"
},
"signature_version": "v1",
"digest": {
"function_hash": "301394116118112729889518841025322448362",
"length": 289.0
},
"signature_type": "Function",
"deprecated": false
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f41bd93b3e0508edc7ba820357f949071dcc0acc",
"id": "CVE-2024-50130-3a9fea12",
"target": {
"function": "bpf_nf_link_attach",
"file": "net/netfilter/nf_bpf_link.c"
},
"signature_version": "v1",
"digest": {
"function_hash": "199997650567854648761163790994510544672",
"length": 1200.0
},
"signature_type": "Function",
"deprecated": false
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1230fe7ad3974f7bf6c78901473e039b34d4fb1f",
"id": "CVE-2024-50130-57bad24c",
"target": {
"function": "bpf_nf_link_attach",
"file": "net/netfilter/nf_bpf_link.c"
},
"signature_version": "v1",
"digest": {
"function_hash": "199997650567854648761163790994510544672",
"length": 1200.0
},
"signature_type": "Function",
"deprecated": false
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@d0d7939543a1b3bb93af9a18d258a774daf8f162",
"id": "CVE-2024-50130-7cbffc7c",
"target": {
"function": "bpf_nf_link_attach",
"file": "net/netfilter/nf_bpf_link.c"
},
"signature_version": "v1",
"digest": {
"function_hash": "199997650567854648761163790994510544672",
"length": 1200.0
},
"signature_type": "Function",
"deprecated": false
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f41bd93b3e0508edc7ba820357f949071dcc0acc",
"id": "CVE-2024-50130-97da5abb",
"target": {
"function": "bpf_nf_link_release",
"file": "net/netfilter/nf_bpf_link.c"
},
"signature_version": "v1",
"digest": {
"function_hash": "301394116118112729889518841025322448362",
"length": 289.0
},
"signature_type": "Function",
"deprecated": false
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1230fe7ad3974f7bf6c78901473e039b34d4fb1f",
"id": "CVE-2024-50130-ab947a8e",
"target": {
"file": "net/netfilter/nf_bpf_link.c"
},
"signature_version": "v1",
"digest": {
"line_hashes": [
"337390387045765784565917987904861560078",
"230921912482870718071664023502938772841",
"18176702465860930897218463883276600011",
"143690948464569323398329512731946574237",
"125388335833633613957181634424791199092",
"156985405311920459386390093868118002129",
"8273955081059952374463036426475065718",
"205395068252976896875454079283704949736",
"333523770422117181556284308284686654141",
"33995631870894759694749938231733490730",
"223674056423739471302620160323550277443"
],
"threshold": 0.9
},
"signature_type": "Line",
"deprecated": false
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1230fe7ad3974f7bf6c78901473e039b34d4fb1f",
"id": "CVE-2024-50130-d0c84fc8",
"target": {
"function": "bpf_nf_link_release",
"file": "net/netfilter/nf_bpf_link.c"
},
"signature_version": "v1",
"digest": {
"function_hash": "301394116118112729889518841025322448362",
"length": 289.0
},
"signature_type": "Function",
"deprecated": false
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@d0d7939543a1b3bb93af9a18d258a774daf8f162",
"id": "CVE-2024-50130-dd5f27a9",
"target": {
"file": "net/netfilter/nf_bpf_link.c"
},
"signature_version": "v1",
"digest": {
"line_hashes": [
"337390387045765784565917987904861560078",
"230921912482870718071664023502938772841",
"18176702465860930897218463883276600011",
"143690948464569323398329512731946574237",
"125388335833633613957181634424791199092",
"156985405311920459386390093868118002129",
"8273955081059952374463036426475065718",
"205395068252976896875454079283704949736",
"333523770422117181556284308284686654141",
"33995631870894759694749938231733490730",
"223674056423739471302620160323550277443"
],
"threshold": 0.9
},
"signature_type": "Line",
"deprecated": false
}
]