mesa: clear reserved parameter storage because it's stored in the shader cache
authorMarek Olšák <marek.olsak@amd.com>
Tue, 2 Mar 2021 06:07:10 +0000 (01:07 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 17 Mar 2021 22:43:01 +0000 (22:43 +0000)
The elements might not be initialized and we don't want random bytes
in the shader cache.

Discovered by valgrind.

Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9360>

src/mesa/program/prog_parameter.c

index 47c74ee..d78d9be 100644 (file)
@@ -220,6 +220,7 @@ _mesa_reserve_parameter_storage(struct gl_program_parameter_list *paramList,
    }
 
    if (needSizeValues > paramList->SizeValues) {
+      unsigned oldSize = paramList->SizeValues;
       paramList->SizeValues = needSizeValues + 16; /* alloc some extra */
 
       paramList->ParameterValues = (gl_constant_value *)
@@ -231,6 +232,9 @@ _mesa_reserve_parameter_storage(struct gl_program_parameter_list *paramList,
                         */
                        paramList->SizeValues * sizeof(gl_constant_value) +
                        12, 16);
+      /* The values are written to the shader cache, so clear them. */
+      memset(paramList->ParameterValues + oldSize, 0,
+             (paramList->SizeValues - oldSize) * sizeof(gl_constant_value));
    }
 }