diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2021-05-02 14:27:24 -0500 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2021-05-18 16:20:54 -0500 |
commit | af5eeab7e8e8c2f0fad10e4ab8cc8092012a2d5b (patch) | |
tree | 9e9cf468010ea32dcf474dea62e2d8a7ce8f5d23 /kernel/signal.c | |
parent | 9abcabe3111811aeae0f3a14e159b14248631875 (diff) | |
download | lwn-af5eeab7e8e8c2f0fad10e4ab8cc8092012a2d5b.tar.gz lwn-af5eeab7e8e8c2f0fad10e4ab8cc8092012a2d5b.zip |
signal: Factor force_sig_perf out of perf_sigtrap
Separate filling in siginfo for TRAP_PERF from deciding that
siginal needs to be sent.
There are enough little details that need to be correct when
properly filling in siginfo_t that it is easy to make mistakes
if filling in the siginfo_t is in the same function with other
logic. So factor out force_sig_perf to reduce the cognative
load of on reviewers, maintainers and implementors.
v1: https://lkml.kernel.org/r/m17dkjqqxz.fsf_-_@fess.ebiederm.org
v2: https://lkml.kernel.org/r/20210505141101.11519-10-ebiederm@xmission.com
Link: https://lkml.kernel.org/r/20210517195748.8880-3-ebiederm@xmission.com
Reviewed-by: Marco Elver <elver@google.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 597594ee72de..3a18d13c39b2 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -1763,6 +1763,19 @@ int force_sig_pkuerr(void __user *addr, u32 pkey) } #endif +int force_sig_perf(void __user *addr, u32 type, u64 sig_data) +{ + struct kernel_siginfo info; + + clear_siginfo(&info); + info.si_signo = SIGTRAP; + info.si_errno = type; + info.si_code = TRAP_PERF; + info.si_addr = addr; + info.si_perf = sig_data; + return force_sig_info(&info); +} + /* For the crazy architectures that include trap information in * the errno field, instead of an actual errno value. */ |