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;

Reply via email to