Some "illegal" instructions can be up to 24 chars (192 bits), We'll
print this as 0x<48 hex chars>. So make sure the mnebuf is 50 chars
(no terminating zero is needed).

This shows up with _FORTIFY_SOURCE which would immediate terminate on
such "illegal" instructions. Without we just use a few extra bytes on
the stack (which aren't used afterwards, without any issue, even
though it is technically UB).

        * libcpu/riscv_disasm.c (riscv_disasm): Extend char mnebuf
        array to 50.

Signed-off-by: Mark Wielaard <m...@klomp.org>
---
 libcpu/riscv_disasm.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libcpu/riscv_disasm.c b/libcpu/riscv_disasm.c
index 823fe9ca0561..0dee842aae53 100644
--- a/libcpu/riscv_disasm.c
+++ b/libcpu/riscv_disasm.c
@@ -164,7 +164,10 @@ riscv_disasm (Ebl *ebl,
        }
 
       char *mne = NULL;
-      char mnebuf[32];
+      /* Max length is 24, which is "illegal", so we print it as
+         "0x<48 hex chars>"
+         See: No instruction encodings defined for these sizes yet, below  */
+      char mnebuf[50];
       char *op[5] = { NULL, NULL, NULL, NULL, NULL };
       char immbuf[32];
       size_t len;
-- 
2.49.0

Reply via email to