Skip to content

Commit b93a387

Browse files
icklegregkh
authored andcommitted
drm/vgem: Replace opencoded version of drm_gem_dumb_map_offset()
[ Upstream commit 119c53d ] drm_gem_dumb_map_offset() now exists and does everything vgem_gem_dump_map does and *ought* to do. In particular, vgem_gem_dumb_map() was trying to reject mmapping an imported dmabuf by checking the existence of obj->filp. Unfortunately, we always allocated an obj->filp, even if unused for an imported dmabuf. Instead, the drm_gem_dumb_map_offset(), since commit 90378e5 ("drm/gem: drm_gem_dumb_map_offset(): reject dma-buf"), uses the obj->import_attach to reject such invalid mmaps. This prevents vgem from allowing userspace mmapping the dumb handle and attempting to incorrectly fault in remote pages belonging to another device, where there may not even be a struct page. v2: Use the default drm_gem_dumb_map_offset() callback Fixes: af33a91 ("drm/vgem: Enable dmabuf import interfaces") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: <stable@vger.kernel.org> # v4.13+ Link: https://patchwork.freedesktop.org/patch/msgid/20200708154911.21236-1-chris@chris-wilson.co.uk Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent d18b78a commit b93a387

1 file changed

Lines changed: 0 additions & 27 deletions

File tree

drivers/gpu/drm/vgem/vgem_drv.c

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -219,32 +219,6 @@ static int vgem_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
219219
return 0;
220220
}
221221

222-
static int vgem_gem_dumb_map(struct drm_file *file, struct drm_device *dev,
223-
uint32_t handle, uint64_t *offset)
224-
{
225-
struct drm_gem_object *obj;
226-
int ret;
227-
228-
obj = drm_gem_object_lookup(file, handle);
229-
if (!obj)
230-
return -ENOENT;
231-
232-
if (!obj->filp) {
233-
ret = -EINVAL;
234-
goto unref;
235-
}
236-
237-
ret = drm_gem_create_mmap_offset(obj);
238-
if (ret)
239-
goto unref;
240-
241-
*offset = drm_vma_node_offset_addr(&obj->vma_node);
242-
unref:
243-
drm_gem_object_put_unlocked(obj);
244-
245-
return ret;
246-
}
247-
248222
static struct drm_ioctl_desc vgem_ioctls[] = {
249223
DRM_IOCTL_DEF_DRV(VGEM_FENCE_ATTACH, vgem_fence_attach_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
250224
DRM_IOCTL_DEF_DRV(VGEM_FENCE_SIGNAL, vgem_fence_signal_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
@@ -438,7 +412,6 @@ static struct drm_driver vgem_driver = {
438412
.fops = &vgem_driver_fops,
439413

440414
.dumb_create = vgem_gem_dumb_create,
441-
.dumb_map_offset = vgem_gem_dumb_map,
442415

443416
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
444417
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,

0 commit comments

Comments
 (0)