В ядре Linux устранена следующая уязвимость: xsk: избегайте повреждения данных на номере дескриптора cq С момента совершения 30f241fcfb52a …
В ядре Linux устранена следующая уязвимость: xsk: избегайте повреждения данных на номере дескриптора cq С момента совершения 30f241fcfb52a ("xsk: Исправить незрелый cq дескриптор производство"), номер дескриптора хранится в блоке управления skb и xsk_cq_submit_addr_locked() полагается на него, чтобы положить umemadrs на Очереди на завершение бассейна. блок управления skb не должен использоваться для этой цели, так как после передачи xsk не контролирует его, и другие подсистемы могут использовать его. Это приводит к следующей панике ядра из-за отсчета указателя NULL. BUG: ядро NULL указатель дессификация, адрес: 00000000000000000 #PF: супервайзер читает доступ в режиме ядра #PF: error_code(0x0000) - не-представленная страница ПГД 0 P4D 0 Упс: Упс: 0000 [#1] SMP NOPTI CPU: 2 UID: 1 PID: 927 Comm: p4xsk.bin Не испорченный 6.16.12+deb14-cloud-amd64 #1 ПРЕМПТ (ленивый) Дебьян 6.16.12-1 Аппаратное название: QEMU Стандартный ПК (i440FX + PIIX, 1996), BIOS 1.17.0-debian-1.17.0-1 04/01/2014 RIP: 0010:xsk_destruct_skb+0xd0/0x180 [...] Трейс по вызову: <IRQ> ? napi_complete_done+0x7a/0x1a0 ip_rcv_core+0x1bb/0x340 ip_rcv+0x30/0x1f0 __netif_receive_skb_one_core+0x85/0xa0 процесс_backlog+0x87/0x130 __napi_poll+0x28/0x180 net_rx_action+0x339/0x420 ручка_softirqs+0xdc/0x320 ? ручка_edge_irq+0x90/0x1e0 do_softirq.part.0+0x3b/0x60 </IRQ> <TASK> __local_bh_enable_ip+0x60/0x70 __dev_direct_direct_xmit+0x14e/0x1f0 __xsk_generic_xmit+0x482/0xb70 ? __remove_hrtimer+0x41/0xa0 ? __xsk_generic_xmit+0x51/0xb70 ? _raw_spin_unlock_irqrestore+0xe/0x40 xsk_sendmsg+0xda/0x1c0 __sys_sendto+0x1ee/0x200 __x64_sys_sendto+0x24/0x30 do_syscall_64+0x84/0x2f0 ? __pfx_pollwake+0x10/0x10 ? __rseq_handle_notify_reume+0x4c0 ? восстановить_fpregs_from_fpstate+0x3c/0x90 ? переключатель_fpu_return+0x5b/0xe0 ? do_syscal_64+0x204/0x2f0 ? do_syscal_64+0x204/0x2f0 ? do_syscal_64+0x204/0x2f0 вход_SYSCALL_64_after_hwframe+0x76/0x7e </ЗАЯДВК> [...] Паника ядра - не синхронизировать: Фатальное исключение в прерывании Офсет ядра: 0x1c000000 от 0xffffffff81000000 (диапазон переезда: 0xffffffff80000000-0xffffffffffffffffffffffffffff) Вместо этого используйте skb destructor_arg pointer тег вместе с тегированием указателя. Поскольку указатели всегда выровнены до 8B, используйте нижний бит, чтобы указать будь то один адрес или выделенная структура, содержащая несколько адреса.
| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux-allwinner-5.19 | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается |