CVE-2023-54155

NONE EPSS 0.03%
Обновлено 29 декабря 2025
Red Hat
Параметр Значение
Поставщик Red Hat
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: net: core: удалить ненужную проверку Frame_sz в bpf_xdp_adjust_tail() Syzkaller сообщил о следующей проблеме: ====================================== Слишком БОЛЬШОЙ xdp->frame_sz = 131072 ВНИМАНИЕ: ЦП: 0 PID: 5020 в net/core/filter.c:4121 ____bpf_xdp_adjust_tail net/core/filter.c:4121 [встроенный] ВНИМАНИЕ: ЦП: 0 PID: 5020 в net/core/filter.c:4121 bpf_xdp_adjust_tail+0x466/0xa10 net/core/filter.c:4103 ... Отслеживание вызова: <ЗАДАЧА> bpf_prog_4add87e5301a4105+0x1a/0x1c __bpf_prog_run include/linux/filter.h:600 [встроенный] bpf_prog_run_xdp include/linux/filter.h:775 [встроенный] bpf_prog_run_generic_xdp+0x57e/0x11e0 net/core/dev.c:4721 netif_receive_generic_xdp net/core/dev.c:4807 [встроенный] do_xdp_generic+0x35c/0x770 net/core/dev.c:4866 tun_get_user+0x2340/0x3ca0 driver/net/tun.c:1919 tun_chr_write_iter+0xe8/0x210 driver/net/tun.c:2043 call_write_iter include/linux/fs.h:1871 [встроенный] new_sync_write fs/read_write.c:491 [встроенный] vfs_write+0x650/0xe40 fs/read_write.c:584 ksys_write+0x12f/0x250 фс/read_write.c:637 do_syscall_x64 Arch/x86/entry/common.c:50 [встроенный] do_syscall_64+0x38/0xb0 Arch/x86/entry/common.c:80 запись_SYSCALL_64_after_hwframe+0x63/0xcd xdp->frame_sz > Проверка PAGE_SIZE была введена в коммите c8741e2bfe87. («xdp: разрешить bpf_xdp_adjust_tail() увеличивать размер пакета»). Но Джеспер Дангаард Брауэр <jbrouer@redhat.com> отметил, что после введения xdp_init_buff(), который используют все драйверы XDP — его можно безопасно удалить. проверьте.

Первоначальной целью было выявить случаи, когда драйверы XDP не был обновлен для использования xdp.frame_sz, но это больше не проблема (начиная с xdp_init_buff). Запустив первоначальное воспроизведение syzkaller, было обнаружено, что Непрерывное выделение физической памяти используется для обоих путей xdp в tun_get_user(), например. tun_build_skb() и tun_alloc_skb(). Это было также заявил Джеспер Дангаард Брауэр <jbrouer@redhat.com>, что XDP может работать на страницах более высокого порядка, если они являются смежными физическими память (например, страница).

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: net: core: remove unnecessary frame_sz check in bpf_xdp_adjust_tail() Syzkaller reported the following issue: ======================================= Too BIG xdp->frame_sz = 131072 WARNING: CPU: 0 PID: 5020 at net/core/filter.c:4121 ____bpf_xdp_adjust_tail net/core/filter.c:4121 [inline] WARNING: CPU: 0 PID: 5020 at net/core/filter.c:4121 bpf_xdp_adjust_tail+0x466/0xa10 net/core/filter.c:4103 ... Call Trace: <TASK> bpf_prog_4add87e5301a4105+0x1a/0x1c __bpf_prog_run include/linux/filter.h:600 [inline] bpf_prog_run_xdp include/linux/filter.h:775 [inline] bpf_prog_run_generic_xdp+0x57e/0x11e0 net/core/dev.c:4721 netif_receive_generic_xdp net/core/dev.c:4807 [inline] do_xdp_generic+0x35c/0x770 net/core/dev.c:4866 tun_get_user+0x2340/0x3ca0 drivers/net/tun.c:1919 tun_chr_write_iter+0xe8/0x210 drivers/net/tun.c:2043 call_write_iter include/linux/fs.h:1871 [inline] new_sync_write fs/read_write.c:491 [inline] vfs_write+0x650/0xe40 fs/read_write.c:584 ksys_write+0x12f/0x250 fs/read_write.c:637 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x38/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd xdp->frame_sz > PAGE_SIZE check was introduced in commit c8741e2bfe87 ("xdp: Allow bpf_xdp_adjust_tail() to grow packet size"). But Jesper Dangaard Brouer <jbrouer@redhat.com> noted that after introducing the xdp_init_buff() which all XDP driver use - it's safe to remove this check. The original intend was to catch cases where XDP drivers have not been updated to use xdp.frame_sz, but that is not longer a concern (since xdp_init_buff). Running the initial syzkaller repro it was discovered that the contiguous physical memory allocation is used for both xdp paths in tun_get_user(), e.g. tun_build_skb() and tun_alloc_skb(). It was also stated by Jesper Dangaard Brouer <jbrouer@redhat.com> that XDP can work on higher order pages, as long as this is contiguous physical memory (e.g. a page).