"value":"In the Linux kernel, the following vulnerability has been resolved:\n\naf_unix: Don't return OOB skb in manage_oob().\n\nsyzbot reported use-after-free in unix_stream_recv_urg(). [0]\n\nThe scenario is\n\n 1. send(MSG_OOB)\n 2. recv(MSG_OOB)\n -> The consumed OOB remains in recv queue\n 3. send(MSG_OOB)\n 4. recv()\n -> manage_oob() returns the next skb of the consumed OOB\n -> This is also OOB, but unix_sk(sk)->oob_skb is not cleared\n 5. recv(MSG_OOB)\n -> unix_sk(sk)->oob_skb is used but already freed\n\nThe recent commit 8594d9b85c07 (\"af_unix: Don't call skb_get() for OOB\nskb.\")uncoveredtheissue.\n\nIftheOOBskbisconsumedandthenextskbispeekedinmanage_oob(),\nwestillneedtocheckiftheskbisOOB.\n\nLet'sdosobyfallingbacktothefollowingchecksinmanage_oob()\nandaddthetestcaseinselftest.\n\nNotethatweneedtoaddasimilarcheckforSIOCATMARK.\n\n[0]:\nBUG:KASAN:slab-use-after-freeinunix_stream_read_actor+0xa6/0xb0net/unix/af_unix.c:2959\nReadofsize4ataddrffff8880326abcc4bytasksyz-executor178/5235\n\nCPU:0UID:0PID:5235Comm:syz-executor178Nottainted6.11.0-rc5-syzkaller-00742-gfbdaffe41adc#0\nHardwarename:GoogleGoogleComputeEngine/GoogleComputeEngine,BIOSGoogle08/06/2024\nCallTrace:\n<TASK>\n__dump_stacklib/dump_stack.c:93[inline]\ndump_stack_lvl+0x241/0x360lib/dump_stack.c:119\nprint_address_descriptionmm/kasan/report.c:377[inline]\nprint_report+0x169/0x550mm/kasan/report.c:488\nkasan_report+0x143/0x180mm/kasan/report.c:601\nunix_stream_read_actor+0xa6/0xb0net/unix/af_unix.c:2959\nunix_stream_recv_urg+0x1df/0x320net/unix/af_unix.c:2640\nunix_stream_read_generic+0x2456/0x2520net/unix/af_unix.c:2778\nunix_stream_recvmsg+0x22b/0x2c0net/unix/af_unix.c:2996\nsock_recvmsg_nosecnet/socket.c:1046[inline]\nsock_recvmsg+0x22f/0x280net/socket.c:1068\n____sys_recvmsg+0x1db/0x470net/socket.c:2816\n___sys_recvmsgnet/socket.c:2858[inline]\n__sys_recvmsg+0x2f0/0x3e0net/socket.c:2888\ndo_syscall_x64arch/x86/entry/common.c:52[inline]\ndo_syscall_64+0xf3/0x230arch/x86/entry/common.c:83\nentry_SYSCALL_64_after_hwframe+0x77/0x7f\nRIP:0033:0x7f5360d6b4e9\nCode:4883c428c3e8371700000f1f80000000004889f84889f74889d64889ca4d89c24d89c84c8b4c24080f05<48>3d01f0ffff7301c348c7c1b8fffffff7d864890148\nRSP:002b:00007fff29b3a458EFLAGS:00000246ORIG_RAX:000000000000002f\nRAX:ffffffffffffffdaRBX:00007fff29b3a638RCX:00007f5360d6b4e9\nRDX:0000000000002001RSI:0000000020000640RDI:0000000000000003\nRBP:00007f5360dde610R08:0000000000000000R09:0000000000000000\nR10:0000000000000000R11:0000000000000246R12:0000000000000001\nR13:00007fff29b3a628R14:0000000000000001R15:0000000000000001\n</TASK>\n\nAllocatedbytask5235:\nkasan_save_stackmm/kasan/common.c:47[inline]\nkasan_save_track+0x3f/0x80mm/kasan/common.c:68\nunpoison_slab_objectmm/kasan/common.c:312[inline]\n__kasan_slab_alloc+0x66/0x80mm/kasan/common.c:338\nkasan_slab_allocinclude/linux/kasan.h:201[inline]\nslab_post_alloc_hookmm/slub.c:3988[inline]\nslab_alloc_nodemm/slub.c:4037[inline]\nkmem_cache_alloc_node_noprof+0x16b/0x320mm/slub.c:4080\n__alloc_skb+0x1c3/0x440net/core/skbuff.c:667\nalloc_skbinclude/linux/skbuff.h:1320[inline]\nalloc_skb_with_frags+0xc3/0x770net/core/skbuff.c:6528\nsock_alloc_send_pskb+0x91a/0xa60net/core/sock.c:2815\nsock_alloc_send_skbinclude/net/sock.h:1778[inline]\nqueue_oob+0x108/0x680net/unix/af_unix.c:2198\nunix_stream_sendmsg+0xd24/0xf80net/unix/af_unix.c:2351\nsock_sendmsg_nosecnet/socket.c:730[inline]\n__sock_sendmsg+0x221/0x270net/socket.c:745\n____sys_sendmsg+0x525/0x7d0net/socket.c:2597\n___sys_sendmsgnet/socket.c:2651[inline]\n__sys_sendmsg+0x2b0/0x3a0net/socket.c:2680\ndo_syscall_x64arch/x86/entry/common.c:52[inline]\ndo_syscall_64+0xf3/0x230arch/x86/entry/common.c:83\nentry_SYSCALL_64_after_hwframe+0x77/0x7f\n\nFreedbytask5235:\nkasan_save_stackmm/kasan/common.c:47\n---
"value":"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: af_unix: No devuelva skb OOB en manage_oob(). syzbot inform\u00f3 de un error de use after free en unix_stream_recv_urg(). [0] El escenario es 1. send(MSG_OOB) 2. recv(MSG_OOB) -> El OOB consumido permanece en la cola de recepci\u00f3n 3. send(MSG_OOB) 4. recv() -> manage_oob() devuelve el siguiente skb del OOB consumido -> Este tambi\u00e9n es OOB, pero unix_sk(sk)->oob_skb no se borra 5. recv(MSG_OOB) -> unix_sk(sk)->oob_skb se usa pero ya se liber\u00f3 La reciente confirmaci\u00f3n 8594d9b85c07 (\"af_unix: No llame a skb_get() para skb OOB\")descubri\u00f3elproblema.SiseconsumeelskbOOByseexaminaelsiguienteskbenmanage_oob(),a\u00fannecesitamosverificarsielskbesOOB.Hag\u00e1moslorecurriendoalassiguientesverificacionesenmanage_oob()yagregandoelcasodepruebaenselftest.Tengaencuentaquenecesitamosagregarunaverificaci\u00f3nsimilarparaSIOCATMARK.[0]:ERROR:KASAN:slab-use-after-freeenunix_stream_read_actor+0xa6/0xb0net/unix/af_unix.c:2959Lecturadetama\u00f1o4enladirecci\u00f3nffff8880326abcc4porlatareasyz-executor178/5235CPU:0UID:0PID:5235Comm:syz-executor178Nocontaminado6.11.0-rc5-syzkaller-00742-gfbdaffe41adc#0Nombredelhardware:GoogleGoogleComputeEngine/GoogleComputeEngine,BIOSGoogle08/06/2024Seguimientodellamadas:__dump_stacklib/dump_stack.c:93[enl\u00ednea]dump_stack_lvl+0x241/0x360lib/dump_stack.c:119descripci\u00f3ndeladirecci\u00f3ndeimpresi\u00f3nmm/kasan/report.c:377[enl\u00ednea]informedeimpresi\u00f3n+0x169/0x550mm/kasan/report.c:488informedekasan+0x143/0x180mm/kasan/report.c:601unix_stream_read_actor+0xa6/0xb0net/unix/af_unix.c:2959unix_stream_recv_urg+0x1df/0x320net/unix/af_unix.c:2640unix_stream_read_generic+0x2456/0x2520net/unix/af_unix.c:2778unix_stream_recvmsg+0x22b/0x2c0net/unix/af_unix.c:2996sock_recvmsg_nosecred/socket.c:1046[enl\u00ednea]sock_recvmsg+0x22f/0x280red/socket.c:1068____sys_recvmsg+0x1db/0x470red/socket.c:2816___sys_recvmsgred/socket.c:2858[enl\u00ednea]__sys_recvmsg+0x2f0/0x3e0red/socket.c:2888do_syscall_x64arch/x86/entry/common.c:52[enl\u00ednea]do_syscall_64+0xf3/0x230arch/x86/entry/common.c:83entry_SYSCALL_64_after_hwframe+0x77/0x7fDESCARGA:0033:0x7f5360d6b4e9C\u00f3digo:4883c428c3e8371700000f1f80000000004889f84889f74889d64889ca4d89c24d89c84c8b4c24080f05<48>3d01f0ffff7301c348c7c1b8fffffff7d864890148RSP:002b:00007fff29b3a458EFLAGS:00000246ORIG_RAX:000000000000002fRAX:ffffffffffffffdaRBX:00007fff29b3a638RCX:00007f5360d6b4e9RDX:0000000000002001RSI:0000000020000640RDI:0000000000000003RBP:00007f5360dde610R08:0000000000000000R09:0000000000000000R10:0000000000000000R11:0000000000000246R12:00000000000000001R13:00007fff29b3a628R14:0000000000000001R15:0000000000000001Asignadoporlatarea5235:kasan_save_stackmm/kasan/common.c:47[enl\u00ednea]kasan_save_track+0x3f/0x80mm/kasan/common.c:68unpoison_slab_objectmm/kasan/common.c:312[enl\u00ednea]__kasan_slab_alloc+0x66/0x80mm/kasan/common.c:338kasan_slab_allocinclude/linux/kasan.h:201[enl\u00ednea]slab_post_alloc_hookmm/slub.c:3988[enl\u00ednea]slab_alloc_nodemm/slub.c:4037[enl\u00ednea]kmem_cache_alloc_node_noprof+0x16b/0x320mm/slub.c:4080__alloc_skb+0x1c3/0x440net/core/skbuff.c:667alloc_skbinclude/linux/skbuff.h:1320[enl\u00ednea]alloc_skb_with_frags+0xc3/0x770net/core/skbuff.c:6528sock_alloc_send_pskb+0x91a/0xa60net/core/sock.c:2815sock_alloc_send_skbinclude/net/sock.h:1778[enl\u00ednea]queue_oob+0x108/0x680net/unix/af_unix.c:2198unix_stream_sendmsg+0xd24/0xf80net/unix/af_unix.c:2351sock_sendmsg_nosecnet/socket.c:730[enl\u00ednea]__sock_sendmsg+0x221/0x270net/socket.c:745____sys_sendmsg+0x525/0x7d0net/socket.c:2597___sys_sendmsgnet/socket.c:2651[enl\u00ednea]__sys_sendmsg+0x2b0/0x3a0net/socket.c:2680do_syscall_x64arch/x86/entry/common