Mesa (master): vc4: Don't forget to validate code that' s got PROG_END on it.

Eric Anholt anholt at kemper.freedesktop.org
Wed Oct 29 00:17:10 UTC 2014


Module: Mesa
Branch: master
Commit: 8911879dec564ab2ef343d58e6de4fd558e35c3d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8911879dec564ab2ef343d58e6de4fd558e35c3d

Author: Eric Anholt <eric at anholt.net>
Date:   Fri Oct 24 20:50:20 2014 +0100

vc4: Don't forget to validate code that's got PROG_END on it.

This signal doesn't terminate the program now, it terminates the program
soon.  So you have to actually validate the code in the instruction.

---

 src/gallium/drivers/vc4/kernel/vc4_validate_shaders.c |   11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/vc4/kernel/vc4_validate_shaders.c b/src/gallium/drivers/vc4/kernel/vc4_validate_shaders.c
index 56c4a17..fdce033 100644
--- a/src/gallium/drivers/vc4/kernel/vc4_validate_shaders.c
+++ b/src/gallium/drivers/vc4/kernel/vc4_validate_shaders.c
@@ -261,6 +261,7 @@ vc4_validate_shader(struct drm_gem_cma_object *shader_obj,
 		case QPU_SIG_COLOR_LOAD:
 		case QPU_SIG_LOAD_TMU0:
 		case QPU_SIG_LOAD_TMU1:
+		case QPU_SIG_PROG_END:
 			if (!check_instruction_writes(inst, validated_shader,
 						      &validation_state)) {
 				DRM_ERROR("Bad write at ip %d\n", ip);
@@ -270,6 +271,11 @@ vc4_validate_shader(struct drm_gem_cma_object *shader_obj,
 			if (!check_instruction_reads(inst, validated_shader))
 				goto fail;
 
+			if (sig == QPU_SIG_PROG_END) {
+				found_shader_end = true;
+				shader_end_ip = ip;
+			}
+
 			break;
 
 		case QPU_SIG_LOAD_IMM:
@@ -280,11 +286,6 @@ vc4_validate_shader(struct drm_gem_cma_object *shader_obj,
 			}
 			break;
 
-		case QPU_SIG_PROG_END:
-			found_shader_end = true;
-			shader_end_ip = ip;
-			break;
-
 		default:
 			DRM_ERROR("Unsupported QPU signal %d at "
 				  "instruction %d\n", sig, ip);




More information about the mesa-commit mailing list