]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
DEBUG: crash using an invalid opcode on aarch64 instead of an invalid access
authorWilly Tarreau <w@1wt.eu>
Tue, 25 Apr 2023 17:01:48 +0000 (19:01 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 25 Apr 2023 17:53:39 +0000 (19:53 +0200)
On aarch64 there's also a guaranted invalid instruction, called UDF, and
which even supports an optional 16-bit immediate operand:

   https://developer.arm.com/documentation/ddi0596/2021-12/Base-Instructions/UDF--Permanently-Undefined-?lang=en

It's conveniently encoded as 4 zeroes (when the operand is zero). It's
unclear when support for it was added into GAS, if at all; even a
not-so-old 2.27 doesn't know about it. Let's byte-encode it.

Tested on an A72 and works as expected.

include/haproxy/bug.h

index a07a6c3a3510e38dfd08e0d1cd022b55ec00eedb..6ce2066d59279d6b6fe48f85c3f10202f7563644 100644 (file)
                my_unreachable();                                       \
        } while (0)
 
+#elif defined(__aarch64__)
+#define ha_crash_now() do {                                            \
+               /* udf#imm16: 4 bytes (), raises illegal instruction */ \
+               __asm__ volatile(".byte 0x00,0x00,0x00,0x00\n");        \
+               my_unreachable();                                       \
+       } while (0)
+
 #else // not x86
 
 /* generic implementation, causes a segfault */