From 9bf0614116cdfdbfca9952c6547331731a462dcc Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Sun, 7 Oct 2018 17:43:57 -0400 Subject: nv50,nvc0: guard against zero-size blits The current state tracker can generate these sometimes. Fixing this is more involved, and due to some integer math we can generate divisions-by-zero. Signed-off-by: Ilia Mirkin Reviewed-by: Karol Herbst Cc: mesa-stable@lists.freedesktop.org --- src/gallium/drivers/nouveau/nv50/nv50_surface.c | 7 +++++++ src/gallium/drivers/nouveau/nvc0/nvc0_surface.c | 7 +++++++ 2 files changed, 14 insertions(+) (limited to 'src/gallium/drivers') diff --git a/src/gallium/drivers/nouveau/nv50/nv50_surface.c b/src/gallium/drivers/nouveau/nv50/nv50_surface.c index 1ef0f5030a5..de840eb531b 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_surface.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_surface.c @@ -1669,6 +1669,13 @@ nv50_blit(struct pipe_context *pipe, const struct pipe_blit_info *info) struct nouveau_pushbuf *push = nv50->base.pushbuf; bool eng3d = FALSE; + if (info->src.box.width == 0 || info->src.box.height == 0 || + info->dst.box.width == 0 || info->dst.box.height == 0) { + pipe_debug_message(&nv50->base.debug, ERROR, + "Blit with zero-size src or dst box"); + return; + } + if (util_format_is_depth_or_stencil(info->dst.resource->format)) { if (!(info->mask & PIPE_MASK_ZS)) return; diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c b/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c index 39b1369758a..120f9fe6ab9 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_surface.c @@ -1573,6 +1573,13 @@ nvc0_blit(struct pipe_context *pipe, const struct pipe_blit_info *info) struct nouveau_pushbuf *push = nvc0->base.pushbuf; bool eng3d = false; + if (info->src.box.width == 0 || info->src.box.height == 0 || + info->dst.box.width == 0 || info->dst.box.height == 0) { + pipe_debug_message(&nvc0->base.debug, ERROR, + "Blit with zero-size src or dst box"); + return; + } + if (util_format_is_depth_or_stencil(info->dst.resource->format)) { if (!(info->mask & PIPE_MASK_ZS)) return; -- cgit v1.2.3