All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/3] drm: address potential UAF bugs with drm_master ptrs
@ 2021-06-29  3:37 ` Desmond Cheong Zhi Xi
  0 siblings, 0 replies; 43+ messages in thread
From: Desmond Cheong Zhi Xi @ 2021-06-29  3:37 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, tzimmermann, airlied, daniel,
	sumit.semwal, christian.koenig
  Cc: Desmond Cheong Zhi Xi, dri-devel, intel-gfx, linux-kernel,
	linux-media, linaro-mm-sig, skhan, gregkh, linux-kernel-mentees,
	emil.l.velikov

This patch series addresses potential use-after-free errors when dereferencing pointers to struct drm_master. These were identified after one such bug was caught by Syzbot in drm_getunique():
https://syzkaller.appspot.com/bug?id=148d2f1dfac64af52ffd27b661981a540724f803

The series is broken up into three patches:

1. Move a call to drm_is_current_master() out from a section locked by &dev->mode_config.mutex in drm_mode_getconnector(). This patch does not apply to stable.

2. Implement a locked version of drm_is_current_master() function that's used within drm_auth.c.

3. Identify areas in drm_lease.c where pointers to struct drm_master are dereferenced, and ensure that the master pointers are not freed during use.

Changes in v4 -> v5:
- Patch 1:
Add patch 1 to the series. The changes in patch 1 do not apply to stable because they apply to new changes in the drm-misc-next branch. This patch moves the call to drm_is_current_master in drm_mode_getconnector out from the section locked by &dev->mode_config.mutex.

Additionally, added a missing semicolon to the patch, caught by the intel-gfx CI.

- Patch 2:
Move changes to drm_connector.c into patch 1.

Changes in v3 -> v4:
- Patch 2:
Move the call to drm_is_current_master in drm_mode_getconnector out from the section locked by &dev->mode_config.mutex. As suggested by Daniel Vetter. This avoids a circular lock lock dependency as reported here https://patchwork.freedesktop.org/patch/440406/

Additionally, inside drm_is_current_master, instead of grabbing &fpriv->master->dev->master_mutex, we grab &fpriv->minor->dev->master_mutex to avoid dereferencing a null ptr if fpriv->master is not set.

- Patch 3:
Modify kerneldoc formatting.

Additionally, add a file_priv->master NULL check inside drm_file_get_master, and handle the NULL result accordingly in drm_lease.c. As suggested by Daniel Vetter.

Changes in v2 -> v3:
- Patch 2:
Move the definition of drm_is_current_master and the _locked version higher up in drm_auth.c to avoid needing a forward declaration of drm_is_current_master_locked. As suggested by Daniel Vetter.

- Patch 3:
Instead of leaking drm_device.master_mutex into drm_lease.c to protect drm_master pointers, add a new drm_file_get_master() function that returns drm_file->master while increasing its reference count, to prevent drm_file->master from being freed. As suggested by Daniel Vetter.

Changes in v1 -> v2:
- Patch 3:
Move the lock and assignment before the DRM_DEBUG_LEASE in drm_mode_get_lease_ioctl, as suggested by Emil Velikov.

Desmond Cheong Zhi Xi (3):
  drm: avoid circular locks in drm_mode_getconnector
  drm: add a locked version of drm_is_current_master
  drm: protect drm_master pointers in drm_lease.c

 drivers/gpu/drm/drm_auth.c      | 76 ++++++++++++++++++++++++--------
 drivers/gpu/drm/drm_connector.c |  5 ++-
 drivers/gpu/drm/drm_lease.c     | 77 ++++++++++++++++++++++++---------
 include/drm/drm_auth.h          |  1 +
 include/drm/drm_file.h          | 15 +++++--
 5 files changed, 131 insertions(+), 43 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 43+ messages in thread

end of thread, other threads:[~2021-06-30 17:38 UTC | newest]

Thread overview: 43+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-29  3:37 [PATCH v5 0/3] drm: address potential UAF bugs with drm_master ptrs Desmond Cheong Zhi Xi
2021-06-29  3:37 ` [Intel-gfx] " Desmond Cheong Zhi Xi
2021-06-29  3:37 ` Desmond Cheong Zhi Xi
2021-06-29  3:37 ` Desmond Cheong Zhi Xi
2021-06-29  3:37 ` [PATCH v5 1/3] drm: avoid circular locks in drm_mode_getconnector Desmond Cheong Zhi Xi
2021-06-29  3:37   ` [Intel-gfx] " Desmond Cheong Zhi Xi
2021-06-29  3:37   ` Desmond Cheong Zhi Xi
2021-06-29  3:37   ` Desmond Cheong Zhi Xi
2021-06-29  3:37 ` [PATCH v5 2/3] drm: add a locked version of drm_is_current_master Desmond Cheong Zhi Xi
2021-06-29  3:37   ` [Intel-gfx] " Desmond Cheong Zhi Xi
2021-06-29  3:37   ` Desmond Cheong Zhi Xi
2021-06-29  3:37   ` Desmond Cheong Zhi Xi
2021-06-29  3:37 ` [PATCH v5 3/3] drm: protect drm_master pointers in drm_lease.c Desmond Cheong Zhi Xi
2021-06-29  3:37   ` [Intel-gfx] " Desmond Cheong Zhi Xi
2021-06-29  3:37   ` Desmond Cheong Zhi Xi
2021-06-29  3:37   ` Desmond Cheong Zhi Xi
2021-06-29 16:07   ` Daniel Vetter
2021-06-29 16:07     ` [Intel-gfx] " Daniel Vetter
2021-06-29 16:07     ` Daniel Vetter
2021-06-29 16:07     ` Daniel Vetter
2021-06-30  7:18     ` Desmond Cheong Zhi Xi
2021-06-30  7:18       ` [Intel-gfx] " Desmond Cheong Zhi Xi
2021-06-30  7:18       ` Desmond Cheong Zhi Xi
2021-06-30  8:02       ` Daniel Vetter
2021-06-30  8:02         ` [Intel-gfx] " Daniel Vetter
2021-06-30  8:02         ` Daniel Vetter
2021-06-30  8:02         ` Daniel Vetter
2021-06-30 10:39         ` Desmond Cheong Zhi Xi
2021-06-30 10:39           ` [Intel-gfx] " Desmond Cheong Zhi Xi
2021-06-30 10:39           ` Desmond Cheong Zhi Xi
2021-06-30 10:39           ` Desmond Cheong Zhi Xi
2021-06-30  0:16   ` Emil Velikov
2021-06-30  0:16     ` [Intel-gfx] " Emil Velikov
2021-06-30  0:16     ` Emil Velikov
2021-06-30  0:16     ` Emil Velikov
2021-06-30  6:37     ` Desmond Cheong Zhi Xi
2021-06-30  6:37       ` [Intel-gfx] " Desmond Cheong Zhi Xi
2021-06-30  6:37       ` Desmond Cheong Zhi Xi
2021-06-30  6:37       ` Desmond Cheong Zhi Xi
2021-06-29 17:15 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm: address potential UAF bugs with drm_master ptrs (rev2) Patchwork
2021-06-29 17:30 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-06-29 22:38 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2021-06-30 17:38 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm: address potential UAF bugs with drm_master ptrs (rev3) Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.