signal: Move set_notify_signal and clear_notify_signal into sched/signal.h
The header tracehook.h is no place for code to live. The functions set_notify_signal and clear_notify_signal are not about signals. They are about interruptions that act like signals. The fundamental signal primitives wind up calling set_notify_signal and clear_notify_signal. Which means they need to be maintained with the signal code. Since set_notify_signal and clear_notify_signal must be maintained with the signal subsystem move them into sched/signal.h and claim them as part of the signal subsystem. Reviewed-by: Kees Cook <keescook@chromium.org> Link: https://lkml.kernel.org/r/20220309162454.123006-10-ebiederm@xmission.com Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
This commit is contained in:
parent
7c5d8fa6fb
commit
593febb143
2 changed files with 17 additions and 17 deletions
|
|
@ -349,6 +349,23 @@ extern void sigqueue_free(struct sigqueue *);
|
|||
extern int send_sigqueue(struct sigqueue *, struct pid *, enum pid_type);
|
||||
extern int do_sigaction(int, struct k_sigaction *, struct k_sigaction *);
|
||||
|
||||
static inline void clear_notify_signal(void)
|
||||
{
|
||||
clear_thread_flag(TIF_NOTIFY_SIGNAL);
|
||||
smp_mb__after_atomic();
|
||||
}
|
||||
|
||||
/*
|
||||
* Called to break out of interruptible wait loops, and enter the
|
||||
* exit_to_user_mode_loop().
|
||||
*/
|
||||
static inline void set_notify_signal(struct task_struct *task)
|
||||
{
|
||||
if (!test_and_set_tsk_thread_flag(task, TIF_NOTIFY_SIGNAL) &&
|
||||
!wake_up_state(task, TASK_INTERRUPTIBLE))
|
||||
kick_process(task);
|
||||
}
|
||||
|
||||
static inline int restart_syscall(void)
|
||||
{
|
||||
set_tsk_thread_flag(current, TIF_SIGPENDING);
|
||||
|
|
|
|||
|
|
@ -106,21 +106,4 @@ static inline void tracehook_notify_resume(struct pt_regs *regs)
|
|||
rseq_handle_notify_resume(NULL, regs);
|
||||
}
|
||||
|
||||
static inline void clear_notify_signal(void)
|
||||
{
|
||||
clear_thread_flag(TIF_NOTIFY_SIGNAL);
|
||||
smp_mb__after_atomic();
|
||||
}
|
||||
|
||||
/*
|
||||
* Called to break out of interruptible wait loops, and enter the
|
||||
* exit_to_user_mode_loop().
|
||||
*/
|
||||
static inline void set_notify_signal(struct task_struct *task)
|
||||
{
|
||||
if (!test_and_set_tsk_thread_flag(task, TIF_NOTIFY_SIGNAL) &&
|
||||
!wake_up_state(task, TASK_INTERRUPTIBLE))
|
||||
kick_process(task);
|
||||
}
|
||||
|
||||
#endif /* <linux/tracehook.h> */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue