CVE-2026-99092 in Linux
Zusammenfassung
von VulDB • 26.10.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
riscv: Patching: Korrektur der Behandlung von bpf-jit execmem-Adressen
Der Commit 8718e5a3090b („riscv: patch: skip fixmap mapping when kernel text is already writable“) hat den core_kernel_text()-Zweig von patch_map() an CONFIG_STRICT_KERNEL_RWX gekoppelt und den vmalloc-Zweig explizit unverändert gelassen. Dieser Zweig weist ein separates Problem auf.
Dieser Zweig erstellt nur dann eine temporär beschreibbare fixmap-Alias, wenn CONFIG_STRICT_MODULE_RWX aktiviert ist; andernfalls wird angenommen, dass das Ziel direkt beschreibbar ist und die Adresse unverändert zurückgegeben. Diese Annahme gilt nicht mehr: bpf_prog_pack_alloc ruft set_memory_rox() in alloc_new_pack() bedingungslos für jedes Pack auf, unabhängig von jeder CONFIG_STRICT_*_RWX-Option. Daher ist BPF-Code im vmalloc-Bereich stets schreibgeschützt, egal was CONFIG_STRICT_MODULE_RWX vorgibt.
Bei deaktiviertem CONFIG_STRICT_MODULE_RWX gibt patch_map() die schreibgeschützte Adresse direkt zurück; der nachfolgende Aufruf von copy_to_kernel_nofault() verursacht einen Seitenfehler und gibt -EFAULT zurück. bpf_arch_text_copy() wandelt dies in -EINVAL um, was sich durch bpf_jit_binary_pack_finalize() bis zum WARN_ON() in bpf_int_jit_compile() fortpflanzt und dazu führt, dass das Programm nicht JIT-kompiliert wird.
Beachten Sie, dass BPF nicht auf die gleiche Weise behoben werden kann wie kprobes im Commit bdc46e507b59 („riscv: mm: make EXECMEM_KPROBES writable without CONFIG_STRICT_MODULE_RWX“). EXECMEM_BPF ist bereits PAGE_KERNEL, also zum Zeitpunkt der Allokation beschreibbar; die schreibgeschützte Abbildung wird anschließend durch generischen Code in alloc_new_pack() erstellt, auf den arch-spezifischer Code keinen Einfluss hat. Die einzige Stelle, an der dies behandelt werden kann, ist patch_map().
Dies ist dasselbe Problem, das bei arm64 durch den Commit b1480ed230ac („arm64: patching: fix handling of execmem addresses“) behoben wurde, und die Korrektur ist identisch: CONFIG_EXECMEM ist der Parameter, der tatsächlich verfolgt, ob der vmalloc-Bereich ausführbaren Speicher enthalten kann, für den ein temporärer Alias zum Schreiben erforderlich ist. CONFIG_BPF_JIT, CONFIG_KPROBES und CONFIG_MODULES wählen alle diesen aus.
Beachten Sie, dass dies nicht auf Konfigurationen mit CONFIG_MODULES=n beschränkt ist. Im Gegensatz zu arm64 wählt riscv CONFIG_ARCH_OPTIONAL_KERNEL_RWX aus, sodass CONFIG_STRICT_MODULE_RWX auch bei aktiviertem CONFIG_MODULES deaktiviert werden kann; der Fehler ist in dieser Konfiguration ebenfalls erreichbar.
Der Build ohne CONFIG_MMU bleibt unbeeinflusst: Er verfügt über eigene Implementierungen von __patch_insn_set() und __patch_insn_write() und ruft patch_map() niemals auf.
If you want to get best quality of vulnerability data, you may have to visit VulDB.