aboutsummaryrefslogtreecommitdiff
path: root/kernel/signal.c
diff options
context:
space:
mode:
authorKevin Hilman <khilman@linaro.org>2015-09-14 14:21:39 -0700
committerKevin Hilman <khilman@linaro.org>2015-09-14 14:21:39 -0700
commitf249a14dd1b6b341e7b5e29b64c0edae6e13b7f5 (patch)
treee5b53c75e42b5ac0d9b8feac65ce4b7a1b2a17bd /kernel/signal.c
parent48cf795880b441a6c59cd840d0475fac7fdffd87 (diff)
parent0c5c1f1a4f991ee015da85cce6d2d9f9c9380b4f (diff)
Merge tag 'v4.1.7' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into linux-linaro-lsk-v4.1lsk-v4.1-15.09
This is the 4.1.7 stable release * tag 'v4.1.7' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable: (165 commits) Linux 4.1.7 ARM: 8405/1: VDSO: fix regression with toolchains lacking ld.bfd executable x86/idle: Restore trace_cpu_idle to mwait_idle() calls x86/apic: Fix fallout from x2apic cleanup x86/xen: make CONFIG_XEN depend on CONFIG_X86_LOCAL_APIC arm64: perf: fix unassigned cpu_pmu->plat_device when probing PMU PPIs arm64: KVM: Fix host crash when injecting a fault into a 32bit guest fnic: Use the local variable instead of I/O flag to acquire io_req_lock in fnic_queuecommand() to avoid deadloack Add factory recertified Crucial M500s to blacklist can: pcan_usb: don't provide CAN FD bittimings by non-FD adapters SCSI: Fix NULL pointer dereference in runtime PM genirq: Introduce irq_chip_set_type_parent() helper genirq: Don't return ENOSYS in irq_chip_retrigger_hierarchy ARM: OMAP: wakeupgen: Restore the irq_set_type() mechanism irqchip/crossbar: Restore set_wake functionality irqchip/crossbar: Restore the mask on suspend behaviour irqchip/crossbar: Restore the irq_set_type() mechanism 9p: ensure err is initialized to 0 in p9_client_read/write drm/i915: Avoid TP3 on CHV drm/i915: remove HBR2 from chv supported list ...
Diffstat (limited to 'kernel/signal.c')
-rw-r--r--kernel/signal.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/kernel/signal.c b/kernel/signal.c
index d51c5ddd855c..0206be728dac 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -2753,12 +2753,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:
@@ -3022,7 +3025,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;
@@ -3066,7 +3069,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;