Mesa (master): pan/midgard: Improve disassembler robustness

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Aug 14 22:50:09 UTC 2019


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

Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date:   Wed Aug 14 14:11:54 2019 -0700

pan/midgard: Improve disassembler robustness

Some memory corruption / etc issues let to an accidental "fuzzing" of
the disassembler ;) This uncovered some issues leading to a disassembler
hang, so let's fix that.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>

---

 src/panfrost/midgard/disassemble.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/panfrost/midgard/disassemble.c b/src/panfrost/midgard/disassemble.c
index 1092fcf7374..3e18c19593b 100644
--- a/src/panfrost/midgard/disassemble.c
+++ b/src/panfrost/midgard/disassemble.c
@@ -283,6 +283,7 @@ bits_for_mode(midgard_reg_mode mode)
         case midgard_reg_mode_64:
                 return 64;
         default:
+                unreachable("Invalid reg mode");
                 return 0;
         }
 }
@@ -410,6 +411,14 @@ print_mask_vec16(uint8_t mask, midgard_dest_override override)
 static void
 print_mask(uint8_t mask, unsigned bits, midgard_dest_override override)
 {
+        if (bits < 16) {
+                /* Shouldn't happen but with junk / out-of-spec shaders it
+                 * would cause an infinite loop */
+
+                printf("/* XXX: bits = %d */", bits);
+                return;
+        }
+
         if (bits == 8) {
                 print_mask_vec16(mask, override);
                 return;




More information about the mesa-commit mailing list