Skip to content

Commit 2d35b65

Browse files
committed
drm/vmwgfx: Use the common gem mmap instead of the custom code
jira VULN-8161 cve CVE-2023-5633 commit-author Zack Rusin <zackr@vmware.com> commit 9da2957 Before vmwgfx supported gem it needed to implement the entire mmap logic explicitly. With GEM support that's not needed and the generic code can be used by simply setting the vm_ops to vmwgfx specific ones on the gem object itself. Removes a lot of code from vmwgfx without any functional difference. Signed-off-by: Zack Rusin <zackr@vmware.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Martin Krastev <krastevm@vmware.com> Reviewed-by: Maaz Mombasawala <mombasawalam@vmware.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230131033542.953249-2-zack@kde.org (cherry picked from commit 9da2957) Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
1 parent 14c388d commit 2d35b65

File tree

5 files changed

+10
-118
lines changed

5 files changed

+10
-118
lines changed

drivers/gpu/drm/vmwgfx/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
vmwgfx-y := vmwgfx_execbuf.o vmwgfx_gmr.o vmwgfx_kms.o vmwgfx_drv.o \
33
vmwgfx_ioctl.o vmwgfx_resource.o vmwgfx_ttm_buffer.o \
4-
vmwgfx_cmd.o vmwgfx_irq.o vmwgfx_ldu.o vmwgfx_ttm_glue.o \
4+
vmwgfx_cmd.o vmwgfx_irq.o vmwgfx_ldu.o \
55
vmwgfx_overlay.o vmwgfx_gmrid_manager.o vmwgfx_fence.o \
66
vmwgfx_bo.o vmwgfx_scrn.o vmwgfx_context.o \
77
vmwgfx_surface.o vmwgfx_prime.o vmwgfx_mob.o vmwgfx_shader.o \

drivers/gpu/drm/vmwgfx/vmwgfx_drv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1578,7 +1578,7 @@ static const struct file_operations vmwgfx_driver_fops = {
15781578
.open = drm_open,
15791579
.release = drm_release,
15801580
.unlocked_ioctl = vmw_unlocked_ioctl,
1581-
.mmap = vmw_mmap,
1581+
.mmap = drm_gem_mmap,
15821582
.poll = drm_poll,
15831583
.read = drm_read,
15841584
#if defined(CONFIG_COMPAT)

drivers/gpu/drm/vmwgfx/vmwgfx_drv.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,12 +1053,6 @@ vmw_is_cursor_bypass3_enabled(const struct vmw_private *dev_priv)
10531053
return (vmw_fifo_caps(dev_priv) & SVGA_FIFO_CAP_CURSOR_BYPASS_3) != 0;
10541054
}
10551055

1056-
/**
1057-
* TTM glue - vmwgfx_ttm_glue.c
1058-
*/
1059-
1060-
extern int vmw_mmap(struct file *filp, struct vm_area_struct *vma);
1061-
10621056
/**
10631057
* TTM buffer object driver - vmwgfx_ttm_buffer.c
10641058
*/

drivers/gpu/drm/vmwgfx/vmwgfx_gem.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,13 @@ static struct sg_table *vmw_gem_object_get_sg_table(struct drm_gem_object *obj)
103103
return drm_prime_pages_to_sg(obj->dev, vmw_tt->dma_ttm.pages, vmw_tt->dma_ttm.num_pages);
104104
}
105105

106+
static const struct vm_operations_struct vmw_vm_ops = {
107+
.pfn_mkwrite = vmw_bo_vm_mkwrite,
108+
.page_mkwrite = vmw_bo_vm_mkwrite,
109+
.fault = vmw_bo_vm_fault,
110+
.open = ttm_bo_vm_open,
111+
.close = ttm_bo_vm_close,
112+
};
106113

107114
static const struct drm_gem_object_funcs vmw_gem_object_funcs = {
108115
.free = vmw_gem_object_free,
@@ -115,6 +122,7 @@ static const struct drm_gem_object_funcs vmw_gem_object_funcs = {
115122
.vmap = drm_gem_ttm_vmap,
116123
.vunmap = drm_gem_ttm_vunmap,
117124
.mmap = drm_gem_ttm_mmap,
125+
.vm_ops = &vmw_vm_ops,
118126
};
119127

120128
/**

drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c

Lines changed: 0 additions & 110 deletions
This file was deleted.

0 commit comments

Comments
 (0)