forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/arch/sh/kernel/signal_32.c
....@@ -28,7 +28,6 @@
2828 #include <linux/tracehook.h>
2929 #include <asm/ucontext.h>
3030 #include <linux/uaccess.h>
31
-#include <asm/pgtable.h>
3231 #include <asm/cacheflush.h>
3332 #include <asm/syscalls.h>
3433 #include <asm/fpu.h>
....@@ -116,6 +115,7 @@
116115 restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *r0_p)
117116 {
118117 unsigned int err = 0;
118
+ unsigned int sr = regs->sr & ~SR_USER_MASK;
119119
120120 #define COPY(x) err |= __get_user(regs->x, &sc->sc_##x)
121121 COPY(regs[1]);
....@@ -130,6 +130,8 @@
130130 COPY(macl); COPY(pr);
131131 COPY(sr); COPY(pc);
132132 #undef COPY
133
+
134
+ regs->sr = (regs->sr & SR_USER_MASK) | sr;
133135
134136 #ifdef CONFIG_SH_FPU
135137 if (boot_cpu_data.flags & CPU_HAS_FPU) {
....@@ -160,7 +162,7 @@
160162 /* Always make any pending restarted system calls return -EINTR */
161163 current->restart_block.fn = do_no_restart_syscall;
162164
163
- if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
165
+ if (!access_ok(frame, sizeof(*frame)))
164166 goto badframe;
165167
166168 if (__get_user(set.sig[0], &frame->sc.oldmask)
....@@ -176,7 +178,7 @@
176178 return r0;
177179
178180 badframe:
179
- force_sig(SIGSEGV, current);
181
+ force_sig(SIGSEGV);
180182 return 0;
181183 }
182184
....@@ -190,7 +192,7 @@
190192 /* Always make any pending restarted system calls return -EINTR */
191193 current->restart_block.fn = do_no_restart_syscall;
192194
193
- if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
195
+ if (!access_ok(frame, sizeof(*frame)))
194196 goto badframe;
195197
196198 if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
....@@ -207,7 +209,7 @@
207209 return r0;
208210
209211 badframe:
210
- force_sig(SIGSEGV, current);
212
+ force_sig(SIGSEGV);
211213 return 0;
212214 }
213215
....@@ -272,7 +274,7 @@
272274
273275 frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame));
274276
275
- if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
277
+ if (!access_ok(frame, sizeof(*frame)))
276278 return -EFAULT;
277279
278280 err |= setup_sigcontext(&frame->sc, regs, set->sig[0]);
....@@ -338,7 +340,7 @@
338340
339341 frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame));
340342
341
- if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
343
+ if (!access_ok(frame, sizeof(*frame)))
342344 return -EFAULT;
343345
344346 err |= copy_siginfo_to_user(&frame->info, &ksig->info);
....@@ -419,7 +421,7 @@
419421 case -ERESTARTSYS:
420422 if (!(sa->sa_flags & SA_RESTART))
421423 goto no_system_call_restart;
422
- /* fallthrough */
424
+ fallthrough;
423425 case -ERESTARTNOINTR:
424426 regs->regs[0] = save_r0;
425427 regs->pc -= instruction_size(__raw_readw(regs->pc - 4));
....@@ -500,11 +502,9 @@
500502 unsigned long thread_info_flags)
501503 {
502504 /* deal with pending signal delivery */
503
- if (thread_info_flags & _TIF_SIGPENDING)
505
+ if (thread_info_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL))
504506 do_signal(regs, save_r0);
505507
506
- if (thread_info_flags & _TIF_NOTIFY_RESUME) {
507
- clear_thread_flag(TIF_NOTIFY_RESUME);
508
+ if (thread_info_flags & _TIF_NOTIFY_RESUME)
508509 tracehook_notify_resume(regs);
509
- }
510510 }