diff options
author | Ingo Molnar <mingo@kernel.org> | 2015-08-20 11:48:56 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-08-20 11:48:56 +0200 |
commit | 40a2ea1bd988e3bbdb07a0708681fdb05cd7d267 (patch) | |
tree | 05806aaa27a4b0516a14a8ccf703c1501500e588 /kernel/signal.c | |
parent | a897b5f0393a8a05d230c9248dc5324fb30720a0 (diff) | |
parent | 196676497f2507966f99abef63bede6a8550f8b3 (diff) | |
download | linux-40a2ea1bd988e3bbdb07a0708681fdb05cd7d267.tar.gz linux-40a2ea1bd988e3bbdb07a0708681fdb05cd7d267.tar.bz2 linux-40a2ea1bd988e3bbdb07a0708681fdb05cd7d267.zip |
Merge branch 'perf/urgent' into perf/core, to pick up fixes before adding more changes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 836df8dac6cc..0f6bbbe77b46 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -2748,12 +2748,15 @@ int copy_siginfo_to_user(siginfo_t __user *to, const siginfo_t *from) * Other callers might not initialize the si_lsb field, * so check explicitly for the right codes here. */ - if (from->si_code == BUS_MCEERR_AR || from->si_code == BUS_MCEERR_AO) + if (from->si_signo == SIGBUS && + (from->si_code == BUS_MCEERR_AR || from->si_code == BUS_MCEERR_AO)) err |= __put_user(from->si_addr_lsb, &to->si_addr_lsb); #endif #ifdef SEGV_BNDERR - err |= __put_user(from->si_lower, &to->si_lower); - err |= __put_user(from->si_upper, &to->si_upper); + if (from->si_signo == SIGSEGV && from->si_code == SEGV_BNDERR) { + err |= __put_user(from->si_lower, &to->si_lower); + err |= __put_user(from->si_upper, &to->si_upper); + } #endif break; case __SI_CHLD: @@ -3017,7 +3020,7 @@ COMPAT_SYSCALL_DEFINE3(rt_sigqueueinfo, int, sig, struct compat_siginfo __user *, uinfo) { - siginfo_t info; + siginfo_t info = {}; int ret = copy_siginfo_from_user32(&info, uinfo); if (unlikely(ret)) return ret; @@ -3061,7 +3064,7 @@ COMPAT_SYSCALL_DEFINE4(rt_tgsigqueueinfo, int, sig, struct compat_siginfo __user *, uinfo) { - siginfo_t info; + siginfo_t info = {}; if (copy_siginfo_from_user32(&info, uinfo)) return -EFAULT; |