drm: Fix possible race conditions while unplugging DRM device
authorOleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Tue, 22 May 2018 14:13:04 +0000 (17:13 +0300)
committerOleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Thu, 31 May 2018 07:36:28 +0000 (10:36 +0300)
commit069035c5db3459b9b5f12caf3bffed9a863fa5c4
treef32b505ef20d1e6dba33220a5681fd71b330344d
parentfbecef131676c1d18e8e6b42c04e10dc49725e96
drm: Fix possible race conditions while unplugging DRM device

When unplugging a hotpluggable DRM device we first unregister it
with drm_dev_unregister and then set drm_device.unplugged flag which
is used to mark device critical sections with drm_dev_enter()/
drm_dev_exit() preventing access to device resources that are not
available after the device is gone.
But drm_dev_unregister may lead to hotplug uevent(s) fired to
user-space on card and/or connector removal, thus making it possible
for user-space to try accessing a disconnected device.

Fix this by first making sure device is properly marked as
disconnected and only then unregister it.

Fixes: bee330f3d672 ("drm: Use srcu to protect drm_device.unplugged")

Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Reported-by: Andrii Chepurnyi <andrii_chepurnyi@epam.com>
Cc: "Noralf Trønnes" <noralf@tronnes.org>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20180522141304.18646-1-andr2000@gmail.com
drivers/gpu/drm/drm_drv.c