drm/i915: Fix a potential UAF at device unload
authorNirmoy Das <nirmoy.das@intel.com>
Fri, 23 Sep 2022 07:35:14 +0000 (09:35 +0200)
committerAndi Shyti <andi.shyti@linux.intel.com>
Thu, 29 Sep 2022 11:29:38 +0000 (13:29 +0200)
i915_gem_drain_freed_objects() might not be enough to
free all the objects and RCU delayed work might get
scheduled after the i915 device struct gets freed.

Call i915_gem_drain_workqueue() to catch all RCU delayed work.

Suggested-by: Chris Wilson <chris.p.wilson@intel.com>
Acked-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com>
Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220923073515.23093-1-nirmoy.das@intel.com
drivers/gpu/drm/i915/i915_gem.c

index 4539431a3c3e6ba794bb4cb7b2710491cccfb211..366169e5be7379cf39a58912939d084fc0035164 100644 (file)
@@ -1242,7 +1242,7 @@ void i915_gem_init_early(struct drm_i915_private *dev_priv)
 
 void i915_gem_cleanup_early(struct drm_i915_private *dev_priv)
 {
-       i915_gem_drain_freed_objects(dev_priv);
+       i915_gem_drain_workqueue(dev_priv);
        GEM_BUG_ON(!llist_empty(&dev_priv->mm.free_list));
        GEM_BUG_ON(atomic_read(&dev_priv->mm.free_count));
        drm_WARN_ON(&dev_priv->drm, dev_priv->mm.shrink_count);