CVE-2026-98646
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
tcp: Pomiń cond_resched() w inet_csk_listen_stop() w kontekście BPF
bpf_sock_destroy() działa z iteratora tcp, pod rcu_read_lock(). Jeśli
skarpetka jest słuchaczem, który nadal ma dzieci w kolejce akceptacji,
tcp_abort() kończy się na inet_csk_listen_stop() i cond_resched()
tam następuje sprawdzenie debugowania:
BŁĄD: funkcja uśpienia wywołana z nieprawidłowego kontekstu pod adresem net/ipv4/inet_connection_sock.c:1523
in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 628, nazwa: test_progs
preempt_count: 0, oczekiwano: 0
Głębokość gniazda RCU: 1, oczekiwana: 0
blokady utrzymywane przez test_progs/628: 3, ostatni procesor nr 3:
#0: ffff8881158cee18 (&p->lock){+.+.}-{4:4}, w: bpf_seq_read+0x56/0x1210
#1: ffff8881106bb858 (sk_lock-AF_INET6){+.+.}-{0:0}, pod adresem: bpf_iter_tcp_seq_show+0x32b/0x4b0
#2: ffffffffb435af20 (rcu_read_lock){....}-{1:3}, w: bpf_iter_run_prog+0x46b/0xde0
Procesor: 3 UID: 0 PID: 628 Comm: test_progs Tainted: G W 7.2.0+ #65 PREEMPT
Skażony: [W]=OSTRZEŻ
Zadzwoń do śledzenia:
<ZADANIE>
dump_stack_lvl+0xc1/0xf0
stos_zrzutu+0x10/0x20
__might_resched+0x3d2/0x610
inet_csk_listen_stop+0x7b/0xbf0
tcp_abort+0x23b/0x3b0
bpf_sock_destroy+0xfc/0x140
bpf_prog_448133d24601754f_iter_tcp6_server+0x81/0x8a
bpf_iter_run_prog+0x538/0xde0
bpf_iter_tcp_seq_show+0x26b/0x4b0
bpf_seq_read+0x424/0x1210
vfs_read+0x197/0xe40
ksys_read+0x119/0x240
__x64_sys_read+0x72/0xc0
x64_sys_call+0x647/0x27e0
do_syscall_64+0xe5/0x610
wpis_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7fad39b28aca
RSP: 002b:00007ffc381c61c0 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
RAX: ffffffffffffffda RBX: 00007ffc381c6a88 RCX: 00007fad39b28aca
RDX: 0000000000000032 RSI: 00007ffc381c6250 RDI: 0000000000000014
RBP: 00007ffc381c61e0 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000003
R13: 0000000000000000 R14: 000055f077c1bbb0 R15: 00007fad3a0f3000
</ZADANIE>
Zatwierdzenie, które dodało kfunc, chroni już funkcję lock_sock() w tcp_abort()
i udp_abort() z has_current_bpf_ctx(), ale pominąłem ścieżkę nasłuchiwania.
Zrób to samo dla funkcji cond_resched(). Pętla działa wewnątrz iteratora
rcu_read_lock(), nie może zmieniać harmonogramu ani zgłaszać tam stanu spoczynku.
>_ Referencje
- https://git.kernel.org/stable/c/23da88d1597ee7fdda373e1530284b763710911f
- https://git.kernel.org/stable/c/55bbebf2829c3f47c5a48fc261740301d0f25f48
- https://git.kernel.org/stable/c/5b52417c6196e05618a3b5d9753dbed9adef0166
- https://git.kernel.org/stable/c/eaab8cab451b9502ce224cd202550375b894a467
- https://git.kernel.org/stable/c/ee7246bccb9da66076dd8094daa48bdc761d6b76
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org