On Mon, Mar 25, 2019 at 5:19 PM James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote: > > --- a/fs/io_uring.c > > +++ b/fs/io_uring.c > > @@ -1968,7 +1968,15 @@ static int io_cqring_wait(struct io_ring_ctx > > *ctx, int min_events, > > return 0; > > > > if (sig) { > > - ret = set_user_sigmask(sig, &ksigmask, &sigsaved, > > sigsz); > > +#ifdef CONFIG_COMPAT > > + if (in_compat_syscall()) > > + ret = set_compat_user_sigmask((const > > compat_sigset_t __user *)sig, > > + &ksigmask, > > &sigsaved, sigsz); > > + else > > +#endif > > This looks a bit suboptimal: shouldn't in_compat_syscall() be hard > coded to return 0 if CONFIG_COMPAT isn't defined? That way the > compiler can do the correct optimization and we don't have to litter > #ifdefs and worry about undefined variables and other things. The check can be outside of the #ifdef, but set_compat_user_sigmask is not declared then. I think for the future we can consider just moving the compat logic into set_user_sigmask(), which would simplify most of the callers, but that seemed to invasive as a bugfix for 5.1. Arnd