CVE-2026-99092
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
riscv: patch: poprawiono obsługę adresów excmem bpf-jit
Zatwierdź 8718e5a3090b („riscv: patch: pomiń mapowanie fixmap, gdy tekst jądra
jest już zapisywalny”) bramkował gałąź core_kernel_text() funkcji patch_map()
na CONFIG_STRICT_KERNEL_RWX i jawnie opuścił gałąź vmalloc
niezmienione. Ta gałąź ma osobny problem.
Ta gałąź tworzy tymczasowy zapisywalny alias fixmap tylko wtedy, gdy
CONFIG_STRICT_MODULE_RWX jest włączony, w przeciwnym razie zakłada się, że cel jest
bezpośrednio do zapisu i zwraca adres bez zmian. To założenie nr
dłużej trzyma: bpf_prog_pack_alloc wywołuje set_memory_rox() na każdym pakiecie
bezwarunkowo w alloc_new_pack(), niezależnie od czegokolwiek
Opcja CONFIG_STRICT_*_RWX, dzięki czemu tekst BPF w obszarze vmalloc jest tylko do odczytu
niezależnie od tego, co mówi CONFIG_STRICT_MODULE_RWX.
Przy CONFIG_STRICT_MODULE_RWX=n, patch_map() zwraca
adres bezpośrednio, kolejna funkcja copy_to_kernel_nofault() pobiera a
błąd strony i zwraca -EFAULT. bpf_arch_text_copy() zamienia to w
-EINVAL, który propaguje poprzez bpf_jit_binary_pack_finalize() do
WARN_ON() w bpf_int_jit_compile() i pozostawia program bez JIT.
Należy pamiętać, że BPF nie można naprawić tak, jak było to w przypadku kprobes
zatwierdzić bdc46e507b59 („riscv: mm: uczyń EXECMEM_KPROBES zapisywalnym bez
CONFIG_STRICT_MODULE_RWX"). EXECMEM_BPF to już PAGE_KERNEL, tj.
zapisywalny w czasie alokacji; ustanawiane jest mapowanie tylko do odczytu
następnie przez kod ogólny w alloc_new_pack(), czego kod arch nie może
wpływ. Jedynym miejscem, w którym można to obsłużyć, jest patch_map().
Jest to ten sam problem, który został naprawiony na arm64 poprzez zatwierdzenie b1480ed230ac
(„arm64: łatanie: popraw obsługę adresów excmem”), a poprawką jest
to samo: CONFIG_EXECMEM faktycznie śledzi, czy plik vmalloc
obszar może przechowywać pamięć wykonywalną, która wymaga tymczasowego aliasu
napisane. CONFIG_BPF_JIT, CONFIG_KPROBES i CONFIG_MODULES – wszystkie wybrane
to.
Należy pamiętać, że nie jest to ograniczone do CONFIG_MODULES=n. W przeciwieństwie do arm64, riscv
wybiera CONFIG_ARCH_OPTIONAL_KERNEL_RWX, więc CONFIG_STRICT_MODULE_RWX może
można również wyłączyć za pomocą CONFIG_MODULES=y, a błąd będzie dostępny w
też ta konfiguracja.
Nie ma to wpływu na kompilację !CONFIG_MMU: ma ona własną funkcję __patch_insn_set()
i __patch_insn_write() i nigdy nie wywołuje patch_map().
>_ 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