In the Linux kernel, the following vulnerability has been resolved:
xsk: validate user input for XDP{UMEM|COMPLETION}FILL_RING
syzbot reported an illegal copy in xsk_setsockopt() [1]
Make sure to validate setsockopt() @optlen parameter.
[1]
BUG: KASAN: slab-out-of-bounds in copyfromsockptroffset include/linux/sockptr.h:49 [inline] BUG: KASAN: slab-out-of-bounds in copyfromsockptr include/linux/sockptr.h:55 [inline] BUG: KASAN: slab-out-of-bounds in xsksetsockopt+0x909/0xa40 net/xdp/xsk.c:1420 Read of size 4 at addr ffff888028c6cde3 by task syz-executor.0/7549
CPU: 0 PID: 7549 Comm: syz-executor.0 Not tainted 6.8.0-syzkaller-08951-gfe46a7dd189e #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024 Call Trace: <TASK> _dumpstack lib/dumpstack.c:88 [inline] dumpstacklvl+0x241/0x360 lib/dumpstack.c:114 printaddressdescription mm/kasan/report.c:377 [inline] printreport+0x169/0x550 mm/kasan/report.c:488 kasanreport+0x143/0x180 mm/kasan/report.c:601 copyfromsockptroffset include/linux/sockptr.h:49 [inline] copyfromsockptr include/linux/sockptr.h:55 [inline] xsksetsockopt+0x909/0xa40 net/xdp/xsk.c:1420 dosocksetsockopt+0x3af/0x720 net/socket.c:2311 _syssetsockopt+0x1ae/0x250 net/socket.c:2334 _dosyssetsockopt net/socket.c:2343 [inline] _sesyssetsockopt net/socket.c:2340 [inline] _x64syssetsockopt+0xb5/0xd0 net/socket.c:2340 dosyscall64+0xfb/0x240 entrySYSCALL64afterhwframe+0x6d/0x75 RIP: 0033:0x7fb40587de69 Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 e1 20 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007fb40665a0c8 EFLAGS: 00000246 ORIGRAX: 0000000000000036 RAX: ffffffffffffffda RBX: 00007fb4059abf80 RCX: 00007fb40587de69 RDX: 0000000000000005 RSI: 000000000000011b RDI: 0000000000000006 RBP: 00007fb4058ca47a R08: 0000000000000002 R09: 0000000000000000 R10: 0000000020001980 R11: 0000000000000246 R12: 0000000000000000 R13: 000000000000000b R14: 00007fb4059abf80 R15: 00007fff57ee4d08 </TASK>
Allocated by task 7549: kasansavestack mm/kasan/common.c:47 [inline] kasansavetrack+0x3f/0x80 mm/kasan/common.c:68 poisonkmallocredzone mm/kasan/common.c:370 [inline] _kasankmalloc+0x98/0xb0 mm/kasan/common.c:387 kasankmalloc include/linux/kasan.h:211 [inline] _dokmallocnode mm/slub.c:3966 [inline] _kmalloc+0x233/0x4a0 mm/slub.c:3979 kmalloc include/linux/slab.h:632 [inline] _cgroupbpfrunfiltersetsockopt+0xd2f/0x1040 kernel/bpf/cgroup.c:1869 dosocksetsockopt+0x6b4/0x720 net/socket.c:2293 _syssetsockopt+0x1ae/0x250 net/socket.c:2334 _dosyssetsockopt net/socket.c:2343 [inline] _sesyssetsockopt net/socket.c:2340 [inline] _x64syssetsockopt+0xb5/0xd0 net/socket.c:2340 dosyscall64+0xfb/0x240 entrySYSCALL64after_hwframe+0x6d/0x75
The buggy address belongs to the object at ffff888028c6cde0 which belongs to the cache kmalloc-8 of size 8 The buggy address is located 1 bytes to the right of allocated 2-byte region [ffff888028c6cde0, ffff888028c6cde2)
The buggy address belongs to the physical page: page:ffffea0000a31b00 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff888028c6c9c0 pfn:0x28c6c anon flags: 0xfff00000000800(slab|node=0|zone=1|lastcpupid=0x7ff) pagetype: 0xffffffff() raw: 00fff00000000800 ffff888014c41280 0000000000000000 dead000000000001 raw: ffff888028c6c9c0 0000000080800057 00000001ffffffff 0000000000000000 page dumped because: kasan: bad access detected pageowner tracks the page as allocated page last allocated via order 0, migratetype Unmovable, gfpmask 0x112cc0(GFPUSER|GFPNOWARN|GFPNORETRY), pid 6648, tgid 6644 (syz-executor.0), ts 133906047828, freets 133859922223 setpageowner include/linux/pageowner.h:31 [inline] postallochook+0x1ea/0x210 mm/pagealloc.c:1533 prepnewpage mm/pagealloc.c: ---truncated---
{ "vanir_signatures": [ { "deprecated": false, "signature_type": "Line", "target": { "file": "net/xdp/xsk.c" }, "signature_version": "v1", "digest": { "line_hashes": [ "183540943433506676168345831392011630983", "157203620412192344234573319575224834040", "126666486283051787215722494438531354904", "91347781209608318677699328436377677540", "42363326080693709090063674880928637660", "304477114144451008882735453572200862852" ], "threshold": 0.9 }, "id": "CVE-2024-35976-05440099", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@beb99266830520e15fbc6ca8cc5a5240d76851fd" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "net/xdp/xsk.c" }, "signature_version": "v1", "digest": { "line_hashes": [ "163622261824111025862327199193518967189", "299737705491301174015352484552105733681", "170793138253340608665521948893908455113" ], "threshold": 0.9 }, "id": "CVE-2024-35976-0f09d53d", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f0a068de65d5b7358e9aff792716afa9333f3922" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "net/xdp/xsk.c", "function": "xsk_setsockopt" }, "signature_version": "v1", "digest": { "length": 1833.0, "function_hash": "314607755404835658996706045138867260892" }, "id": "CVE-2024-35976-44a09f38", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a82984b3c6a7e8c7937dba6e857ddf829d149417" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "net/xdp/xsk.c", "function": "xsk_setsockopt" }, "signature_version": "v1", "digest": { "length": 1833.0, "function_hash": "314607755404835658996706045138867260892" }, "id": "CVE-2024-35976-5f7b7ca0", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b143e19dc28c3211f050f7848d87d9b0a170e10c" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "net/xdp/xsk.c" }, "signature_version": "v1", "digest": { "line_hashes": [ "91347781209608318677699328436377677540", "42363326080693709090063674880928637660", "304477114144451008882735453572200862852" ], "threshold": 0.9 }, "id": "CVE-2024-35976-63d58ab8", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@0b45c25d60e38f5c2cb6823f886773a34323306d" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "net/xdp/xsk.c" }, "signature_version": "v1", "digest": { "line_hashes": [ "163622261824111025862327199193518967189", "299737705491301174015352484552105733681", "170793138253340608665521948893908455113" ], "threshold": 0.9 }, "id": "CVE-2024-35976-6e28cf9a", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b143e19dc28c3211f050f7848d87d9b0a170e10c" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "net/xdp/xsk.c" }, "signature_version": "v1", "digest": { "line_hashes": [ "163622261824111025862327199193518967189", "299737705491301174015352484552105733681", "170793138253340608665521948893908455113" ], "threshold": 0.9 }, "id": "CVE-2024-35976-71a8be63", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a82984b3c6a7e8c7937dba6e857ddf829d149417" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "net/xdp/xsk.c", "function": "xsk_setsockopt" }, "signature_version": "v1", "digest": { "length": 1833.0, "function_hash": "314607755404835658996706045138867260892" }, "id": "CVE-2024-35976-779daa2e", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@2a523f14a3f53b46ff0e1fafd215b0bc5f6783aa" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "net/xdp/xsk.c", "function": "xsk_setsockopt" }, "signature_version": "v1", "digest": { "length": 1494.0, "function_hash": "195036808539748690326675135846628083405" }, "id": "CVE-2024-35976-a85949ec", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@beb99266830520e15fbc6ca8cc5a5240d76851fd" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "net/xdp/xsk.c", "function": "xsk_setsockopt" }, "signature_version": "v1", "digest": { "length": 1833.0, "function_hash": "314607755404835658996706045138867260892" }, "id": "CVE-2024-35976-c76b9bdb", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f0a068de65d5b7358e9aff792716afa9333f3922" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "net/xdp/xsk.c" }, "signature_version": "v1", "digest": { "line_hashes": [ "163622261824111025862327199193518967189", "299737705491301174015352484552105733681", "170793138253340608665521948893908455113" ], "threshold": 0.9 }, "id": "CVE-2024-35976-df0ebaf2", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@2a523f14a3f53b46ff0e1fafd215b0bc5f6783aa" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "net/xdp/xsk.c", "function": "xsk_setsockopt" }, "signature_version": "v1", "digest": { "length": 1913.0, "function_hash": "46859969097004277400220651220512831028" }, "id": "CVE-2024-35976-e46dc63d", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@0b45c25d60e38f5c2cb6823f886773a34323306d" } ] }