glsl/test: Fix use after free in test_optpass.
authorHanno Böck <hanno@hboeck.de>
Wed, 7 Nov 2018 08:01:42 +0000 (09:01 +0100)
committerTapani Pälli <tapani.palli@intel.com>
Mon, 12 Nov 2018 05:42:58 +0000 (07:42 +0200)
The variable state is free'd and afterwards state->error is used
as the return value, resulting in a use after free bug detected
by memory safety tools like address sanitizer.

Signed-off-by: Hanno Böck <hanno@hboeck.de>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108636
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
src/compiler/glsl/test_optpass.cpp

index 735129d91e982600a19a02db85f8b0c5b84aedeb..638ffeb2fe4904acb39471101b09e7307a8f625f 100644 (file)
@@ -166,6 +166,7 @@ int test_optpass(int argc, char **argv)
    int loop = 0;
    int shader_type = GL_VERTEX_SHADER;
    int quiet = 0;
+   int error;
 
    const struct option optpass_opts[] = {
       { "input-ir", no_argument, &input_format_ir, 1 },
@@ -264,9 +265,11 @@ int test_optpass(int argc, char **argv)
       printf("--\n");
    }
 
+   error = state->error;
+
    ralloc_free(state);
    ralloc_free(shader);
 
-   return state->error;
+   return error;
 }