[COMMITTED] libcpu: riscv_disasm use 50 char mnebuf

Message ID 20250603115539.759287-1-mark@klomp.org
State Committed
Headers
Series [COMMITTED] libcpu: riscv_disasm use 50 char mnebuf |

Commit Message

Mark Wielaard June 3, 2025, 11:55 a.m. UTC
  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 <mark@klomp.org>
---
 libcpu/riscv_disasm.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
  

Patch

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;