From 3c8788dbb70b40e737d4b8e30cab81406e5c5091 Mon Sep 17 00:00:00 2001 From: Max Filippov <jcmvbkbc@gmail.com> Date: Wed, 2 Aug 2017 00:36:05 -0700 Subject: [PATCH] xtensa: fix memory corruption by broken sysregs In some xtensa configurations there may be system/user registers in xtensa-modules with negative index. ISA initialization for such config may clobber heap and result in program termination. Don't update lookup table entries for register with negative indices. They are not directly accessible via RSR/WSR/XSR or RUR/WUR, so this change should not affect processing of valid assembly/binary code. bfd/ 2017-08-02 Max Filippov <jcmvbkbc@gmail.com> * xtensa-isa.c (xtensa_isa_init): Don't update lookup table entries for sysregs with negative indices. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> --- Backported from: d84ed528d4817b0ff854006b65a9f6ec75f0407a bfd/xtensa-isa.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bfd/xtensa-isa.c b/bfd/xtensa-isa.c index 8da75bea8109..8c6ee88fdeae 100644 --- a/bfd/xtensa-isa.c +++ b/bfd/xtensa-isa.c @@ -292,7 +292,8 @@ xtensa_isa_init (xtensa_isa_status *errno_p, char **error_msg_p) xtensa_sysreg_internal *sreg = &isa->sysregs[n]; is_user = sreg->is_user; - isa->sysreg_table[is_user][sreg->number] = n; + if (sreg->number >= 0) + isa->sysreg_table[is_user][sreg->number] = n; } /* Set up the interface lookup table. */ -- 2.1.4