[PATCH] drm/xe: Drop slab for hw fences
Matthew Brost
matthew.brost at intel.com
Thu Apr 24 18:40:27 UTC 2025
Fences can outlive the Xe module so drop slab allocations for hw fences
to prevent potential UAF.
Suggested-by: Christian König <christian.koenig at amd.com>
Signed-off-by: Matthew Brost <matthew.brost at intel.com>
---
drivers/gpu/drm/xe/xe_hw_fence.c | 24 ++----------------------
drivers/gpu/drm/xe/xe_hw_fence.h | 3 ---
drivers/gpu/drm/xe/xe_module.c | 4 ----
3 files changed, 2 insertions(+), 29 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_hw_fence.c b/drivers/gpu/drm/xe/xe_hw_fence.c
index 0b4f12be3692..7e66fc97f05b 100644
--- a/drivers/gpu/drm/xe/xe_hw_fence.c
+++ b/drivers/gpu/drm/xe/xe_hw_fence.c
@@ -16,28 +16,9 @@
#include "xe_map.h"
#include "xe_trace.h"
-static struct kmem_cache *xe_hw_fence_slab;
-
-int __init xe_hw_fence_module_init(void)
-{
- xe_hw_fence_slab = kmem_cache_create("xe_hw_fence",
- sizeof(struct xe_hw_fence), 0,
- SLAB_HWCACHE_ALIGN, NULL);
- if (!xe_hw_fence_slab)
- return -ENOMEM;
-
- return 0;
-}
-
-void xe_hw_fence_module_exit(void)
-{
- rcu_barrier();
- kmem_cache_destroy(xe_hw_fence_slab);
-}
-
static struct xe_hw_fence *fence_alloc(void)
{
- return kmem_cache_zalloc(xe_hw_fence_slab, GFP_KERNEL);
+ return kvzalloc(sizeof(struct xe_hw_fence), GFP_KERNEL);
}
static void fence_free(struct rcu_head *rcu)
@@ -45,8 +26,7 @@ static void fence_free(struct rcu_head *rcu)
struct xe_hw_fence *fence =
container_of(rcu, struct xe_hw_fence, dma.rcu);
- if (!WARN_ON_ONCE(!fence))
- kmem_cache_free(xe_hw_fence_slab, fence);
+ kvfree(fence);
}
static void hw_fence_irq_run_cb(struct irq_work *work)
diff --git a/drivers/gpu/drm/xe/xe_hw_fence.h b/drivers/gpu/drm/xe/xe_hw_fence.h
index f13a1c4982c7..96f34332fd8d 100644
--- a/drivers/gpu/drm/xe/xe_hw_fence.h
+++ b/drivers/gpu/drm/xe/xe_hw_fence.h
@@ -11,9 +11,6 @@
/* Cause an early wrap to catch wrapping errors */
#define XE_FENCE_INITIAL_SEQNO (-127)
-int xe_hw_fence_module_init(void);
-void xe_hw_fence_module_exit(void);
-
void xe_hw_fence_irq_init(struct xe_hw_fence_irq *irq);
void xe_hw_fence_irq_finish(struct xe_hw_fence_irq *irq);
void xe_hw_fence_irq_run(struct xe_hw_fence_irq *irq);
diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
index 05c7d0ae6d83..0c440c57e02a 100644
--- a/drivers/gpu/drm/xe/xe_module.c
+++ b/drivers/gpu/drm/xe/xe_module.c
@@ -96,10 +96,6 @@ static const struct init_funcs init_funcs[] = {
.init = xe_configfs_init,
.exit = xe_configfs_exit,
},
- {
- .init = xe_hw_fence_module_init,
- .exit = xe_hw_fence_module_exit,
- },
{
.init = xe_sched_job_module_init,
.exit = xe_sched_job_module_exit,
--
2.34.1
More information about the Intel-xe
mailing list