В ядре Linux устранена следующая уязвимость: bpf: sockmap: Исправить использование-после-свободы от sk->sk_sk_socket в sk_psock_verdict_dat…
В ядре Linux устранена следующая уязвимость: bpf: sockmap: Исправить использование-после-свободы от sk->sk_sk_socket в sk_psock_verdict_data_ready(). syzbot сообщил об использовании-после-бесплатно от сокета AF_UNIX sk->sk_socket в sk_psock_verdict_data_ready(). [0] В unix_stream_sendmsg(), розетка одноранговых устройств ->sk_data_ready() звонил после того, как отказался от своего unix_state_lock(). Хотя розетка отправителя держит пересчет сверстника, это не так предотвратить sock_orphan(), и sk_scket сверстника может освободиться после одного льготного периода РКГ. Давайте приведем сверстник sk->sk_socket и sk->sk_socket->ops под RCU в sk_psock_verdict_data_ready(). [0]: BUG: KASAN: slab-use-after-free в sk_psock_verdict_data_ready+0xec/0x590 нет/core/skmsg.c:1278 Прочитайте размер 8 в idr ff8880594da860 в разбивке по задачам syz.4.1842/111013 CPU: 1 UID: 0 PID: 11013 Comm: syz.4.1842 Не испорченный сызкаллер #0 ПРЕМПТ (полный) Аппаратное название: Google Compute Engine/Google Compute Engine, BIOS Google 02/12/2026 Трейс по вызову: <TASK> дап_стак_lvl+0xe8/0x150 lib/dump_stack.c:120 print_address_description мм/kasan/report.c:378 [inline] print_report+0xba/0x230 мм/kasan/report.c:482 kasan_report+0x117/0x150 мм/kasan/report.c:595 sk_psock_verdict_data_ready+0xec/0x590 нет/core/skmsg.c:1278 unix_stream_sendmsg+0x8a3/0xe80 нетт/unix/af_unix.c:2482 sock_sendmsg_nosec net/socket.c:721 [inline] __sock_sendmsg net/socket.c:736 [inline] ___syss_sendmsg+0x972/0x9f0 net/socket.c:2585 ___sys_sendmsg+0x2a5/0x360 net/socket.c:2639 __sys_sendmsg net/socket.c:2671 [в строку] __do_sys_sendmsg net/socket.c:2676 [inline] __se_sys_sendmsg net/socket.c:2674 [inline] __x64_sys_sendmsg+0x1bd/0x2a0 net/socket.c:2674 do_syscaall_x64 арка/x86/вход/syscal_64.c:63 [inline] do_syscall_64+0x14d/0xf80 арка/x86/entry/syscall_64.c:94 вход_SYSCALL_64_after_hwframe+0x77/0x7f РИП: 0033:0x7f9c899c819 Код: ff c3 66 2e 0f 1f 84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 м/с 4c 4c 4c 24 08 0f 05 <48> 3d 01 ff ff 73 01 c3 48 c1 e8 ff ff ff ff ff ff 7 РСП: 002b:00007FAF9927028 ФАГЫ: 00000246 ORIG_RAX: 00000000000002e RAX: ffffffffffffffda RBX: 00007fcf8c15fa0 RCX: 00007faf899c819 RDX: 000000000000 RSI: 00000000000 РЕД: 0000000000004 ДРБП: 00007Ф9у32c91 Р08: 000000000000000Р 09: 000000000000000 R10: 00000000000000 R11: 000000000000246 R12: 00000000000000 R13: 00007facf8c16038 R14: 00007facf8c15f15fa0 R15: 00007ffd41b01c78 </ЗАЯДВИКА> Выделено заданием 11013: kasan_save_stack mm/kasan/common.c:57 [inline] kasan_save_track+0x3e/0x80 мм/kasan/common.c:78 unpoison_slab_object мм/kasan/common.c:340 [inline] __kasan_slab_alloc+0x6c/0x80 мм/kasan/common.c:366 kasan_slab_alloc включить/linux/kasan.h:253 [inline] slab_post_post_alloc_hook mm/slub.c:4538 [inline] slab_alloc_node мм/slub.c:4866 [inline] kmem_cache_alloc_lru_noprof+0x2b8/0x640 мм/slub.c:4885 sock_alloc_inode+0x28/0xc0 net/socket.c:316 alloc_inode+0x6a/0x1b0 fs/inode.c:347 new_inode_pseudo включить/linux/fs.h:3003 [inline] sock_alloc net/socket.c:631 [inline] __sock_create+0x12d/0x9d0 net/socket.c:1562 sock_create net/socket.c:1656 [inline] __sys_sockepir+0x1c4/0x560 net/socket.c:1803 __do_sys_sockepir net/socket.c:1856 [inline] __se_sys_sockepir net/socket.c:1853 [inline] __x64_sys_skloadpir+0x9b/0xb0 net/socket.c:1853 do_syscaall_x64 арка/x86/вход/syscal_64.c:63 [inline] do_syscall_64+0x14d/0xf80 арка/x86/entry/syscall_64.c:94 вход_SYSCALL_64_after_hwframe+0x77/0x7f Освобождение заданием 15: kasan_save_stack mm/kasan/common.c:57 [inline] kasan_save_track+0x3e/0x80 мм/kasan/common.c:78 kasan_save_free_info_info+0x46/0x50 мм/kasan/generic.c:584 mod_slab_object мм/kasan/common.c:253 [inline] __kasan_slab_free+0x5c/0x80 мм/kasan/common.c:285 kasan_slab_free включить/linux/kasan.h:235 [inline] slab_free_hook mm/slub.c:2685 [inline] slab_free mm/slub.c:6165 [inline] kmem_cache_free+0x187/0x630 мм/slub.c:6295 rcu_do_batch ядро/rcu/tree.c: ---усеченный---
Продукт повторно использует или ссылается на память после её освобождения. В какой-то момент эта память может быть выделена повторно и сохранена в другом указателе, тогда как исходный указатель на освобождённую память используется вновь. Поскольку теперь по этому адресу может храниться посторонний объект, исходное использование указателя может привести к повреждению памяти или иным непреднамеренным последствиям. Если новая структура данных содержит указатель на функцию, то при исполнении может быть вызван код, контролируемый злоумышленником.
https://cwe.mitre.org/data/definitions/416.html →Открыть в коллекции CWE →| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux_kernel | * | Отслеживается |
| kernel-doc-6.12 | Отслеживается | |
| kernel-doc-6.12 | Отслеживается | |
| kernel-doc-6.12 | Отслеживается | |
| kernel-doc-6.18 | Отслеживается | |
| kernel-doc-6.18 | Отслеживается | |
| kernel-headers-6.12 | Отслеживается | |
| kernel-headers-6.12 | Отслеживается | |
| kernel-headers-6.12 | Отслеживается | |
| kernel-headers-6.18 | Отслеживается | |
| kernel-headers-6.18 | Отслеживается | |
| kernel-headers-modules-6.12 | Отслеживается | |
| kernel-headers-modules-6.12 | Отслеживается | |
| kernel-headers-modules-6.12 | Отслеживается | |
| kernel-headers-modules-6.18 | Отслеживается | |
| kernel-headers-modules-6.18 | Отслеживается | |
| kernel-headers-modules-pine | Отслеживается |