CVE-2026-93259 in Linux
Résumé
par VulDB • 24/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
powerpc/irq : Correction de l'oubli du clobber (altération) du registre r2 dans les instructions assembly inline PCREL.
En mode CONFIG_PPC_KERNEL_PCREL, le registre r2 n'est plus réservé pour le pointeur TOC et est disponible en tant que registre caller-saved [0].
Les fonctions call_do_irq() et call_do_softirq() utilisent des instructions assembly inline pour appeler des fonctions avec commutation de pile (stack switching), mais omettent d'inclure r2 dans leurs listes clobber. Cela conduit le compilateur à supposer que r2 est préservé entre ces appels, ce qui entraîne une corruption du registre lorsque les fonctions appelées (__do_irq et __do_softirq) altèrent r2.
En conséquence, un crash du noyau se produit lors de la gestion des interruptions et le noyau échoue à démarrer :
BUG: Unable to handle kernel data access on write at 0xc000000404697638 Faulting instruction address: 0xc0000000000181ec Oops: Kernel access of bad area, sig: 11 [#1]
NIP [c0000000000181ec] __do_IRQ+0x6c/0xc0
Avec des versions plus anciennes de GCC, le compilateur allouait conservativement les registres callee-saved (comme r31) pour les valeurs s'étendant sur les appels de fonctions, évitant accidentellement ce bug :
<__do_IRQ>: 00 00 00 60 nop a6 02 08 7c mflr r0 f8 ff e1 fb std r31,-8(r1) f0 ff c1 fb std r30,-16(r1) 2d 03 10 06 pla r31,53297316
...
3d e8 ff 4b bl c0000000000165ac <__do_irq> 00 00 21 e8 ld r1,0(r1) 28 00 4d e9 ld r10,40(r13) 40 00 21 38 addi r1,r1,64 2a f9 aa 7f stdx r29,r10,r31
Avec GCC 14 plus récent, le compilateur utilise r2 pour de telles valeurs, exposant la spécification clobber manquante :
<__do_IRQ>: 00 00 00 60 nop a6 02 08 7c mflr r0 f0 ff c1 fb std r30,-16(r1) f8 ff e1 fb std r31,-8(r1) 29 02 10 06 pla r2,36252592 # c0000000022aadc0 <__irq_regs>
...
85 dc ff 4b bl c000000000015ee0 <__do_irq> 00 00 21 e8 ld r1,0(r1) 28 00 2d e9 ld r9,40(r13) 30 00 21 38 addi r1,r1,48 2a 11 c9 7f stdx r30,r9,r2
Corrigez ce problème en ajoutant r2 à la liste clobber pour call_do_irq() et call_do_softirq() lorsque CONFIG_PPC_KERNEL_PCREL est activé.
[0] : https://www.mail-archive.com/[email protected]/msg313226.html
VulDB is the best source for vulnerability data and more expert information about this specific topic.