> Just adding a little more clarification, there is an additional change > between [a] and [b]. > As per [a] we would just restore the signal instead of changing the > saved_sigmask and the signal could get delivered right then. [b] > changes this to happen at syscall exit: Rewording above, as there seems to be a few misrepresentations: Just adding a little more clarification, there is an additional change between [a] and [b]. As per [a] we would just restore the signal mask instead of changing the saved_sigmask and the even the blocked signals could get delivered right then. [b] changes the restoration to happen at syscall exit: > void restore_user_sigmask(const void __user *usigmask, sigset_t *sigsaved) > { > > <snip> > > /* > * When signals are pending, do not restore them here. > * Restoring sigmask here can lead to delivering signals > that the above > * syscalls are intended to block because of the sigmask passed in. > */ > if (signal_pending(current)) { > current->saved_sigmask = *sigsaved; > set_restore_sigmask(); > return; > } -Deepa