aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hellstrom <thellstrom@vmware.com>2016-10-10 13:51:24 -0400
committerSinclair Yeh <syeh@vmware.com>2016-10-10 14:15:04 -0400
commit51ab70bed997f64f091a639dbe22b629725a7faf (patch)
tree4f71f2626a0b7f7f57e1b8ca3cbcc37cd434b541
parent728c3b53995f71e4b175d5939b8ba3211b6bc34d (diff)
drm/vmwgfx: Limit the user-space command buffer size
With older hardware versions, the user could specify arbitrarily large command buffer sizes, causing a vmalloc / vmap space exhaustion. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Sinclair Yeh <syeh@vmware.com> Signed-off-by: Sinclair Yeh <syeh@vmware.com> Cc: stable@vger.kernel.org
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
index ddd5e8a59723..d1f4a48dee0f 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
@@ -3891,14 +3891,14 @@ static void *vmw_execbuf_cmdbuf(struct vmw_private *dev_priv,
3891 int ret; 3891 int ret;
3892 3892
3893 *header = NULL; 3893 *header = NULL;
3894 if (!dev_priv->cman || kernel_commands)
3895 return kernel_commands;
3896
3897 if (command_size > SVGA_CB_MAX_SIZE) { 3894 if (command_size > SVGA_CB_MAX_SIZE) {
3898 DRM_ERROR("Command buffer is too large.\n"); 3895 DRM_ERROR("Command buffer is too large.\n");
3899 return ERR_PTR(-EINVAL); 3896 return ERR_PTR(-EINVAL);
3900 } 3897 }
3901 3898
3899 if (!dev_priv->cman || kernel_commands)
3900 return kernel_commands;
3901
3902 /* If possible, add a little space for fencing. */ 3902 /* If possible, add a little space for fencing. */
3903 cmdbuf_size = command_size + 512; 3903 cmdbuf_size = command_size + 512;
3904 cmdbuf_size = min_t(size_t, cmdbuf_size, SVGA_CB_MAX_SIZE); 3904 cmdbuf_size = min_t(size_t, cmdbuf_size, SVGA_CB_MAX_SIZE);