CVE-2026-98919 in Linuxinformazioni

Riassunto

di VulDB • 24/10/2026

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

drm/xe: protezione di adjust_idledly() contro divisioni per zero e overflow

adjust_idledly() presenta diversi problemi legati a casi limite segnalati durante il review:

1. Se xe_gt_clock_init() non riesce a riconoscere l'orologio al quarzo, gt->info.timestamp_base è 0, il che rende anche idledly_units_ps pari a 0. La successiva DIV_ROUND_CLOSEST(..., idledly_units_ps) provoca quindi una divisione per zero e causa un panic del kernel.

2. Le conversioni da tick a nanosecondi vengono eseguite in u32: idledly * idledly_units_ps, (maxcnt - 1) * 1000 Entrambi i valori vanno in overflow su u32 prima che DIV_ROUND_CLOSEST() li elabori.

3. Se IDLE_WAIT_TIME restituisce 0, maxcnt viene valutato come 0 e il clamp di (maxcnt - 1) va in wrap-around a 0xFFFFFFFF in u32.

4. Il registro memorizza solo tick interi, quindi il valore ns clamped deve essere convertito in tick e nuovamente in nanosecondi. DIV_ROUND_CLOSEST() può arrotondare questa conversione verso l'alto oltre maxcnt:

maxcnt = 640 ns, un tick = 666664 ps

clamp: maxcnt - 1 = 639 ns da ns a tick: 639000 / 666664 = 0.958 -> arrotondato a 1 tick da tick a ns: 1 * 666664 / 1000 = 667 ns

Vengono programmati 667 ns in RING_IDLEDLY, ma poiché 667 >= maxcnt (640), xe_gt_WARN_ON() si attiva nuovamente ad ogni inizializzazione successiva.

Uscire anticipatamente se timestamp_base è 0 (il percorso per cristallo non riconosciuto). Eseguire le conversioni in u64 tramite i helper *_ULL() affinché non vadano in wrap-around. Applicare il clamp con un floor (DIV_ROUND_DOWN_ULL) in modo che il delay programmato rimanga strettamente inferiore a maxcnt, e proteggere il caso maxcnt == 0 impostando un delay zero pur scrivendo RING_IDLEDLY per chiarire INHIBIT_SWITCH_UNTIL_PREEMPTED.

v2: Rimossa l'avviso ridondante sul percorso timestamp_base == 0; xe_gt_clock_init() genera già un avviso in caso di orologio al quarzo non riconosciuto. Mantenuto il return anticipato per evitare la divisione per zero. - Vinay

v3: Mascheratura del campo (field-mask) della scrittura su RING_IDLEDLY con REG_FIELD_PREP(IDLE_DELAY, ...) invece di scrivere il conteggio grezzo dei tick, che avrebbe potuto sovrascrivere INHIBIT_SWITCH_UNTIL_PREEMPTED e i bit riservati. Separata la cancellazione dell'inhibit-switch dal clamp su maxcnt in modo che un bit inhibit impostato non forzino più una sovrascrittura inutile del delay quando il delay stesso è già valido. Utilizzato gt_to_xe(gt) invece di gt_to_xe(hwe->gt).

(cherry picked from commit d864065ea25e9d12897c175de9176ce46677e176)

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

Responsabile

Linux

Prenotare

25/09/2026

Divulgazione

23/10/2026

Moderazione

accettato

EPSS

0.00206

KEV

no

Attività

molto basso

Fonti

Might our Artificial Intelligence support you?

Check our Alexa App!