Andrew Morton akpm@linux-foundation.org wrote:
On Tue, 21 May 2019 09:25:51 +0000 Eric Wong e@80x24.org wrote:
Deepa Dinamani deepa.kernel@gmail.com wrote:
For all the syscalls that receive a sigmask from the userland, the user sigmask is to be in effect through the syscall execution. At the end of syscall, sigmask of the current process is restored to what it was before the switch over to user sigmask. But, for this to be true in practice, the sigmask should be restored only at the the point we change the saved_sigmask. Anything before that loses signals. And, anything after is just pointless as the signal is already lost by restoring the sigmask.
The inherent issue was detected because of a regression caused by 854a6ed56839a. The patch moved the signal_pending() check closer to restoring of the user sigmask. But, it failed to update the error code accordingly.
Detailed issue discussion permalink: https://lore.kernel.org/linux-fsdevel/20190427093319.sgicqik2oqkez3wk@dcvr/
Note that the patch returns interrupted errors (EINTR, ERESTARTNOHAND, etc) only when there is no other error. If there is a signal and an error like EINVAL, the syscalls return -EINVAL rather than the interrupted error codes.
The sys_io_uring_enter() seems to be returning success when there is a signal and the queue is not empty. This seems to be a bug. I will follow up with a separate patch for that.
Reported-by: Eric Wong e@80x24.org Fixes: 854a6ed56839a40f6b5d02a2962f48841482eec4 ("signal: Add restore_user_sigmask()") Signed-off-by: Deepa Dinamani deepa.kernel@gmail.com Reviewed-by: Davidlohr Bueso dbueso@suse.de
(top-posting fixed).
It's been 2 weeks and this fix hasn't appeared in mmots / mmotm. I also noticed it's missing Cc: for stable@ (below)
Why is a -stable backport needed? I see some talk above about lost signals but it is unclear whether these are being observed after fixing the regression caused by 854a6ed56839a.
I guess Deepa's commit messages wasn't clear... I suggest prepending this as the first paragraph to Deepa's original message:
This fixes a bug introduced with 854a6ed56839a which caused EINTR to not be reported to userspace on epoll_pwait. Failure to report EINTR to userspace caused problems with user code which relies on EINTR to run signal handlers.
IOW, can we please have a changelog which has a clear and complete description of the user-visible effects of the change.
And please Cc Oleg.