aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Skripkin <paskripkin@gmail.com>2023-04-12 21:55:44 +0300
committerSimon Glass <sjg@chromium.org>2023-04-28 11:47:01 -0600
commit763f0a1f0d2b3ee0b3f7248dee874c3e65e93345 (patch)
tree8cb675399a2a603c012091a658b94c072bde5515
parentc383e85434f1f278a55134213cd1b7125185c429 (diff)
downloadu-boot-763f0a1f0d2b3ee0b3f7248dee874c3e65e93345.zip
u-boot-763f0a1f0d2b3ee0b3f7248dee874c3e65e93345.tar.gz
u-boot-763f0a1f0d2b3ee0b3f7248dee874c3e65e93345.tar.bz2
sandbox: disable tracing before unmapping RAM
Currently doing 'reset' command in sandbox with tracing enabled causes SIGSEV ``` Hit any key to stop autoboot: 0 => => => reset resetting ... Segmentation fault (core dumped) ``` Tracing callback uses RAM buffer for storing tracing reports, but state_uninit() function unmaps whole RAM, which causes SIGSEV on umapped memory inside tracing subsystem. Fix it by disabling tracing before unmapping memory Signed-off-by: Pavel Skripkin <paskripkin@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Add missing check for CONFIG_TRACE: Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--arch/sandbox/cpu/state.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c
index 69da378..d678349 100644
--- a/arch/sandbox/cpu/state.c
+++ b/arch/sandbox/cpu/state.c
@@ -10,6 +10,7 @@
#include <fdtdec.h>
#include <log.h>
#include <os.h>
+#include <trace.h>
#include <asm/malloc.h>
#include <asm/state.h>
#include <asm/test.h>
@@ -525,6 +526,10 @@ int state_uninit(void)
if (state->jumped_fname)
os_unlink(state->jumped_fname);
+ /* Disable tracing before unmapping RAM */
+ if (IS_ENABLED(CONFIG_TRACE))
+ trace_set_enabled(0);
+
os_free(state->state_fdt);
os_free(state->ram_buf);
memset(state, '\0', sizeof(*state));