From: Benjamin Berg <benjamin@sipsolutions.net>
To: linux-um@lists.infradead.org
Cc: Benjamin Berg <benjamin@sipsolutions.net>
Subject: [RFC PATCH v2 2/9] um: Move faultinfo extraction into userspace routine
Date: Wed, 23 Oct 2024 16:08:20 +0200 [thread overview]
Message-ID: <20241023140827.136550-3-benjamin@sipsolutions.net> (raw)
In-Reply-To: <20241023140827.136550-1-benjamin@sipsolutions.net>
The segv handler is called slightly differently depending on whether
PTRACE_FULL_FAULTINFO is set or not (32bit vs. 64bit). The only
difference is that we don't try to pass the registers and instruction
pointer to the segv handler.
It would be good to either document or remove the difference, but I do
not know why this difference exists. And, passing NULL can even result
in a crash.
Signed-off-by: Benjamin Berg <benjamin@sipsolutions.net>
---
arch/um/os-Linux/skas/process.c | 17 ++++++-----------
1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
index 97856955e892..e99fdb100715 100644
--- a/arch/um/os-Linux/skas/process.c
+++ b/arch/um/os-Linux/skas/process.c
@@ -163,12 +163,6 @@ static void get_skas_faultinfo(int pid, struct faultinfo *fi)
memcpy(fi, (void *)current_stub_stack(), sizeof(*fi));
}
-static void handle_segv(int pid, struct uml_pt_regs *regs)
-{
- get_skas_faultinfo(pid, ®s->faultinfo);
- segv(regs->faultinfo, 0, 1, NULL);
-}
-
static void handle_trap(int pid, struct uml_pt_regs *regs)
{
if ((UPT_IP(regs) >= STUB_START) && (UPT_IP(regs) < STUB_END))
@@ -509,13 +503,14 @@ void userspace(struct uml_pt_regs *regs)
switch (sig) {
case SIGSEGV:
- if (PTRACE_FULL_FAULTINFO) {
- get_skas_faultinfo(pid,
- ®s->faultinfo);
+ get_skas_faultinfo(pid, ®s->faultinfo);
+
+ if (PTRACE_FULL_FAULTINFO)
(*sig_info[SIGSEGV])(SIGSEGV, (struct siginfo *)&si,
regs);
- }
- else handle_segv(pid, regs);
+ else
+ segv(regs->faultinfo, 0, 1, NULL);
+
break;
case SIGTRAP + 0x80:
handle_trap(pid, regs);
--
2.47.0
next prev parent reply other threads:[~2024-10-23 14:09 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-23 14:08 [RFC PATCH v2 0/9] SECCOMP based userspace for UML Benjamin Berg
2024-10-23 14:08 ` [RFC PATCH v2 1/9] um: Store full CSGSFS and SS register from mcontext Benjamin Berg
2024-10-23 14:08 ` Benjamin Berg [this message]
2024-10-23 14:08 ` [RFC PATCH v2 3/9] um: Add UML_SECCOMP configuration option Benjamin Berg
2024-10-23 14:08 ` [RFC PATCH v2 4/9] um: Add stub side of SECCOMP/futex based process handling Benjamin Berg
2024-10-23 14:08 ` [RFC PATCH v2 5/9] um: Add helper functions to get/set state for SECCOMP Benjamin Berg
2024-10-23 14:08 ` [RFC PATCH v2 6/9] um: Add SECCOMP support detection and initialization Benjamin Berg
2024-10-23 14:08 ` [RFC PATCH v2 7/9] um: Track userspace children dying in SECCOMP mode Benjamin Berg
2024-10-23 14:08 ` [RFC PATCH v2 8/9] um: Implement kernel side of SECCOMP based process handling Benjamin Berg
2024-10-23 14:08 ` [RFC PATCH v2 9/9] um: pass FD for memory operations when needed Benjamin Berg
2024-10-24 13:52 ` Tiwei Bie
2024-10-26 10:33 ` Benjamin Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241023140827.136550-3-benjamin@sipsolutions.net \
--to=benjamin@sipsolutions.net \
--cc=linux-um@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.