]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/xe/xe_pagefault: Disallow writes to read-only VMAs
authorJonathan Cavitt <jonathan.cavitt@intel.com>
Tue, 24 Mar 2026 15:29:37 +0000 (15:29 +0000)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Mon, 30 Mar 2026 12:51:29 +0000 (08:51 -0400)
The page fault handler should reject write/atomic access to read only
VMAs.  Add code to handle this in xe_pagefault_service after the VMA
lookup.

v2:
- Apply max line length (Matthew)

Fixes: fb544b844508 ("drm/xe: Implement xe_pagefault_queue_work")
Signed-off-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Suggested-by: Matthew Brost <matthew.brost@intel.com>
Cc: Shuicheng Lin <shuicheng.lin@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/20260324152935.72444-7-jonathan.cavitt@intel.com
(cherry picked from commit 714ee6754ac5fa3dc078856a196a6b124cd797a0)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_pagefault.c

index 6bee53d6ffc37465b79afc4ba2c6dcf2ab851029..922a4f3344b198ad05b9cfd759d1cd07f61a70c2 100644 (file)
@@ -187,6 +187,12 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
                goto unlock_vm;
        }
 
+       if (xe_vma_read_only(vma) &&
+           pf->consumer.access_type != XE_PAGEFAULT_ACCESS_TYPE_READ) {
+               err = -EPERM;
+               goto unlock_vm;
+       }
+
        atomic = xe_pagefault_access_is_atomic(pf->consumer.access_type);
 
        if (xe_vma_is_cpu_addr_mirror(vma))