This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new f21c09a8c33 arch/xtensa/esp32s3: Clear the siginfo of user fault
signals.
f21c09a8c33 is described below
commit f21c09a8c336e3e0c513fce92d99a8720617fc4e
Author: Marco Casaroli <[email protected]>
AuthorDate: Sat Oct 17 19:57:06 2026 +0200
arch/xtensa/esp32s3: Clear the siginfo of user fault signals.
esp32s3_userfault_abort() and pms_violation_isr() send SIGSEGV with a
siginfo_t on the stack. They set only some fields. The other fields
(for example si_pid and si_status) contain stack data, and the signal
handler gets this data.
Clear the whole siginfo_t before the fields are set.
Assisted-by: Claude Code:claude-opus-5-5
Signed-off-by: Marco Casaroli <[email protected]>
---
arch/xtensa/src/esp32s3/esp32s3_isolation.c | 2 ++
arch/xtensa/src/esp32s3/esp32s3_userfault.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/arch/xtensa/src/esp32s3/esp32s3_isolation.c
b/arch/xtensa/src/esp32s3/esp32s3_isolation.c
index e5e99534277..b3a651faaab 100644
--- a/arch/xtensa/src/esp32s3/esp32s3_isolation.c
+++ b/arch/xtensa/src/esp32s3/esp32s3_isolation.c
@@ -39,6 +39,7 @@
#ifdef CONFIG_ESP32S3_USERFAULT_ABORT
#include <signal.h>
+#include <string.h>
#include <arch/irq.h>
#include <arch/xtensa/xtensa_corebits.h>
#endif
@@ -213,6 +214,7 @@ static int IRAM_ATTR pms_violation_isr(int cpuint, void
*context, void *arg)
_alert("SIGSEGV (%s) task %s: PC=%08x\n",
cause, get_task_name(tcb), (unsigned)regs[REG_PC]);
+ memset(&info, 0, sizeof(info));
info.si_signo = SIGSEGV;
info.si_code = SI_USER;
info.si_errno = 0;
diff --git a/arch/xtensa/src/esp32s3/esp32s3_userfault.c
b/arch/xtensa/src/esp32s3/esp32s3_userfault.c
index e0f6ca343a8..99cbd804d19 100644
--- a/arch/xtensa/src/esp32s3/esp32s3_userfault.c
+++ b/arch/xtensa/src/esp32s3/esp32s3_userfault.c
@@ -30,6 +30,7 @@
#include <stdint.h>
#include <debug.h>
#include <signal.h>
+#include <string.h>
#include <nuttx/irq.h>
#include <nuttx/sched.h>
@@ -103,6 +104,7 @@ uint32_t *esp32s3_userfault_abort(int exccause, uint32_t
*regs)
up_set_interrupt_context(true);
tcb->xcp.regs = regs;
+ memset(&info, 0, sizeof(info));
info.si_signo = SIGSEGV;
info.si_code = SI_USER;
info.si_errno = 0;