Hi,
This commit in virglrenderer causes a regression in Android for me. The parameters that get passed in are last_level = 8, width = 1. I'm not really sure if this is valid (I'm guessing there should be some min width?), or where I should be looking to fix this. Any ideas?
commit ad4f0f1941677c6cd78bcd14348cd99ae7dd7527 Author: Marc-André Lureau marcandre.lureau@redhat.com Date: Tue Jan 19 14:37:50 2016 +0100
renderer: reject large LOD values
Or we could sit for a very long time in some further loops.
Fix found thanks to american fuzzy lop.
Signed-off-by: Marc-André Lureau marcandre.lureau@redhat.com
Thanks, Rob
Hi
----- Original Message -----
Hi,
This commit in virglrenderer causes a regression in Android for me. The parameters that get passed in are last_level = 8, width = 1. I'm not really sure if this is valid (I'm guessing there should be some min width?), or where I should be looking to fix this. Any ideas?
commit ad4f0f1941677c6cd78bcd14348cd99ae7dd7527 Author: Marc-André Lureau marcandre.lureau@redhat.com Date: Tue Jan 19 14:37:50 2016 +0100
renderer: reject large LOD values Or we could sit for a very long time in some further loops. Fix found thanks to american fuzzy lop. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
I don't know whether a texture of 1x1 with a LOD of 8 is valid. I remember that fix was related to invalid virgl command stream found by afl, that would be able to loop millions of iterations in some code, such as vrend_renderer_resource_create(). I wonder if you could trace it back to some client code. Also worth if there is a valid opengl reproducer, that could be a new piglit test.
Btw, there is a virglrenderer mailing list: virglrenderer-devel@lists.freedesktop.org
On Fri, Jul 29, 2016 at 3:57 PM, Rob Herring robh@kernel.org wrote:
Hi,
This commit in virglrenderer causes a regression in Android for me. The parameters that get passed in are last_level = 8, width = 1. I'm not really sure if this is valid (I'm guessing there should be some min width?), or where I should be looking to fix this. Any ideas?
what is the height? last mip-map level is basically the number of times you could half the width+height (round up to 1) until it is 1x1. So something like 1x512 would have last_level=8. (I might be off by one right-shift..)
Try this:
- if (args->last_level > (floor(log2(MAX2(args->width, args->width))) + 1)) + if (args->last_level > (floor(log2(MAX2(args->width, args->height))) + 1))
BR, -R
commit ad4f0f1941677c6cd78bcd14348cd99ae7dd7527 Author: Marc-André Lureau marcandre.lureau@redhat.com Date: Tue Jan 19 14:37:50 2016 +0100
renderer: reject large LOD values Or we could sit for a very long time in some further loops. Fix found thanks to american fuzzy lop. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Thanks, Rob _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi
----- Original Message -----
On Fri, Jul 29, 2016 at 3:57 PM, Rob Herring robh@kernel.org wrote:
Hi,
This commit in virglrenderer causes a regression in Android for me. The parameters that get passed in are last_level = 8, width = 1. I'm not really sure if this is valid (I'm guessing there should be some min width?), or where I should be looking to fix this. Any ideas?
what is the height? last mip-map level is basically the number of times you could half the width+height (round up to 1) until it is 1x1. So something like 1x512 would have last_level=8. (I might be off by one right-shift..)
Try this:
- if (args->last_level > (floor(log2(MAX2(args->width, args->width))) + 1))
- if (args->last_level > (floor(log2(MAX2(args->width, args->height))) + 1))
Oh, looks like what I wanted but I wouldn't see the typo even after re-reading...
please send a patch on the virgl mailing list.
On Mon, Aug 1, 2016 at 1:30 AM, Marc-André Lureau mlureau@redhat.com wrote:
Hi
----- Original Message -----
On Fri, Jul 29, 2016 at 3:57 PM, Rob Herring robh@kernel.org wrote:
Hi,
This commit in virglrenderer causes a regression in Android for me. The parameters that get passed in are last_level = 8, width = 1. I'm not really sure if this is valid (I'm guessing there should be some min width?), or where I should be looking to fix this. Any ideas?
what is the height? last mip-map level is basically the number of times you could half the width+height (round up to 1) until it is 1x1. So something like 1x512 would have last_level=8. (I might be off by one right-shift..)
Try this:
- if (args->last_level > (floor(log2(MAX2(args->width, args->width))) + 1))
- if (args->last_level > (floor(log2(MAX2(args->width, args->height))) + 1))
Oh, looks like what I wanted but I wouldn't see the typo even after re-reading...
please send a patch on the virgl mailing list.
tbh, I don't even have a virgl setup (psuedo-patch was just from looking at cgit).. so I'd be more than happy if someone else could actually test that change and send a patch.
BR, -R
dri-devel@lists.freedesktop.org