signal: simplify set_user_sigmask/restore_user_sigmask
task->saved_sigmask and ->restore_sigmask are only used in the ret-from- syscall paths. This means that set_user_sigmask() can save ->blocked in ->saved_sigmask and do set_restore_sigmask() to indicate that ->blocked was modified. This way the callers do not need 2 sigset_t's passed to set/restore and restore_user_sigmask() renamed to restore_saved_sigmask_unless() turns into the trivial helper which just calls restore_saved_sigmask(). Link: http://lkml.kernel.org/r/20190606113206.GA9464@redhat.com Signed-off-by: Oleg Nesterov <oleg@redhat.com> Cc: Deepa Dinamani <deepa.kernel@gmail.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Jens Axboe <axboe@kernel.dk> Cc: Davidlohr Bueso <dave@stgolabs.net> Cc: Eric Wong <e@80x24.org> Cc: Jason Baron <jbaron@akamai.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Al Viro <viro@ZenIV.linux.org.uk> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: David Laight <David.Laight@aculab.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
e2d9018e81
commit
b772434be0
@@ -420,7 +420,6 @@ void task_join_group_stop(struct task_struct *task);
|
||||
static inline void set_restore_sigmask(void)
|
||||
{
|
||||
set_thread_flag(TIF_RESTORE_SIGMASK);
|
||||
WARN_ON(!test_thread_flag(TIF_SIGPENDING));
|
||||
}
|
||||
|
||||
static inline void clear_tsk_restore_sigmask(struct task_struct *task)
|
||||
@@ -451,7 +450,6 @@ static inline bool test_and_clear_restore_sigmask(void)
|
||||
static inline void set_restore_sigmask(void)
|
||||
{
|
||||
current->restore_sigmask = true;
|
||||
WARN_ON(!test_thread_flag(TIF_SIGPENDING));
|
||||
}
|
||||
static inline void clear_tsk_restore_sigmask(struct task_struct *task)
|
||||
{
|
||||
@@ -484,6 +482,16 @@ static inline void restore_saved_sigmask(void)
|
||||
__set_current_blocked(¤t->saved_sigmask);
|
||||
}
|
||||
|
||||
extern int set_user_sigmask(const sigset_t __user *umask, size_t sigsetsize);
|
||||
|
||||
static inline void restore_saved_sigmask_unless(bool interrupted)
|
||||
{
|
||||
if (interrupted)
|
||||
WARN_ON(!test_thread_flag(TIF_SIGPENDING));
|
||||
else
|
||||
restore_saved_sigmask();
|
||||
}
|
||||
|
||||
static inline sigset_t *sigmask_to_save(void)
|
||||
{
|
||||
sigset_t *res = ¤t->blocked;
|
||||
|
Reference in New Issue
Block a user