---
id: CVE-2026-68298
title: 'drm/xe/vm: Fix SVM leak on resv obj alloc failure in xe_vm_create()'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  drm/xe/vm: Fix SVM leak on resv obj alloc failure in xe_vm_create()

  Commit 9e9787414882 ("drm/xe/userptr: replace xe_hmm with gpusvm") made
  xe_svm_init() unconditional…
severity: high
cvss: 7.8
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'
cvssSource: cna
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 9e978741488261e117bb50e5dfcf8e4080990958 <
    279339aa8bdcf9db40094cf2bcbd495c53dbe817
  - >-
    Linux >= 9e978741488261e117bb50e5dfcf8e4080990958 <
    9ac92736030f3395d970c300eaeb59ac258a0c3e
  - >-
    Linux >= 9e978741488261e117bb50e5dfcf8e4080990958 <
    d2c6800ad1802bed72a6de1416536737f114f1d6
  - Linux 6.18
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: total
  timestamp: '2026-10-16T15:46:49.865015Z'
published: '2026-08-10'
updated: '2026-10-16'
sourceUpdated: '2026-10-16T15:53:07.080Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-68298'
references:
  - url: 'https://git.kernel.org/stable/c/279339aa8bdcf9db40094cf2bcbd495c53dbe817'
  - url: 'https://git.kernel.org/stable/c/9ac92736030f3395d970c300eaeb59ac258a0c3e'
  - url: 'https://git.kernel.org/stable/c/d2c6800ad1802bed72a6de1416536737f114f1d6'
tags:
  - cve.org
epss: 0.00127
epssPercentile: 0.0213
ingestedAt: '2026-10-16T17:24:46.860Z'
---

## Overview

In the Linux kernel, the following vulnerability has been resolved:

drm/xe/vm: Fix SVM leak on resv obj alloc failure in xe_vm_create()

Commit 9e9787414882 ("drm/xe/userptr: replace xe_hmm with gpusvm") made
xe_svm_init() unconditional in xe_vm_create() and extended it to also
initialize a "simple" gpusvm state for non-fault-mode VMs. The matching
xe_svm_fini() call in xe_vm_close_and_put() was updated to run
unconditionally, but the error unwind path in xe_vm_create() was not.

On the drm_gpuvm_resv_object_alloc() failure path, xe_svm_init() has
already succeeded but xe_svm_fini() is only called when
XE_VM_FLAG_FAULT_MODE is set. For non-fault-mode VMs this leaves
vm->svm.gpusvm partially initialized and leaks the resources allocated
by drm_gpusvm_init().

For fault-mode VMs, xe_svm_init() additionally acquires the pagemap
owner via drm_pagemap_acquire_owner() and the pagemaps via
xe_svm_get_pagemaps(). Those resources are released by xe_svm_close(),
not xe_svm_fini(). On the same error path, xe_svm_close() is not
called either, so fault-mode VMs leak the pagemap owner and pagemaps.

Fix both leaks:

- Call xe_svm_fini() unconditionally on the err_svm_fini path, matching
  the unconditional xe_svm_init() call. Move the vm->size = 0
  assignment out of the conditional so the xe_vm_is_closed() assert in
  xe_svm_fini() (and xe_svm_close()) holds for both modes.

- Call xe_svm_close() for fault-mode VMs before xe_svm_fini(), matching
  the ordering used in xe_vm_close_and_put().

(cherry picked from commit ca2a3587d577ba764e0fe628fb676244fc33ddd4)

## Affected

- `Linux >= 9e978741488261e117bb50e5dfcf8e4080990958 < 279339aa8bdcf9db40094cf2bcbd495c53dbe817`
- `Linux >= 9e978741488261e117bb50e5dfcf8e4080990958 < 9ac92736030f3395d970c300eaeb59ac258a0c3e`
- `Linux >= 9e978741488261e117bb50e5dfcf8e4080990958 < d2c6800ad1802bed72a6de1416536737f114f1d6`
- `Linux 6.18`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
