CVE-2026-98151
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
bpf: Napraw NARUSZENIE REG INVARIANTS w spekulatywnej arytmetyce wskaźników
Weźmy za przykład następujący nieuprzywilejowany program:
r0 = bpf_map_lookup_elem(...) /* PTR_TO_MAP_VALUE, przesunięcie 0 */
...
14: r0 += r1 /* r1 jest skalarem ograniczonym */
15: r9 = r0
Załadowanie wyzwala ostrzeżenie weryfikatora z reg_bounds_sanity_check():
błąd weryfikatora: REG INVARIANTS VIOLATION (alu): const subreg tnum out
synchronizacji z granicami zakresu r64={.base=0x0, .size=0x0}
r32={.base=0x0, .size=0xffffffff} var_off=(0x0, 0x0)
Co się dzieje:
1. Przetwarzanie insn 14 (r0 += r1) w dostosowania_ptr_min_max_vals(), nowy
offset jest obliczany w zakresach var_off i 32/64-bitowych dst_reg.
2. Ponieważ rejestry wskaźników nie śledzą 32-bitowych granic podrejestrów,
__mark_reg32_unbounded() najpierw ustawia r32 na pełny zakres; r32 jest
ponownie wyprowadzone z przesunięcia na końcu funkcji przez
reg_bounds_sync().
3. Na ścieżce nieuprzywilejowanej wywoływana jest funkcja sanitize_ptr_alu() i via
sanitize_speculative_path() -> push_stack(), tworzy migawki bieżącego
rejestru i planuje wykonanie następnej instrukcji (insn 15).
weryfikowana bezpośrednio jako ścieżka spekulacyjna.
4. Ta migawka jest wykonywana pomiędzy krokiem 2 a końcową funkcją reg_bounds_sync():
w tym momencie var_off dst_reg nadal przechowuje oryginał (const).
offset, podczas gdy r32 został właśnie wygaszony do pełnego zakresu, tj. dwóch
nie są zsynchronizowane. Kiedy ścieżka spekulacyjna później weryfikuje insn 15
(r9 = r0), niespójny stan osiąga reg_bounds_sanity_check() i
wyświetla ostrzeżenie.
var_off i zakres 32-bitowy muszą być zawsze spójne. Są dwa
sposoby na zachowanie spójności migawki:
1. zsynchronizuj var_off i r32 przed migawką, aby pasowały, lub
2. pozostaw r32 na oryginalnej (już spójnej) wartości i wyczyść go
dopiero po zrobieniu migawki.
Cały sens sanitize_ptr_alu() polega na wstawieniu nieszkodliwego maskowania
sekwencja, która utrzymuje dostęp w granicach spekulacji, a więc stan
migawki powinny to wiernie przedstawiać. Wybierz podejście 2: ruszaj się
__mark_reg32_unbounded() po sanitize_ptr_alu(), więc wartość spekulacyjna
snapshot zachowuje oryginalny, spójny r32 wskaźnika. Niespekulacyjny
ścieżka pozostaje niezmieniona: r32 jest nadal wygaszony przed zastosowaniem przesunięcia i
ponownie wyprowadzone przez reg_bounds_sync().
>_ Referencje
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