CVE-2026-99092 in Linuxinformation

Résumé

par VulDB • 26/10/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

riscv : correctif du traitement des adresses execmem pour bpf-jit

Le commit 8718e5a3090b (« riscv: patch: skip fixmap mapping when kernel text is already writable ») a conditionné la branche `core_kernel_text()` de `patch_map()` à l'option CONFIG_STRICT_KERNEL_RWX, et a explicitement laissé inchangée la branche vmalloc. Cette dernière présente un problème distinct.

Cette branche ne crée une alias fixmap temporaire en écriture que lorsque CONFIG_STRICT_MODULE_RWX est activé ; dans le cas contraire, elle suppose que la cible est directement accessible en écriture et renvoie l'adresse telle quelle. Ce postulat n'est plus valide : `bpf_prog_pack_alloc` appelle inconditionnellement `set_memory_rox()` sur chaque pack lors de `alloc_new_pack()`, indépendamment des options CONFIG_STRICT_*_RWX ; par conséquent, le code BPF dans la zone vmalloc est en lecture seule (read-only), quel que soit le paramètre CONFIG_STRICT_MODULE_RWX.

Avec CONFIG_STRICT_MODULE_RWX=n, `patch_map()` renvoie directement l'adresse en lecture seule ; la copie ultérieure via `copy_to_kernel_nofault()` provoque une faute de page et retourne -EFAULT. `bpf_arch_text_copy()` transforme cela en -EINVAL, qui se propage à travers `bpf_jit_binary_pack_finalize()` jusqu'à l'appel WARN_ON() dans `bpf_int_jit_compile()`, laissant le programme non compilé JIT (un-JITed).

Notez que BPF ne peut pas être corrigé de la manière dont kprobes a été corrigé dans le commit bdc46e507b59 (« riscv: mm: make EXECMEM_KPROBES writable without CONFIG_STRICT_MODULE_RWX »). EXECMEM_BPF est déjà PAGE_KERNEL, c'est-à-dire accessible en écriture au moment de l'allocation ; la mappage en lecture seule est établi ultérieurement par le code générique dans `alloc_new_pack()`, ce que le code d'architecture ne peut pas influencer. Le seul endroit où cela peut être géré est `patch_map()`.

Il s'agit du même problème qui a été corrigé sur arm64 par le commit b1480ed230ac (« arm64: patching: fix handling of execmem addresses »), et la correction est identique : CONFIG_EXECMEM est ce qui détermine réellement si la zone vmalloc peut contenir de la mémoire exécutable nécessitant un alias temporaire pour être écrite. CONFIG_BPF_JIT, CONFIG_KPROBES et CONFIG_MODULES le sélectionnent tous.

Notez que cela n'est pas limité au cas où CONFIG_MODULES=n. Contrairement à arm64, riscv sélectionne CONFIG_ARCH_OPTIONAL_KERNEL_RWX ; ainsi, CONFIG_STRICT_MODULE_RWX peut être désactivé même avec CONFIG_MODULES=y, et la vulnérabilité est également accessible dans cette configuration.

La compilation sans CONFIG_MMU n'est pas affectée : elle dispose de ses propres implémentations de `__patch_insn_set()` et `__patch_insn_write()`, et n'appelle jamais `patch_map()`.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsable

Linux

Réserver

25/09/2026

Divulgation

26/10/2026

Modérer

accepté

Entrée

VDB-426478

EPSS

0.00000

KEV

non

Activités

très faible

Sources

Want to know what is going to be exploited?

We predict KEV entries!