]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/xe/vm: Clear the scratch_pt pointer on error
authorThomas Hellström <thomas.hellstrom@linux.intel.com>
Thu, 21 Aug 2025 14:30:45 +0000 (16:30 +0200)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 26 Aug 2025 14:12:11 +0000 (10:12 -0400)
Avoid triggering a dereference of an error pointer on cleanup in
xe_vm_free_scratch() by clearing any scratch_pt error pointer.

Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Fixes: 06951c2ee72d ("drm/xe: Use NULL PTEs as scratch PTEs")
Cc: Brian Welty <brian.welty@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: <stable@vger.kernel.org> # v6.8+
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://lore.kernel.org/r/20250821143045.106005-4-thomas.hellstrom@linux.intel.com
(cherry picked from commit 358ee50ab565f3c8ea32480e9d03127a81ba32f8)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_vm.c

index ec04bef8ae40880d416a1e07b38043cd173ffa0b..d60c4b1153043c4b3c35df4897e058e31d6a8f5a 100644 (file)
@@ -1610,8 +1610,12 @@ static int xe_vm_create_scratch(struct xe_device *xe, struct xe_tile *tile,
 
        for (i = MAX_HUGEPTE_LEVEL; i < vm->pt_root[id]->level; i++) {
                vm->scratch_pt[id][i] = xe_pt_create(vm, tile, i);
-               if (IS_ERR(vm->scratch_pt[id][i]))
-                       return PTR_ERR(vm->scratch_pt[id][i]);
+               if (IS_ERR(vm->scratch_pt[id][i])) {
+                       int err = PTR_ERR(vm->scratch_pt[id][i]);
+
+                       vm->scratch_pt[id][i] = NULL;
+                       return err;
+               }
 
                xe_pt_populate_empty(tile, vm, vm->scratch_pt[id][i]);
        }