В ядре Linux следующая уязвимость была исправлена: net: Добавление rx_skb в kfree_skb для raw_tp_null_args[]. Ян Чжай сообщил, что BPF прог…
В ядре Linux следующая уязвимость была исправлена: net: Добавление rx_skb в kfree_skb для raw_tp_null_args[]. Ян Чжай сообщил, что BPF програма может вызвать разыменование нулевого указателя [0] в trace_kfree_skb, если программа не проверяет, является ли rx_sk NULL. Коммит c53795d48ee8 ("net: добавить rx_sk в trace_kfree_skb") добавил rx_sk в trace_kfree_skb, но rx_sk является необязательным и может быть NULL. Давайте добавим kfree_skb в raw_tp_null_args[], чтобы позволить проверщику BPF валидировать такую программу и предотвратить проблему. Теперь мы не можем загрузить такую программу: libbpf: prog 'drop': -- BEGIN PROG LOAD LOG -- 0: R1=ctx() R10=fp0 ; int BPF_PROG(drop, struct sk_buff *skb, void *location, @ kfree_skb_sk_null.bpf.c:21 0: (79) r3 = *(u64 *)(r1 +24) func 'kfree_skb' arg3 has btf_id 5253 type STRUCT 'sock' 1: R1=ctx() R3_w=trusted_ptr_or_null_sock(id=1) ; bpf_printk("sk: %d, %d\n", sk, sk->__sk_common.skc_family); @ kfree_skb_sk_null.bpf.c:24 1: (69) r4 = *(u16 *)(r3 +16) R3 недоступный доступ к памяти 'trusted_ptr_or_null_' обработано 2 инструкций (лимит 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0 -- END PROG LOAD LOG -- Обратите внимание, что это исправление требует коммита 838a10bd2ebf ("bpf: увеличьте аргументы raw_tp с PTR_MAYBE_NULL"). [0]: BUG: разыменование нулевого указателя ядра, адрес: 0000000000000010 PF: доступ к чтению супервайзера в режиме ядра PF: код_ошибки(0x0000) - страница отсутствует PGD 0 P4D 0 PREEMPT SMP RIP: 0010:bpf_prog_5e21a6db8fcff1aa_drop+0x10/0x2d Call Trace: <TASK> ? __die+0x1f/0x60 ? page_fault_oops+0x148/0x420 ? search_bpf_extables+0x5b/0x70 ? fixup_exception+0x27/0x2c0 ? exc_page_fault+0x75/0x170 ? asm_exc_page_fault+0x22/0x30 ? bpf_prog_5e21a6db8fcff1aa_drop+0x10/0x2d bpf_trace_run4+0x68/0xd0 ? unix_stream_connect+0x1f4/0x6f0 sk_skb_reason_drop+0x90/0x120 unix_stream_connect+0x1f4/0x6f0 __sys_connect+0x7f/0xb0 __x64_sys_connect+0x14/0x20 do_syscall_64+0x47/0xc30 entry_SYSCALL_64_after_hwframe+0x4b/0x53
Продукт разыменовывает указатель, который предполагается допустимым, однако оказывается равным NULL.
https://cwe.mitre.org/data/definitions/476.html →Открыть в коллекции CWE →| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux-6.12 | Отслеживается | |
| linux-allwinner-5.19 | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается |