From 07bd923cea4b883ca2357e9fc80babcedd242b37 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 3 Jun 2025 01:50:07 +0200 Subject: [PATCH] libcpu: riscv_disasm use 50 char mnebuf 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 --- 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 823fe9ca0..0dee842aa 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.47.2