i965: Fix unsafe pointer when dumping VS/FS IR
authorIago Toral Quiroga <itoral@igalia.com>
Fri, 9 Oct 2015 05:57:19 +0000 (07:57 +0200)
committerIago Toral Quiroga <itoral@igalia.com>
Mon, 12 Oct 2015 06:30:57 +0000 (08:30 +0200)
For the VS and FS stages that use ARB_vertex_program or
ARB_fragment_program we don't have a shader program, however,
when debuging is enabled, we call brw_dump_ir like this:

brw_dump_ir("vertex", prog, &vs->base, &vp->program.Base);

where vs will be NULL (since prog is NULL).

As pointed out by Chris, this &vs->base is not really a dereference,
it simply computes a new address that just happens to be 0x0 because
the offset of base in brw_shader is 0. Then brw_dump_ir will see a
NULL pointer and not do anything. This is why this does not crash at
the moment. However, this does not look very safe (it would crash
for any location of base that is not the first in brw_shader), so
patch it to prevent a potential (even if unlikely) problem in the
future.

Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/brw_vs.c
src/mesa/drivers/dri/i965/brw_wm.c

index 0dc2bdccae8b6f5f05a8282ed17b5aab2ef5ca9b..de9a86775996a8b034b6216096f4dc80e0c2fc26 100644 (file)
@@ -205,7 +205,7 @@ brw_codegen_vs_prog(struct brw_context *brw,
    }
 
    if (unlikely(INTEL_DEBUG & DEBUG_VS))
-      brw_dump_ir("vertex", prog, &vs->base, &vp->program.Base);
+      brw_dump_ir("vertex", prog, vs ? &vs->base : NULL, &vp->program.Base);
 
    int st_index = -1;
    if (INTEL_DEBUG & DEBUG_SHADER_TIME)
index 4d5e7f67bd608b93478ee38875b1bb83b4cc7526..65de54335e81385553b7835797993b417c2ed67d 100644 (file)
@@ -222,7 +222,7 @@ brw_codegen_wm_prog(struct brw_context *brw,
    }
 
    if (unlikely(INTEL_DEBUG & DEBUG_WM))
-      brw_dump_ir("fragment", prog, &fs->base, &fp->program.Base);
+      brw_dump_ir("fragment", prog, fs ? &fs->base : NULL, &fp->program.Base);
 
    int st_index8 = -1, st_index16 = -1;
    if (INTEL_DEBUG & DEBUG_SHADER_TIME) {