CVE-2026-99005 in Linuxinformation

Résumé

par VulDB • 24/10/2026

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

drm/i915/gt : Ne pas démasquer les interruptions que lorsque ACTIVE est vrai.

Il existe une petite fenêtre de condition de course (race window) entre `intel_rps_boost()` qui lit un état `ACTIVE` périmé et la mise en file d'attente de `rps->work`, où `ACTIVE` peut être modifié via des appels asynchrones déclenchés par le relâchement du wakeref. Cela signifie que `rps_work()` pourrait être déclenché après que le GT a été mis en pause (parked), si bien que le démasquage des interruptions RPS PM se produirait sans détention du verrou de réveil PM (PM wakelock). Cette séquence d'événements peut être observée lors du test unitaire `live_rc6_ctx_wa()` :

1) live_rc6_ctx_wa() -> intel_engine_pm_put() -> wakeref_put()

ASYNC1) rappel de callback wakeref_put() -> __engine_park() -> intel_gt_pm_put_async() -> intel_gt_pm_put_async_untracked() -> intel_wakeref_put_async()

ASYNC2) rappel de callback wakeref_put_async() -> __gt_park() -> intel_rps_park() -> intel_rps_clear_active() [efface ACTIVE]
AVEC INTERRUPTIONS : -> rps_disable_interrupts() -> cancel_work_sync(rps->work) -> rps_reset_interrupts() [rps->pm_iir = 0]
SANS INTERRUPTIONS (mode TIMER) : -> rps_stop_timer() -> cancel_work_sync(rps->work)

2) live_rc6_ctx_wa() -> intel_gt_wait_for_idle() -> intel_gt_retire_requests_timeout() -> dma_fence_wait_timeout() -> ops->wait() [i915_fence_wait()]
-> i915_request_wait_timeout() -> intel_rps_boost() -> intel_rps_is_active() [vérifie ACTIVE]
[OUVERTURE DE LA FENÊTRE DE CONDITION DE COURSE (RACE WINDOW)]
-> queue_work(rps->work) -> retire_requests() -> i915_request_retire() -> intel_rps_dec_waiters() [de 1 à 0]

Si ASYNC1 et ASYNC2 s'exécutent pendant la [FENÊTRE DE CONDITION DE COURSE OUVERTE], alors :

3) rps_work() s'exécute depuis le workqueue et peut satisfaire le test "(!pm_iir && !client_boost)" (en mode TIMER, rps->pm_iir est remis à zéro par un appel précédent de rps_work() ou ne reçoit pas de nouvelle valeur après l'événement intel_rps_unpark()), donc il saute vers la étiquette "out", contournant le garde-fou `intel_rps_is_active()` et exécute `gen6_gt_pm_unmask_irq();` ;

4) Le GT est mis en pause (parked) et le verrou de réveil PM runtime est relâché, si bien qu'il ne reste qu'une référence brute dans __gt_park() -> intel_display_power_put_async() pendant 100 ms, puis l'écriture MMIO dans gen6_gt_pm_unmask_irq() détecte l'absence du wakelock via assert_rpm_wakelock_held() et émet le message de taint noyau "RPM wakelock ref not held during HW access".

Le commit 3e7abf814193 ("drm/i915: Extract GT render power state management") a supprimé le garde-fou `if (rps->interrupts_enabled)` que gen6_pm_rps_work() avait autour de ce démasquage dans i915_irq.c. INTEL_RPS_ACTIVE encadre la même fenêtre, car il est défini dans intel_rps_unpark() avant rps_enable_interrupts() et rps_start_timer(), et effacé dans intel_rps_park() avant rps_stop_timer() et rps_disable_interrupts().

Ignorer le démasquage lorsque RPS n'est plus actif (atteindre l'opération de démasquage est indépendant du mode INTERRUPTION). Cela n'empêche pas la reprise de l'opération RPS lors du prochain unpark. En mode interruption, intel_rps_unpark() appelle rps_enable_interrupts(), qui active et masque les interruptions PM. En mode timer, il appelle rps_start_timer(), redémarrant l'évaluation périodique de l'occupation des moteurs (engine-busyness). Le timer génère des événements RPS logiciels et met directement en file d'attente rps_work(), indépendamment de la livraison des interruptions PM. Aucun des deux modes ne nécessite que le worker tardif démasque les interruptions pendant que le GT est mis en pause.

(cherry picked from commit ca4a6deadad15b91ee083afe445fa6bdbfb68206)

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

Responsable

Linux

Réserver

25/09/2026

Divulgation

23/10/2026

Modérer

accepté

Entrée

VDB-425836

EPSS

0.00000

KEV

non

Activités

très faible

Sources

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!