]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/xe/bo: Fix bo leak on GGTT flag validation in xe_bo_init_locked()
authorShuicheng Lin <shuicheng.lin@intel.com>
Wed, 8 Apr 2026 17:52:53 +0000 (17:52 +0000)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Wed, 29 Apr 2026 16:51:20 +0000 (12:51 -0400)
When XE_BO_FLAG_GGTT_ALL is set without XE_BO_FLAG_GGTT, the function
returns an error without freeing a caller-provided bo, violating the
documented contract that bo is freed on failure.

Add xe_bo_free(bo) before returning the error.

Fixes: 5a3b0df25d6a ("drm/xe: Allow bo mapping on multiple ggtts")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-4.6
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/20260408175255.3402838-3-shuicheng.lin@intel.com
Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
(cherry picked from commit 3fbd6cf43cac7b60757f3ce3d95195d3843a902c)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_bo.c

index c5e9befc6ba385739cdebfa9e44546ae449cb07b..4075edf974216c96d182125e366b6a090c9e26ec 100644 (file)
@@ -2322,8 +2322,10 @@ struct xe_bo *xe_bo_init_locked(struct xe_device *xe, struct xe_bo *bo,
        }
 
        /* XE_BO_FLAG_GGTTx requires XE_BO_FLAG_GGTT also be set */
-       if ((flags & XE_BO_FLAG_GGTT_ALL) && !(flags & XE_BO_FLAG_GGTT))
+       if ((flags & XE_BO_FLAG_GGTT_ALL) && !(flags & XE_BO_FLAG_GGTT)) {
+               xe_bo_free(bo);
                return ERR_PTR(-EINVAL);
+       }
 
        if (flags & (XE_BO_FLAG_VRAM_MASK | XE_BO_FLAG_STOLEN) &&
            !(flags & XE_BO_FLAG_IGNORE_MIN_PAGE_SIZE) &&