diff options
Diffstat (limited to 'fs/signalfd.c')
| -rw-r--r-- | fs/signalfd.c | 15 | 
1 files changed, 12 insertions, 3 deletions
| diff --git a/fs/signalfd.c b/fs/signalfd.c index 9990957264e3..76bf9cc62074 100644 --- a/fs/signalfd.c +++ b/fs/signalfd.c @@ -118,13 +118,22 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo,  		err |= __put_user(kinfo->si_trapno, &uinfo->ssi_trapno);  #endif  #ifdef BUS_MCEERR_AO -		/*  +		/* +		 * Other callers might not initialize the si_lsb field, +		 * so check explicitly for the right codes here. +		 */ +		if (kinfo->si_signo == SIGBUS && +		     kinfo->si_code == BUS_MCEERR_AO) +			err |= __put_user((short) kinfo->si_addr_lsb, +					  &uinfo->ssi_addr_lsb); +#endif +#ifdef BUS_MCEERR_AR +		/*  		 * Other callers might not initialize the si_lsb field,  		 * so check explicitly for the right codes here.  		 */  		if (kinfo->si_signo == SIGBUS && -		    (kinfo->si_code == BUS_MCEERR_AR || -		     kinfo->si_code == BUS_MCEERR_AO)) +		    kinfo->si_code == BUS_MCEERR_AR)  			err |= __put_user((short) kinfo->si_addr_lsb,  					  &uinfo->ssi_addr_lsb);  #endif | 

