CVE-2024-35873 in Linuxinformation

Résumé

par VulDB • 06/08/2026

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

riscv : Correction de la restauration de l'état vectoriel dans rt_sigreturn()

La spécification RISC-V Vector indique dans « Appendice D : Convention d'appel pour l'État du Vecteur » [1] que « L'exécution d'un appel système rend tous les registres vecteurs sauvegardés par l'appelant (v0-v31, vl, vtype) et vstart non spécifiés. ». Dans le noyau RISC-V, cela est appelé « la suppression de l'état vectoriel » (discarding the vstate).

Le retour d'un gestionnaire de signal via l'appel système rt_sigreturn() entraîne également cette suppression. Cependant, il ne s'agit pas d'un problème car l'état du vecteur doit être restauré à partir du sigcontext, et la suppression de l'état vectoriel n'a donc pas lieu d'être prise en compte.

L'"état actif" (live state) correspond au registre vectoriel réel dans le contexte d'exécution actuel, tandis que "l'état vstate" est l'état vectoriel de la tâche. Un état actif « sale » signifie que l'état vstate et l'état actif ne sont pas synchronisés.

Lorsque user_from_copy() vectorisé a été introduit, un bug s'est glissé dans le code de restauration, en lien avec la suppression de l'état actif.

Un exemple illustrant ce dysfonctionnement :

1. Une application utilisateur exécute du code vectoriel 2. L'application reçoit un signal et entre dans son gestionnaire de signaux. 3. L'application revient du gestionnaire de signaux en utilisant l'appel système rt_sigreturn(). 4. L'état actif vectoriel est supprimé lors de l'entrée dans rt_sigreturn(), et l'état actif est marqué comme « sale », indiquant que l'état actif doit être synchronisé avec le vstate actuel. 5. rt_sigreturn() restaure le vstate, à l'exception des registres Vector, depuis le sigcontext. 6. rt_sigreturn() restaure les registres Vector depuis le sigcontext, et user_from_copy() vectorisé est désormais utilisé. L'état actif sale résultant de la suppression est sauvegardé dans le vstate, corrompant ainsi ce dernier. 7. rt_sigreturn() retourne à l'application, qui plante en raison du vstate corrompu.

Notez que user_from_copy() vectorisé est invoqué en fonction de la valeur de CONFIG_RISCV_ISA_V_UCOPY_THRESHOLD. La valeur par défaut est 768, ce qui signifie que vlen doit être supérieur à 128 bits pour que ce bug se produise.

La correction consiste simplement à marquer l'état actif comme non sale (propre) avant d'effectuer la restauration du vstate.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Réserver

17/05/2024

Divulgation

19/05/2024

Modérer

accepté

Entrée

VDB-265112

CPE

prêt

EPSS

0.00196

KEV

non

Activités

très faible

Sources

Want to stay up to date on a daily basis?

Enable the mail alert feature now!