• Daniel Vetter's avatar
    drm/vgem: Close use-after-free race in vgem_gem_create · 4b848f20
    Daniel Vetter authored
    There's two references floating around here (for the object reference,
    not the handle_count reference, that's a different thing):
    
    - The temporary reference held by vgem_gem_create, acquired by
      creating the object and released by calling
      drm_gem_object_put_unlocked.
    
    - The reference held by the object handle, created by
      drm_gem_handle_create. This one generally outlives the function,
      except if a 2nd thread races with a GEM_CLOSE ioctl call.
    
    So usually everything is correct, except in that race case, where the
    access to gem_object->size could be looking at freed data already.
    Which again isn't a real problem (userspace shot its feet off already
    with the race, we could return garbage), but maybe someone can exploit
    this as an information leak.
    
    Cc: Dan Carpenter <dan.carpenter@oracle.com>
    Cc: Hillf Danton <hdanton@sina.com>
    Reported-by: syzbot+0dc4444774d419e916c8@syzkaller.appspotmail.com
    Cc: stable@vger.kernel.org
    Cc: Emil Velikov <emil.velikov@collabora.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Sean Paul <seanpaul@chromium.org>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Eric Anholt <eric@anholt.net>
    Cc: Sam Ravnborg <sam@ravnborg.org>
    Cc: Rob Clark <robdclark@chromium.org>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200202132133.1891846-1-daniel.vetter@ffwll.ch
    4b848f20
vgem_drv.c 12.2 KB