{"api_version":"1","generated_at":"2026-10-07T13:27:02+00:00","cve":"CVE-2026-98310","urls":{"html":"https://cve.report/CVE-2026-98310","api":"https://cve.report/api/cve/CVE-2026-98310.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-98310","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-98310"},"summary":{"title":"drm/xe/shrinker: Take a runtime PM ref before shrinking non-system memory","description":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/xe/shrinker: Take a runtime PM ref before shrinking non-system memory\n\n__xe_shrinker_walk() walks the SYSTEM and TT LRUs without a runtime PM\nreference.  Shrinking a bo outside system memory invalidates its GPU\nmappings, which needs the device resumed, so while it is runtime\nsuspended the page table zap trips an assert and the TLB invalidation\nreturns -ENODEV:\n\n  WARNING: drivers/gpu/drm/xe/xe_bo.c:770 at xe_bo_move_notify+0x1fc/0x450 [xe]\n   xe_bo_shrink+0x20f/0x2b0 [xe]\n   __xe_shrinker_walk+0x174/0x410 [xe]\n   xe_shrinker_scan+0x10c/0x1e0 [xe]\n   do_shrink_slab+0x176/0x7e0\n   drop_caches_sysctl_handler+0x9c/0xf0\n\nTake a reference before walking a memory type other than XE_PL_SYSTEM\nand stop there if it cannot be acquired.  Reuse the shrinker's existing\nacquire path, which resumes the device directly where reclaim allows\nthat and otherwise queues the PM worker for a later scan.  Stop the walk\nonce the scan target is met, so a satisfied scan does not wake the\ndevice.  System memory is still reclaimed while the device is suspended.\n\nGate this on xe_device_is_l2_flush_optimized(), the same condition under\nwhich xe_bo_trigger_rebind() issues the invalidation for a non-fault-mode\nvm, so reclaim is unaffected elsewhere.  The System CCS copy already has\nits own reference in xe_bo_shrink().\n\nOnly a non-fault-mode vm can reach this, since a fault-mode vm requires\nLR mode and that holds a runtime PM reference for the vm's lifetime.\n\nReproduced with igt@xe_madvise@dontneed-before-exec while the GPU is\nruntime suspended.\n\nv2: simplify needs_rpm check. (Matt)\n    retarget Fixes tag since the issue occurs with the non-fault-mode\n    path added by 4e7ebff69aed.\nv3: handle this in xe_shrinker.c instead of xe_bo.c (Thomas)\nv4: stop the walk once the scan target is met. (Sashiko)\nv5: rebase on the freed page accounting fix. (Sashiko)\nv6: reuse the shrinker acquire path so runtime pm can be resumed\n    directly instead of always queueing a worker. (Thomas)\nv7: replace xe_pm_runtime_put() with xe_shrinker_runtime_pm_put(). (Thomas)\n\n(cherry picked from commit 628f92b28bf4c371c10207daf6fc4caee0c0db2e)","state":"PUBLISHED","assigner":"Linux","published_at":"2026-10-06 09:18:22","updated_at":"2026-10-06 09:18:22"},"problem_types":[],"metrics":[],"references":[{"url":"https://git.kernel.org/stable/c/985862be16c7e4da808c51f393d631fb60c0be5c","name":"https://git.kernel.org/stable/c/985862be16c7e4da808c51f393d631fb60c0be5c","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/b7f4d2588b1342bb190c04b3d7a32560f206c74c","name":"https://git.kernel.org/stable/c/b7f4d2588b1342bb190c04b3d7a32560f206c74c","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-98310","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98310","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 4e7ebff69aed345f65f590a17b3119c0cb5eadde b7f4d2588b1342bb190c04b3d7a32560f206c74c git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 4e7ebff69aed345f65f590a17b3119c0cb5eadde 985862be16c7e4da808c51f393d631fb60c0be5c git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 7.1","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.1 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2.8 7.2.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.3-rc4 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"98310","cve":"CVE-2026-98310","epss":"0.001620000","percentile":"0.048450000","score_date":"2026-10-06","updated_at":"2026-10-07 00:14:55"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["drivers/gpu/drm/xe/xe_shrinker.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"b7f4d2588b1342bb190c04b3d7a32560f206c74c","status":"affected","version":"4e7ebff69aed345f65f590a17b3119c0cb5eadde","versionType":"git"},{"lessThan":"985862be16c7e4da808c51f393d631fb60c0be5c","status":"affected","version":"4e7ebff69aed345f65f590a17b3119c0cb5eadde","versionType":"git"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["drivers/gpu/drm/xe/xe_shrinker.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"7.1"},{"lessThan":"7.1","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"7.2.*","status":"unaffected","version":"7.2.8","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.3-rc4","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2.8","versionStartIncluding":"7.1","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.3-rc4","versionStartIncluding":"7.1","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/xe/shrinker: Take a runtime PM ref before shrinking non-system memory\n\n__xe_shrinker_walk() walks the SYSTEM and TT LRUs without a runtime PM\nreference.  Shrinking a bo outside system memory invalidates its GPU\nmappings, which needs the device resumed, so while it is runtime\nsuspended the page table zap trips an assert and the TLB invalidation\nreturns -ENODEV:\n\n  WARNING: drivers/gpu/drm/xe/xe_bo.c:770 at xe_bo_move_notify+0x1fc/0x450 [xe]\n   xe_bo_shrink+0x20f/0x2b0 [xe]\n   __xe_shrinker_walk+0x174/0x410 [xe]\n   xe_shrinker_scan+0x10c/0x1e0 [xe]\n   do_shrink_slab+0x176/0x7e0\n   drop_caches_sysctl_handler+0x9c/0xf0\n\nTake a reference before walking a memory type other than XE_PL_SYSTEM\nand stop there if it cannot be acquired.  Reuse the shrinker's existing\nacquire path, which resumes the device directly where reclaim allows\nthat and otherwise queues the PM worker for a later scan.  Stop the walk\nonce the scan target is met, so a satisfied scan does not wake the\ndevice.  System memory is still reclaimed while the device is suspended.\n\nGate this on xe_device_is_l2_flush_optimized(), the same condition under\nwhich xe_bo_trigger_rebind() issues the invalidation for a non-fault-mode\nvm, so reclaim is unaffected elsewhere.  The System CCS copy already has\nits own reference in xe_bo_shrink().\n\nOnly a non-fault-mode vm can reach this, since a fault-mode vm requires\nLR mode and that holds a runtime PM reference for the vm's lifetime.\n\nReproduced with igt@xe_madvise@dontneed-before-exec while the GPU is\nruntime suspended.\n\nv2: simplify needs_rpm check. (Matt)\n    retarget Fixes tag since the issue occurs with the non-fault-mode\n    path added by 4e7ebff69aed.\nv3: handle this in xe_shrinker.c instead of xe_bo.c (Thomas)\nv4: stop the walk once the scan target is met. (Sashiko)\nv5: rebase on the freed page accounting fix. (Sashiko)\nv6: reuse the shrinker acquire path so runtime pm can be resumed\n    directly instead of always queueing a worker. (Thomas)\nv7: replace xe_pm_runtime_put() with xe_shrinker_runtime_pm_put(). (Thomas)\n\n(cherry picked from commit 628f92b28bf4c371c10207daf6fc4caee0c0db2e)"}],"providerMetadata":{"dateUpdated":"2026-10-06T08:46:06.767Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/b7f4d2588b1342bb190c04b3d7a32560f206c74c"},{"url":"https://git.kernel.org/stable/c/985862be16c7e4da808c51f393d631fb60c0be5c"}],"title":"drm/xe/shrinker: Take a runtime PM ref before shrinking non-system memory","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-98310","datePublished":"2026-10-06T08:46:06.767Z","dateReserved":"2026-09-25T10:25:14.338Z","dateUpdated":"2026-10-06T08:46:06.767Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-10-06 09:18:22","lastModifiedDate":"2026-10-06 09:18:22","problem_types":[],"metrics":[],"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"98310","Ordinal":"1","Title":"drm/xe/shrinker: Take a runtime PM ref before shrinking non-syst","CVE":"CVE-2026-98310","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"98310","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/xe/shrinker: Take a runtime PM ref before shrinking non-system memory\n\n__xe_shrinker_walk() walks the SYSTEM and TT LRUs without a runtime PM\nreference.  Shrinking a bo outside system memory invalidates its GPU\nmappings, which needs the device resumed, so while it is runtime\nsuspended the page table zap trips an assert and the TLB invalidation\nreturns -ENODEV:\n\n  WARNING: drivers/gpu/drm/xe/xe_bo.c:770 at xe_bo_move_notify+0x1fc/0x450 [xe]\n   xe_bo_shrink+0x20f/0x2b0 [xe]\n   __xe_shrinker_walk+0x174/0x410 [xe]\n   xe_shrinker_scan+0x10c/0x1e0 [xe]\n   do_shrink_slab+0x176/0x7e0\n   drop_caches_sysctl_handler+0x9c/0xf0\n\nTake a reference before walking a memory type other than XE_PL_SYSTEM\nand stop there if it cannot be acquired.  Reuse the shrinker's existing\nacquire path, which resumes the device directly where reclaim allows\nthat and otherwise queues the PM worker for a later scan.  Stop the walk\nonce the scan target is met, so a satisfied scan does not wake the\ndevice.  System memory is still reclaimed while the device is suspended.\n\nGate this on xe_device_is_l2_flush_optimized(), the same condition under\nwhich xe_bo_trigger_rebind() issues the invalidation for a non-fault-mode\nvm, so reclaim is unaffected elsewhere.  The System CCS copy already has\nits own reference in xe_bo_shrink().\n\nOnly a non-fault-mode vm can reach this, since a fault-mode vm requires\nLR mode and that holds a runtime PM reference for the vm's lifetime.\n\nReproduced with igt@xe_madvise@dontneed-before-exec while the GPU is\nruntime suspended.\n\nv2: simplify needs_rpm check. (Matt)\n    retarget Fixes tag since the issue occurs with the non-fault-mode\n    path added by 4e7ebff69aed.\nv3: handle this in xe_shrinker.c instead of xe_bo.c (Thomas)\nv4: stop the walk once the scan target is met. (Sashiko)\nv5: rebase on the freed page accounting fix. (Sashiko)\nv6: reuse the shrinker acquire path so runtime pm can be resumed\n    directly instead of always queueing a worker. (Thomas)\nv7: replace xe_pm_runtime_put() with xe_shrinker_runtime_pm_put(). (Thomas)\n\n(cherry picked from commit 628f92b28bf4c371c10207daf6fc4caee0c0db2e)","Type":"Description","Title":"drm/xe/shrinker: Take a runtime PM ref before shrinking non-syst"}]}}}