From: Gabriel Krisman Bertazi <firstname.lastname@example.org> To: Thomas Gleixner <email@example.com> Cc: firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com Subject: Re: [PATCH v4 1/2] kernel: Implement selective syscall userspace redirection Date: Mon, 20 Jul 2020 09:46:59 -0400 [thread overview] Message-ID: <firstname.lastname@example.org> (raw) In-Reply-To: <email@example.com> (Thomas Gleixner's message of "Mon, 20 Jul 2020 12:08:47 +0200") Hi Thomas, Thanks for the valuable feedback! Thomas Gleixner <firstname.lastname@example.org> writes: > Gabriel Krisman Bertazi <email@example.com> writes: >> Introduce a mechanism to quickly disable/enable syscall handling for a >> specific process and redirect to userspace via SIGSYS. This is useful >> for processes with parts that require syscall redirection and parts that >> don't, but who need to perform this boundary crossing really fast, >> without paying the cost of a system call to reconfigure syscall handling >> on each boundary transition. This is particularly important for Windows >> games running over Wine. >> >> The proposed interface looks like this: >> >> prctl(PR_SET_SYSCALL_USER_DISPATCH, <op>, <start_addr>, <end_addr>, [selector]) >> >> The range [<start_addr>,<end_addr>] is a part of the process memory map >> that is allowed to by-pass the redirection code and dispatch syscalls >> directly, such that in fast paths a process doesn't need to disable the >> trap nor the kernel has to check the selector. This is essential to >> return from SIGSYS to a blocked area without triggering another SIGSYS >> from rt_sigreturn. > > Why isn't rt_sigreturn() exempt from that redirection in the first > place? This was actually a design decision for me. The main use case I'm considering is emulation of applications written for other OSs (games over wine), which means this dispatcher code is exposed to applications built against different ABIs, who trigger syscalls with bogus parameters (from a linux perspective) In this emulation scenario, I cannot really trust the syscall number means rt_sigreturn, so I try to only base the dispatcher decision on the memory region and selector variable. I think the best we can do is what Andy said: to exempt rt_sigreturn when it comes from the vdso, for architectures that do it that way. > >> --- >> arch/Kconfig | 20 ++++++ >> arch/x86/Kconfig | 1 + >> arch/x86/entry/common.c | 5 ++ >> arch/x86/include/asm/thread_info.h | 4 +- >> arch/x86/kernel/signal_compat.c | 2 +- >> fs/exec.c | 2 + >> include/linux/sched.h | 3 + >> include/linux/syscall_user_dispatch.h | 50 +++++++++++++++ >> include/uapi/asm-generic/siginfo.h | 3 +- >> include/uapi/linux/prctl.h | 5 ++ >> kernel/Makefile | 1 + >> kernel/fork.c | 1 + >> kernel/sys.c | 5 ++ >> kernel/syscall_user_dispatch.c | 92 +++++++++++++++++++++++++++ > > A big combo patch is not how we do that. Please split it up into the > core part and a patch enabling it for a particular architexture. > > As I said in my reply to Andy, this wants to go on top of the generic > entry/exit work stuff: > > https://firstname.lastname@example.org > > and then syscall_user_dispatch.c ends up in kernel/entry/ and the > dispatching function is not exposed outside of that directory. > > I'm going to post a new version later today. Will cc you. Thanks. Will do! -- Gabriel Krisman Bertazi
next prev parent reply other threads:[~2020-07-20 13:47 UTC|newest] Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-16 19:31 [PATCH v4 0/2] Syscall User Redirection Gabriel Krisman Bertazi 2020-07-16 19:31 ` [PATCH v4 1/2] kernel: Implement selective syscall userspace redirection Gabriel Krisman Bertazi 2020-07-16 21:06 ` Matthew Wilcox 2020-07-16 21:26 ` Kees Cook 2020-07-17 0:20 ` Andy Lutomirski 2020-07-17 2:15 ` Gabriel Krisman Bertazi 2020-07-17 4:48 ` Andy Lutomirski 2020-07-21 12:06 ` Mark Rutland 2020-07-20 9:23 ` Thomas Gleixner 2020-07-20 9:44 ` Will Deacon 2020-07-20 10:08 ` Thomas Gleixner 2020-07-20 13:46 ` Gabriel Krisman Bertazi [this message] 2020-07-16 19:31 ` [PATCH v4 2/2] selftests: Add kselftest for syscall user dispatch Gabriel Krisman Bertazi 2020-07-16 20:04 ` [PATCH v4 0/2] Syscall User Redirection Kees Cook 2020-07-16 20:22 ` Christian Brauner 2020-07-16 20:25 ` Kees Cook 2020-07-16 20:29 ` Christian Brauner 2020-07-16 20:30 ` Gabriel Krisman Bertazi 2020-07-16 21:06 ` Carlos O'Donell 2020-08-02 12:01 ` Pavel Machek 2020-08-04 14:26 ` Gabriel Krisman Bertazi
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 \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --subject='Re: [PATCH v4 1/2] kernel: Implement selective syscall userspace redirection' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).