CVE-2026-99005 in Linuxinformazioni

Riassunto

di VulDB • 23/10/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

drm/i915/gt: Disattivare le interruzioni solo quando ACTIVE (Attivo) è true (vero).

Esiste una piccola finestra di race condition tra la lettura da parte di intel_rps_boost() di uno stato ACTIVE obsoleto e l'accodamento di rps->work, durante il quale lo stato ACTIVE potrebbe essere modificato tramite chiamate asincrone innescate dal rilascio del wakeref. Ciò significa che rps_work() potrebbe essere attivata dopo che la GT è stata parcheggiata (parked), quindi la disattivazione delle interruzioni RPS PM avverrebbe senza mantenere il lock di alimentazione (PM wakelock). Questa sequenza di eventi può essere osservata durante l'autotest live_rc6_ctx_wa():

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

ASYNC1) Callback di wakeref_put() -> __engine_park() -> intel_gt_pm_put_async() -> intel_gt_pm_put_async_untracked() -> intel_wakeref_put_async()

ASYNC2) Callback di wakeref_put_async() -> __gt_park() -> intel_rps_park() -> intel_rps_clear_active() [azzera ACTIVE]
CON INTERRUZIONI: -> rps_disable_interrupts() -> cancel_work_sync(rps->work) -> rps_reset_interrupts() [rps->pm_iir = 0]
SENZA INTERRUZIONI (modalità 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() [verifica ACTIVE]
[APERTURA FINESTRA DI RACE CONDITION]
-> queue_work(rps->work) -> retire_requests() -> i915_request_retire() -> intel_rps_dec_waiters() [da 1 a 0]

Se ASYNC1 e ASYNC2 dovessero essere eseguiti durante la [APERTURA FINESTRA DI RACE CONDITION], allora:

3) rps_work() viene eseguito dal workqueue e può soddisfare il test "(!pm_iir && !client_boost)" (nella modalità TIMER, rps->pm_iir è azzerato da una precedente chiamata a rps_work() o non riceve un nuovo valore dopo l'evento intel_rps_unpark()), quindi salta all'etichetta "out", bypassando il controllo di intel_rps_is_active() ed esegue gen6_gt_pm_unmask_irq();

4) La GT è parcheggiata e il runtime PM wakelock viene rilasciato, pertanto rimane solo un riferimento grezzo in __gt_park() -> intel_display_power_put_async() per 100ms, dopodiché la scrittura MMIO in gen6_gt_pm_unmask_irq() rileva l'assenza del wakelock tramite assert_rpm_wakelock_held() ed emette il messaggio "RPM wakelock ref not held during HW access" (riferimento al PM wakelock non mantenuto durante l'accesso all'hardware), che causa un tainting del kernel.

Il commit 3e7abf814193 ("drm/i915: Extract GT render power state management") ha rimosso il controllo "if (rps->interrupts_enabled)" che gen6_pm_rps_work() aveva intorno a questa disattivazione in i915_irq.c. INTEL_RPS_ACTIVE delimita la stessa finestra, poiché viene impostato in intel_rps_unpark() prima di rps_enable_interrupts() e rps_start_timer(), ed è azzerato in intel_rps_park() prima di rps_stop_timer() e rps_disable_interrupts().

Saltare la disattivazione quando RPS non è più attivo (il raggiungimento dell'operazione di unmasking è indipendente dalla modalità INTERRUPT). Ciò non impedisce al funzionamento del RPS di riprendere nel successivo unpark. Nella modalità interrupt, intel_rps_unpark() chiama rps_enable_interrupts(), che abilita e disattiva le interruzioni PM. Nella modalità timer, viene chiamata rps_start_timer(), riavviando la valutazione periodica dell'attività del motore. Il timer genera eventi software RPS ed accoda direttamente rps_work(), indipendentemente dalla consegna delle interruzioni PM. Nessuna delle due modalità richiede che il worker tardivo disattivi le interruzioni mentre la GT è parcheggiata

(cherry picked from commit ca4a6deadad15b91ee083afe445fa6bdbfb68206)

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsabile

Linux

Prenotare

25/09/2026

Divulgazione

23/10/2026

Moderazione

accettato

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Want to stay up to date on a daily basis?

Enable the mail alert feature now!