hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/arch/sparc/kernel/signal32.c
....@@ -24,7 +24,6 @@
2424
2525 #include <linux/uaccess.h>
2626 #include <asm/ptrace.h>
27
-#include <asm/pgtable.h>
2827 #include <asm/psrcompat.h>
2928 #include <asm/fpumacro.h>
3029 #include <asm/visasm.h>
....@@ -170,7 +169,7 @@
170169 return;
171170
172171 segv:
173
- force_sig(SIGSEGV, current);
172
+ force_sig(SIGSEGV);
174173 }
175174
176175 asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
....@@ -256,7 +255,7 @@
256255 set_current_blocked(&set);
257256 return;
258257 segv:
259
- force_sig(SIGSEGV, current);
258
+ force_sig(SIGSEGV);
260259 }
261260
262261 static void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize)
....@@ -299,6 +298,7 @@
299298 unsigned long pstate, paddr;
300299 pte_t *ptep, pte;
301300 pgd_t *pgdp;
301
+ p4d_t *p4dp;
302302 pud_t *pudp;
303303 pmd_t *pmdp;
304304
....@@ -318,7 +318,10 @@
318318 pgdp = pgd_offset(current->mm, address);
319319 if (pgd_none(*pgdp))
320320 goto out_irqs_on;
321
- pudp = pud_offset(pgdp, address);
321
+ p4dp = p4d_offset(pgdp, address);
322
+ if (p4d_none(*p4dp))
323
+ goto out_irqs_on;
324
+ pudp = pud_offset(p4dp, address);
322325 if (pud_none(*pudp))
323326 goto out_irqs_on;
324327 pmdp = pmd_offset(pudp, address);
....@@ -375,7 +378,7 @@
375378 pr_info("%s[%d] bad frame in setup_frame32: %08lx TPC %08lx O7 %08lx\n",
376379 current->comm, current->pid, (unsigned long)sf,
377380 regs->tpc, regs->u_regs[UREG_I7]);
378
- force_sigsegv(ksig->sig, current);
381
+ force_sigsegv(ksig->sig);
379382 return -EINVAL;
380383 }
381384
....@@ -509,7 +512,7 @@
509512 pr_info("%s[%d] bad frame in setup_rt_frame32: %08lx TPC %08lx O7 %08lx\n",
510513 current->comm, current->pid, (unsigned long)sf,
511514 regs->tpc, regs->u_regs[UREG_I7]);
512
- force_sigsegv(ksig->sig, current);
515
+ force_sigsegv(ksig->sig);
513516 return -EINVAL;
514517 }
515518
....@@ -643,7 +646,7 @@
643646 case ERESTARTSYS:
644647 if (!(sa->sa_flags & SA_RESTART))
645648 goto no_system_call_restart;
646
- /* fallthrough */
649
+ fallthrough;
647650 case ERESTARTNOINTR:
648651 regs->u_regs[UREG_I0] = orig_i0;
649652 regs->tpc -= 4;
....@@ -683,6 +686,7 @@
683686 regs->tpc -= 4;
684687 regs->tnpc -= 4;
685688 pt_regs_clear_syscall(regs);
689
+ fallthrough;
686690 case ERESTART_RESTARTBLOCK:
687691 regs->u_regs[UREG_G1] = __NR_restart_syscall;
688692 regs->tpc -= 4;