OSDN Git Service

drm/qxl: qxl_release use after free
authorVasily Averin <vvs@virtuozzo.com>
Wed, 29 Apr 2020 09:01:24 +0000 (12:01 +0300)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 29 Apr 2020 11:21:34 +0000 (13:21 +0200)
commit933db73351d359f74b14f4af095808260aff11f9
tree1fe36df154fb79400c27cd3c02a22922348788dc
parent5b5703dbafae74adfbe298a56a81694172caf5e6
drm/qxl: qxl_release use after free

qxl_release should not be accesses after qxl_push_*_ring_release() calls:
userspace driver can process submitted command quickly, move qxl_release
into release_ring, generate interrupt and trigger garbage collector.

It can lead to crashes in qxl driver or trigger memory corruption
in some kmalloc-192 slab object

Gerd Hoffmann proposes to swap the qxl_release_fence_buffer_objects() +
qxl_push_{cursor,command}_ring_release() calls to close that race window.

cc: stable@vger.kernel.org
Fixes: f64122c1f6ad ("drm: add new QXL driver. (v1.4)")
Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
Link: http://patchwork.freedesktop.org/patch/msgid/fa17b338-66ae-f299-68fe-8d32419d9071@virtuozzo.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
drivers/gpu/drm/qxl/qxl_cmd.c
drivers/gpu/drm/qxl/qxl_display.c
drivers/gpu/drm/qxl/qxl_draw.c
drivers/gpu/drm/qxl/qxl_ioctl.c