[PATCH 1/1] sandbox: unblock signal before calling execv()
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Fri Sep 2 02:32:25 CEST 2022
The following faulty behavior was observed. The sandbox configured with
CONFIG_SANDBOX_CRASH_RESET=y was invoked with
./u-boot -T -S
After executing `exception undefined' the sandbox reboots.
When executing `exception undefined' the sandbox exits with SIGSEGV.
The expected behavior is that the sandbox should reboot again.
If we are relaunching the sandbox in a signal handler, we have to unblock
the respective signal before calling execv(). See signal(7) man-page.
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
---
arch/sandbox/cpu/os.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c
index f937991139..2c7aeea070 100644
--- a/arch/sandbox/cpu/os.c
+++ b/arch/sandbox/cpu/os.c
@@ -1012,8 +1012,24 @@ void *os_find_text_base(void)
return base;
}
+/**
+ * os_unblock_signals() - unblock all signals
+ *
+ * If we are relaunching the sandbox in a signal handler, we have to unblock
+ * the respective signal before calling execv(). See signal(7) man-page.
+ */
+static void os_unblock_signals(void)
+{
+ sigset_t sigs;
+
+ sigfillset(&sigs);
+ sigprocmask(SIG_UNBLOCK, &sigs, NULL);
+}
+
void os_relaunch(char *argv[])
{
+ os_unblock_signals();
+
execv(argv[0], argv);
os_exit(1);
}
--
2.37.2
More information about the U-Boot
mailing list