OSDN Git Service

signal: Move set_notify_signal and clear_notify_signal into sched/signal.h
authorEric W. Biederman <ebiederm@xmission.com>
Wed, 9 Feb 2022 17:46:54 +0000 (11:46 -0600)
committerEric W. Biederman <ebiederm@xmission.com>
Thu, 10 Mar 2022 22:51:50 +0000 (16:51 -0600)
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>
include/linux/sched/signal.h
include/linux/tracehook.h

index b6ecb9f..3c8b348 100644 (file)
@@ -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);
index e5d676e..1b7365a 100644 (file)
@@ -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> */