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.
{ "vanir_signatures": [ { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@d0d7939543a1b3bb93af9a18d258a774daf8f162", "deprecated": false, "id": "CVE-2024-50130-14517dc5", "signature_type": "Function", "digest": { "length": 289.0, "function_hash": "301394116118112729889518841025322448362" }, "target": { "file": "net/netfilter/nf_bpf_link.c", "function": "bpf_nf_link_release" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1230fe7ad3974f7bf6c78901473e039b34d4fb1f", "deprecated": false, "id": "CVE-2024-50130-57bad24c", "signature_type": "Function", "digest": { "length": 1200.0, "function_hash": "199997650567854648761163790994510544672" }, "target": { "file": "net/netfilter/nf_bpf_link.c", "function": "bpf_nf_link_attach" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@d0d7939543a1b3bb93af9a18d258a774daf8f162", "deprecated": false, "id": "CVE-2024-50130-7cbffc7c", "signature_type": "Function", "digest": { "length": 1200.0, "function_hash": "199997650567854648761163790994510544672" }, "target": { "file": "net/netfilter/nf_bpf_link.c", "function": "bpf_nf_link_attach" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1230fe7ad3974f7bf6c78901473e039b34d4fb1f", "deprecated": false, "id": "CVE-2024-50130-ab947a8e", "signature_type": "Line", "digest": { "threshold": 0.9, "line_hashes": [ "337390387045765784565917987904861560078", "230921912482870718071664023502938772841", "18176702465860930897218463883276600011", "143690948464569323398329512731946574237", "125388335833633613957181634424791199092", "156985405311920459386390093868118002129", "8273955081059952374463036426475065718", "205395068252976896875454079283704949736", "333523770422117181556284308284686654141", "33995631870894759694749938231733490730", "223674056423739471302620160323550277443" ] }, "target": { "file": "net/netfilter/nf_bpf_link.c" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1230fe7ad3974f7bf6c78901473e039b34d4fb1f", "deprecated": false, "id": "CVE-2024-50130-d0c84fc8", "signature_type": "Function", "digest": { "length": 289.0, "function_hash": "301394116118112729889518841025322448362" }, "target": { "file": "net/netfilter/nf_bpf_link.c", "function": "bpf_nf_link_release" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@d0d7939543a1b3bb93af9a18d258a774daf8f162", "deprecated": false, "id": "CVE-2024-50130-dd5f27a9", "signature_type": "Line", "digest": { "threshold": 0.9, "line_hashes": [ "337390387045765784565917987904861560078", "230921912482870718071664023502938772841", "18176702465860930897218463883276600011", "143690948464569323398329512731946574237", "125388335833633613957181634424791199092", "156985405311920459386390093868118002129", "8273955081059952374463036426475065718", "205395068252976896875454079283704949736", "333523770422117181556284308284686654141", "33995631870894759694749938231733490730", "223674056423739471302620160323550277443" ] }, "target": { "file": "net/netfilter/nf_bpf_link.c" } } ] }