hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/arch/openrisc/kernel/signal.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * OpenRISC signal.c
34 *
....@@ -8,11 +9,6 @@
89 * Modifications for the OpenRISC architecture:
910 * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
1011 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
11
- *
12
- * This program is free software; you can redistribute it and/or
13
- * modify it under the terms of the GNU General Public License
14
- * as published by the Free Software Foundation; either version
15
- * 2 of the License, or (at your option) any later version.
1612 */
1713
1814 #include <linux/sched.h>
....@@ -50,7 +46,7 @@
5046
5147 /*
5248 * Restore the regs from &sc->regs.
53
- * (sc is already checked for VERIFY_READ since the sigframe was
49
+ * (sc is already checked since the sigframe was
5450 * checked in sys_sigreturn previously)
5551 */
5652 err |= __copy_from_user(regs, sc->regs.gpr, 32 * sizeof(unsigned long));
....@@ -72,7 +68,7 @@
7268
7369 asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs)
7470 {
75
- struct rt_sigframe *frame = (struct rt_sigframe __user *)regs->sp;
71
+ struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->sp;
7672 sigset_t set;
7773
7874 /*
....@@ -80,10 +76,10 @@
8076 * then frame should be dword aligned here. If it's
8177 * not, then the user is trying to mess with us.
8278 */
83
- if (((long)frame) & 3)
79
+ if (((unsigned long)frame) & 3)
8480 goto badframe;
8581
86
- if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
82
+ if (!access_ok(frame, sizeof(*frame)))
8783 goto badframe;
8884 if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
8985 goto badframe;
....@@ -99,7 +95,7 @@
9995 return regs->gpr[11];
10096
10197 badframe:
102
- force_sig(SIGSEGV, current);
98
+ force_sig(SIGSEGV);
10399 return 0;
104100 }
105101
....@@ -155,13 +151,13 @@
155151 static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
156152 struct pt_regs *regs)
157153 {
158
- struct rt_sigframe *frame;
154
+ struct rt_sigframe __user *frame;
159155 unsigned long return_ip;
160156 int err = 0;
161157
162158 frame = get_sigframe(ksig, regs, sizeof(*frame));
163159
164
- if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
160
+ if (!access_ok(frame, sizeof(*frame)))
165161 return -EFAULT;
166162
167163 /* Create siginfo. */
....@@ -185,10 +181,10 @@
185181 l.ori r11,r0,__NR_sigreturn
186182 l.sys 1
187183 */
188
- err |= __put_user(0xa960, (short *)(frame->retcode + 0));
189
- err |= __put_user(__NR_rt_sigreturn, (short *)(frame->retcode + 2));
190
- err |= __put_user(0x20000001, (unsigned long *)(frame->retcode + 4));
191
- err |= __put_user(0x15000000, (unsigned long *)(frame->retcode + 8));
184
+ err |= __put_user(0xa960, (short __user *)(frame->retcode + 0));
185
+ err |= __put_user(__NR_rt_sigreturn, (short __user *)(frame->retcode + 2));
186
+ err |= __put_user(0x20000001, (unsigned long __user *)(frame->retcode + 4));
187
+ err |= __put_user(0x15000000, (unsigned long __user *)(frame->retcode + 8));
192188
193189 if (err)
194190 return -EFAULT;
....@@ -248,7 +244,7 @@
248244 switch (retval) {
249245 case -ERESTART_RESTARTBLOCK:
250246 restart = -2;
251
- /* Fall through */
247
+ fallthrough;
252248 case -ERESTARTNOHAND:
253249 case -ERESTARTSYS:
254250 case -ERESTARTNOINTR:
....@@ -303,7 +299,7 @@
303299 if (unlikely(!user_mode(regs)))
304300 return 0;
305301 local_irq_enable();
306
- if (thread_flags & _TIF_SIGPENDING) {
302
+ if (thread_flags & (_TIF_SIGPENDING|_TIF_NOTIFY_SIGNAL)) {
307303 int restart = do_signal(regs, syscall);
308304 if (unlikely(restart)) {
309305 /*
....@@ -315,7 +311,6 @@
315311 }
316312 syscall = 0;
317313 } else {
318
- clear_thread_flag(TIF_NOTIFY_RESUME);
319314 tracehook_notify_resume(regs);
320315 }
321316 }