[PATCH] drm/vc4: Use managed KMS polling to fix UAF on unbind

Karl Mehltretter posted 1 patch 1 month ago
drivers/gpu/drm/vc4/vc4_kms.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] drm/vc4: Use managed KMS polling to fix UAF on unbind
Posted by Karl Mehltretter 1 month ago
vc4_kms_load() calls drm_kms_helper_poll_init() but the driver provides
no matching drm_kms_helper_poll_fini(). The output poll work stays
scheduled after unbind and runs on the freed drm_device:

  # modprobe vc4; rmmod vc4; sleep 10
  BUG: KASAN: slab-use-after-free in delayed_work_timer_fn
  BUG: KASAN: slab-use-after-free in drm_client_dev_hotplug [drm]
  Workqueue: events output_poll_execute [drm_kms_helper]
  Allocated by task 171: __devm_drm_dev_alloc
  Freed by task 262 (rmmod): drm_dev_put / component_del

Use drmm_kms_helper_poll_init() so polling is finalized with the device,
as other drivers do.

Fixes: c8b75bca92cb ("drm/vc4: Add KMS support for Raspberry Pi.")
Assisted-by: Claude:claude-fable-5
Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
---
Tested on a Raspberry Pi 400 (BCM2711), v7.2-11658-g26260251022f, with
KASAN: report gone, rmmod/insmod loop clean.

 drivers/gpu/drm/vc4/vc4_kms.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
index b17e73bce384..82a7f2ac4c7e 100644
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -1188,7 +1188,7 @@ int vc4_kms_load(struct drm_device *dev)
 
 	drm_mode_config_reset(dev);
 
-	drm_kms_helper_poll_init(dev);
+	drmm_kms_helper_poll_init(dev);
 
 	return 0;
 }
-- 
2.39.5 (Apple Git-154)
Re: [PATCH] drm/vc4: Use managed KMS polling to fix UAF on unbind
Posted by Maíra Canal 1 week, 6 days ago
On Sat, 22 Aug 2026 16:31:10 +0200, Karl Mehltretter wrote:
> vc4_kms_load() calls drm_kms_helper_poll_init() but the driver provides
> no matching drm_kms_helper_poll_fini(). The output poll work stays
> scheduled after unbind and runs on the freed drm_device:
> 
>   # modprobe vc4; rmmod vc4; sleep 10
>   BUG: KASAN: slab-use-after-free in delayed_work_timer_fn
>   BUG: KASAN: slab-use-after-free in drm_client_dev_hotplug [drm]
>   Workqueue: events output_poll_execute [drm_kms_helper]
>   Allocated by task 171: __devm_drm_dev_alloc
>   Freed by task 262 (rmmod): drm_dev_put / component_del
> 
> [...]

Applied, thanks!

[1/1] drm/vc4: Use managed KMS polling to fix UAF on unbind
      commit: 073a30d75f309812ed61af134f24ffef4107b13a

Best regards,
- Maíra