X-Git-Url: https://bbs.cooldavid.org/git/?a=blobdiff_plain;f=fs%2Fsignalfd.c;h=492465b451ddd34f6f60214fb48224687649faa9;hb=HEAD;hp=1c5a6add779d07c1da65aa644d2300ef89dfe7d8;hpb=c64557d666eb62eb5f296c6b93bd0a5525ed1e36;p=net-next-2.6.git diff --git a/fs/signalfd.c b/fs/signalfd.c index 1c5a6add779..492465b451d 100644 --- a/fs/signalfd.c +++ b/fs/signalfd.c @@ -98,6 +98,16 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo, err |= __put_user((long) kinfo->si_addr, &uinfo->ssi_addr); #ifdef __ARCH_SI_TRAPNO 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_code == BUS_MCEERR_AR || + kinfo->si_code == BUS_MCEERR_AO) + err |= __put_user((short) kinfo->si_addr_lsb, + &uinfo->ssi_addr_lsb); #endif break; case __SI_CHLD: @@ -206,6 +216,7 @@ static const struct file_operations signalfd_fops = { .release = signalfd_release, .poll = signalfd_poll, .read = signalfd_read, + .llseek = noop_llseek, }; SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask,