{"schema":"threatline.record/2","record":{"id":"CVE-2026-99005","aliases":[],"summary":"drm/i915/gt: Unmask interrupts only when ACTIVE is true","details":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/i915/gt: Unmask interrupts only when ACTIVE is true\n\nThere is a small race window between intel_rps_boost() reading\na stale ACTIVE state and queuing rps->work, where ACTIVE may be\nchanged via asynchronous calls triggered by wakeref drop.\nThis means that rps_work() could be triggered after the GT has\nbeen parked, so unmasking RPS PM interrupts would happen without\nholding PM wakelock. This sequence of events may be observed\nduring live_rc6_ctx_wa() selftest:\n\n1) live_rc6_ctx_wa()\n   -> intel_engine_pm_put()\n      -> wakeref_put()\n\nASYNC1) wakeref_put() callback\n          -> __engine_park()\n             -> intel_gt_pm_put_async()\n                -> intel_gt_pm_put_async_untracked()\n                   -> intel_wakeref_put_async()\n\nASYNC2) wakeref_put_async() callback\n          -> __gt_park()\n             -> intel_rps_park()\n                -> intel_rps_clear_active() [clear ACTIVE]\n                WITH INTERRUPTS:\n                -> rps_disable_interrupts()\n                   -> cancel_work_sync(rps->work)\n                   -> rps_reset_interrupts() [rps->pm_iir = 0]\n                WITHOUT INTERRUPTS (TIMER mode):\n                -> rps_stop_timer()\n                   -> cancel_work_sync(rps->work)\n\n2) live_rc6_ctx_wa()\n   -> intel_gt_wait_for_idle()\n      -> intel_gt_retire_requests_timeout()\n         -> dma_fence_wait_timeout()\n            -> ops->wait() [i915_fence_wait()]\n               -> i915_request_wait_timeout()\n                  -> intel_rps_boost()\n                     -> intel_rps_is_active() [check ACTIVE]\n                        [OPEN RACE WINDOW]\n                     -> queue_work(rps->work)\n         -> retire_requests()\n            -> i915_request_retire()\n               -> intel_rps_dec_waiters() [from 1 to 0]\n\nIf ASYNC1 and ASYNC2 would execute during [OPEN RACE WINDOW],\nthen:\n\n3) rps_work() executes from the workqueue and may satisfy\n   \"(!pm_iir && !client_boost)\" test (in TIMER mode rps->pm_iir\n   is zeroed by an earlier rps_work() call or never gets a new\n   value after previous intel_rps_unpark() event), so it jumps\n   to \"out\" label, bypassing intel_rps_is_active() guard and\n   executes gen6_gt_pm_unmask_irq();\n\n4) GT is parked and runtime PM wakelock is dropped, so only\n   a raw reference in __gt_park() ->\n   intel_display_power_put_async() remains for 100ms, then the\n   MMIO write in gen6_gt_pm_unmask_irq() detects missing\n   wakelock via assert_rpm_wakelock_held() and emits\n   \"RPM wakelock ref not held during HW access\" tainting kernel.\n\nCommit 3e7abf814193 (\"drm/i915: Extract GT render power state management\")\ndropped the \"if (rps->interrupts_enabled)\" guard that\ngen6_pm_rps_work() had around this unmask in i915_irq.c.\nINTEL_RPS_ACTIVE brackets the same window, since it is set in\nintel_rps_unpark() before rps_enable_interrupts() and\nrps_start_timer() and cleared in intel_rps_park() before\nrps_stop_timer() and rps_disable_interrupts().\n\nSkip unmasking when RPS is no longer active (reaching unmask\noperation is independent of INTERRUPT mode). This does not\nprevent RPS operation from resuming on the next unpark.\nIn interrupt mode, intel_rps_unpark() calls\nrps_enable_interrupts(), which enables and unmasks the PM\ninterrupts. In timer mode, it calls rps_start_timer(),\nrestarting periodic engine-busyness evaluation. The timer\ngenerates software RPS events and queues rps_work() directly,\nindependently of PM interrupt delivery. Neither mode requires\nthe late worker to unmask interrupts while the GT is parked\n\n(cherry picked from commit ca4a6deadad15b91ee083afe445fa6bdbfb68206)","categories":["Operating systems"],"product":"Linux","vendor":"Linux","ecosystem":null,"affected_ranges":[{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-99005","source_modified_at":"2026-10-23T12:20:30.462Z","fetched_at":"2026-10-23T18:42:43.628194Z","product":"Linux","vendor":"Linux","versions":[{"lessThan":"77abc1837c9651c8f43f7f7f336d10093eeb7745","status":"affected","version":"3e7abf8141935ded77abeb622480bf4a14241ece","versionType":"git"},{"lessThan":"60f58da15f8c8e39706c564f9251de3626636dce","status":"affected","version":"3e7abf8141935ded77abeb622480bf4a14241ece","versionType":"git"},{"lessThan":"0b4a0fb98b9ffeac36798bbd369c821605cae70f","status":"affected","version":"3e7abf8141935ded77abeb622480bf4a14241ece","versionType":"git"},{"lessThan":"49d349c42cf5ebaa878d02699c632c9d883d935f","status":"affected","version":"3e7abf8141935ded77abeb622480bf4a14241ece","versionType":"git"},{"lessThan":"5346b1cec6afa4f9b4b49a9f84e3cfef95a3f7bb","status":"affected","version":"3e7abf8141935ded77abeb622480bf4a14241ece","versionType":"git"}],"defaultStatus":"unaffected"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-99005","source_modified_at":"2026-10-23T12:20:30.462Z","fetched_at":"2026-10-23T18:42:43.628194Z","product":"Linux","vendor":"Linux","versions":[{"status":"affected","version":"5.5"},{"lessThan":"5.5","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.6.*","status":"unaffected","version":"6.6.160","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.113","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.57","versionType":"semver"},{"lessThanOrEqual":"7.2.*","status":"unaffected","version":"7.2.11","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.3","versionType":"original_commit_for_fix"}],"defaultStatus":"affected"}],"fixed_versions":[{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-99005","source_modified_at":"2026-10-23T12:20:30.462Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"name":"Linux","ecosystem":null},"version":"77abc1837c9651c8f43f7f7f336d10093eeb7745","basis":"first unaffected version stated in the CVE record"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-99005","source_modified_at":"2026-10-23T12:20:30.462Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"name":"Linux","ecosystem":null},"version":"60f58da15f8c8e39706c564f9251de3626636dce","basis":"first unaffected version stated in the CVE record"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-99005","source_modified_at":"2026-10-23T12:20:30.462Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"name":"Linux","ecosystem":null},"version":"0b4a0fb98b9ffeac36798bbd369c821605cae70f","basis":"first unaffected version stated in the CVE record"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-99005","source_modified_at":"2026-10-23T12:20:30.462Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"name":"Linux","ecosystem":null},"version":"49d349c42cf5ebaa878d02699c632c9d883d935f","basis":"first unaffected version stated in the CVE record"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-99005","source_modified_at":"2026-10-23T12:20:30.462Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"name":"Linux","ecosystem":null},"version":"5346b1cec6afa4f9b4b49a9f84e3cfef95a3f7bb","basis":"first unaffected version stated in the CVE record"}],"cvss":null,"severity":null,"kev":{"listed":false},"epss":{"probability":0.00219,"percentile":0.11784,"score_date":"2026-10-24"},"published_at":"2026-10-23T12:20:30.462Z","modified_at":"2026-10-23T12:20:30.462Z","provenance":[{"source":"CVE List","url":"https://www.cve.org/CVERecord?id=CVE-2026-99005","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-23T12:20:30.462Z"},{"source":"EPSS","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-99005","fetched_at":"2026-10-24T18:03:20.872036Z","source_modified_at":"2026-10-24"}],"sources":["CVE List","EPSS"],"references":[{"source":"CVE List","url":"https://git.kernel.org/stable/c/77abc1837c9651c8f43f7f7f336d10093eeb7745"},{"source":"CVE List","url":"https://git.kernel.org/stable/c/60f58da15f8c8e39706c564f9251de3626636dce"},{"source":"CVE List","url":"https://git.kernel.org/stable/c/0b4a0fb98b9ffeac36798bbd369c821605cae70f"},{"source":"CVE List","url":"https://git.kernel.org/stable/c/49d349c42cf5ebaa878d02699c632c9d883d935f"},{"source":"CVE List","url":"https://git.kernel.org/stable/c/5346b1cec6afa4f9b4b49a9f84e3cfef95a3f7bb"}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"cve_state":"PUBLISHED","classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":"product","confidence":"heuristic","reviewed":false},"change_timestamp":"2026-10-23T12:20:30.462Z","content_hash":"255181264777ace559791b462b75cbeb3b7f37c529885660440183f8f6d0515c"}}
