[Mesa-dev] [PATCH] gallium/radeon: don't crash when getting out-of-bounds TEMP references

Marek Olšák maraeo at gmail.com
Sat Apr 11 12:11:13 PDT 2015


From: Marek Olšák <marek.olsak at amd.com>

---
 src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
index 1690194..333f7ae 100644
--- a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
+++ b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
@@ -191,6 +191,8 @@ emit_fetch(
 		break;
 
 	case TGSI_FILE_TEMPORARY:
+		if (reg->Register.Index >= ctx->temps_count)
+			return LLVMGetUndef(tgsi2llvmtype(bld_base, type));
 		if (uses_temp_indirect_addressing(bld_base)) {
 			ptr = lp_get_temp_ptr_soa(bld, reg->Register.Index, swizzle);
 			break;
@@ -395,6 +397,8 @@ emit_store(
 					break;
 
 				case TGSI_FILE_TEMPORARY:
+					if (range.First + i >= ctx->temps_count)
+						continue;
 					if (uses_temp_indirect_addressing(bld_base))
 						temp_ptr = lp_get_temp_ptr_soa(bld, i + range.First, chan_index);
 					else
@@ -416,6 +420,8 @@ emit_store(
 				break;
 
 			case TGSI_FILE_TEMPORARY:
+				if (reg->Register.Index >= ctx->temps_count)
+					continue;
 				if (uses_temp_indirect_addressing(bld_base)) {
 					temp_ptr = NULL;
 					break;
-- 
2.1.0



More information about the mesa-dev mailing list