MFC r206553:
Change printf() calls to uprintf() for sigreturn() and trap() complaints about inacessible or wrong mcontext, and for dreaded "kernel trap with interrupts disabled" situation. The later is changed when trap is generated from user mode (shall never be ?). Normalize the messages to include both pid and thread name.
This commit is contained in:
parent
0c58adb2fa
commit
66df5bde4d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/8/; revision=206890
@ -422,13 +422,14 @@ sigreturn(td, uap)
|
||||
|
||||
error = copyin(uap->sigcntxp, &uc, sizeof(uc));
|
||||
if (error != 0) {
|
||||
printf("sigreturn (pid %d): copyin failed\n", p->p_pid);
|
||||
uprintf("pid %d (%s): sigreturn copyin failed\n",
|
||||
p->p_pid, td->td_name);
|
||||
return (error);
|
||||
}
|
||||
ucp = &uc;
|
||||
if ((ucp->uc_mcontext.mc_flags & ~_MC_FLAG_MASK) != 0) {
|
||||
printf("sigreturn (pid %d): mc_flags %x\n", p->p_pid,
|
||||
ucp->uc_mcontext.mc_flags);
|
||||
uprintf("pid %d (%s): sigreturn mc_flags %x\n", p->p_pid,
|
||||
td->td_name, ucp->uc_mcontext.mc_flags);
|
||||
return (EINVAL);
|
||||
}
|
||||
regs = td->td_frame;
|
||||
@ -447,8 +448,8 @@ sigreturn(td, uap)
|
||||
* one less debugger trap, so allowing it is fairly harmless.
|
||||
*/
|
||||
if (!EFL_SECURE(rflags & ~PSL_RF, regs->tf_rflags & ~PSL_RF)) {
|
||||
printf("sigreturn (pid %d): rflags = 0x%lx\n", p->p_pid,
|
||||
rflags);
|
||||
uprintf("pid %d (%s): sigreturn rflags = 0x%lx\n", p->p_pid,
|
||||
td->td_name, rflags);
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
@ -459,7 +460,8 @@ sigreturn(td, uap)
|
||||
*/
|
||||
cs = ucp->uc_mcontext.mc_cs;
|
||||
if (!CS_SECURE(cs)) {
|
||||
printf("sigreturn (pid %d): cs = 0x%x\n", p->p_pid, cs);
|
||||
uprintf("pid %d (%s): sigreturn cs = 0x%x\n", p->p_pid,
|
||||
td->td_name, cs);
|
||||
ksiginfo_init_trap(&ksi);
|
||||
ksi.ksi_signo = SIGBUS;
|
||||
ksi.ksi_code = BUS_OBJERR;
|
||||
@ -471,7 +473,8 @@ sigreturn(td, uap)
|
||||
|
||||
ret = set_fpcontext(td, &ucp->uc_mcontext);
|
||||
if (ret != 0) {
|
||||
printf("sigreturn (pid %d): set_fpcontext\n", p->p_pid);
|
||||
uprintf("pid %d (%s): sigreturn set_fpcontext err %d\n",
|
||||
p->p_pid, td->td_name, ret);
|
||||
return (ret);
|
||||
}
|
||||
bcopy(&ucp->uc_mcontext.mc_rdi, regs, sizeof(*regs));
|
||||
|
@ -303,7 +303,7 @@ trap(struct trapframe *frame)
|
||||
* enabled later.
|
||||
*/
|
||||
if (ISPL(frame->tf_cs) == SEL_UPL)
|
||||
printf(
|
||||
uprintf(
|
||||
"pid %ld (%s): trap %d with interrupts disabled\n",
|
||||
(long)curproc->p_pid, curthread->td_name, type);
|
||||
else if (type != T_NMI && type != T_BPTFLT &&
|
||||
|
@ -565,7 +565,8 @@ freebsd4_freebsd32_sigreturn(td, uap)
|
||||
* one less debugger trap, so allowing it is fairly harmless.
|
||||
*/
|
||||
if (!EFL_SECURE(eflags & ~PSL_RF, regs->tf_rflags & ~PSL_RF)) {
|
||||
printf("freebsd4_freebsd32_sigreturn: eflags = 0x%x\n", eflags);
|
||||
uprintf("pid %d (%s): freebsd4_freebsd32_sigreturn eflags = 0x%x\n",
|
||||
td->td_proc->p_pid, td->td_name, eflags);
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
@ -576,7 +577,8 @@ freebsd4_freebsd32_sigreturn(td, uap)
|
||||
*/
|
||||
cs = ucp->uc_mcontext.mc_cs;
|
||||
if (!CS_SECURE(cs)) {
|
||||
printf("freebsd4_sigreturn: cs = 0x%x\n", cs);
|
||||
uprintf("pid %d (%s): freebsd4_sigreturn cs = 0x%x\n",
|
||||
td->td_proc->p_pid, td->td_name, cs);
|
||||
ksiginfo_init_trap(&ksi);
|
||||
ksi.ksi_signo = SIGBUS;
|
||||
ksi.ksi_code = BUS_OBJERR;
|
||||
@ -647,7 +649,8 @@ freebsd32_sigreturn(td, uap)
|
||||
* one less debugger trap, so allowing it is fairly harmless.
|
||||
*/
|
||||
if (!EFL_SECURE(eflags & ~PSL_RF, regs->tf_rflags & ~PSL_RF)) {
|
||||
printf("freebsd32_sigreturn: eflags = 0x%x\n", eflags);
|
||||
uprintf("pid %d (%s): freebsd32_sigreturn eflags = 0x%x\n",
|
||||
td->td_proc->p_pid, td->td_name, eflags);
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
@ -658,7 +661,8 @@ freebsd32_sigreturn(td, uap)
|
||||
*/
|
||||
cs = ucp->uc_mcontext.mc_cs;
|
||||
if (!CS_SECURE(cs)) {
|
||||
printf("sigreturn: cs = 0x%x\n", cs);
|
||||
uprintf("pid %d (%s): sigreturn cs = 0x%x\n",
|
||||
td->td_proc->p_pid, td->td_name, cs);
|
||||
ksiginfo_init_trap(&ksi);
|
||||
ksi.ksi_signo = SIGBUS;
|
||||
ksi.ksi_code = BUS_OBJERR;
|
||||
|
@ -944,7 +944,8 @@ freebsd4_sigreturn(td, uap)
|
||||
* one less debugger trap, so allowing it is fairly harmless.
|
||||
*/
|
||||
if (!EFL_SECURE(eflags & ~PSL_RF, regs->tf_eflags & ~PSL_RF)) {
|
||||
printf("freebsd4_sigreturn: eflags = 0x%x\n", eflags);
|
||||
uprintf("pid %d (%s): freebsd4_sigreturn eflags = 0x%x\n",
|
||||
td->td_proc->p_pid, td->td_name, eflags);
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
@ -955,7 +956,8 @@ freebsd4_sigreturn(td, uap)
|
||||
*/
|
||||
cs = ucp->uc_mcontext.mc_cs;
|
||||
if (!CS_SECURE(cs)) {
|
||||
printf("freebsd4_sigreturn: cs = 0x%x\n", cs);
|
||||
uprintf("pid %d (%s): freebsd4_sigreturn cs = 0x%x\n",
|
||||
td->td_proc->p_pid, td->td_name, cs);
|
||||
ksiginfo_init_trap(&ksi);
|
||||
ksi.ksi_signo = SIGBUS;
|
||||
ksi.ksi_code = BUS_OBJERR;
|
||||
@ -1056,7 +1058,8 @@ sigreturn(td, uap)
|
||||
* one less debugger trap, so allowing it is fairly harmless.
|
||||
*/
|
||||
if (!EFL_SECURE(eflags & ~PSL_RF, regs->tf_eflags & ~PSL_RF)) {
|
||||
printf("sigreturn: eflags = 0x%x\n", eflags);
|
||||
uprintf("pid %d (%s): sigreturn eflags = 0x%x\n",
|
||||
td->td_proc->p_pid, td->td_name, eflags);
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
@ -1067,7 +1070,8 @@ sigreturn(td, uap)
|
||||
*/
|
||||
cs = ucp->uc_mcontext.mc_cs;
|
||||
if (!CS_SECURE(cs)) {
|
||||
printf("sigreturn: cs = 0x%x\n", cs);
|
||||
uprintf("pid %d (%s): sigreturn cs = 0x%x\n",
|
||||
td->td_proc->p_pid, td->td_name, cs);
|
||||
ksiginfo_init_trap(&ksi);
|
||||
ksi.ksi_signo = SIGBUS;
|
||||
ksi.ksi_code = BUS_OBJERR;
|
||||
|
@ -277,7 +277,7 @@ trap(struct trapframe *frame)
|
||||
* enabled later.
|
||||
*/
|
||||
if (ISPL(frame->tf_cs) == SEL_UPL || (frame->tf_eflags & PSL_VM))
|
||||
printf(
|
||||
uprintf(
|
||||
"pid %ld (%s): trap %d with interrupts disabled\n",
|
||||
(long)curproc->p_pid, curthread->td_name, type);
|
||||
else if (type != T_BPTFLT && type != T_TRCTRAP &&
|
||||
@ -507,7 +507,7 @@ trap(struct trapframe *frame)
|
||||
if (npxdna())
|
||||
goto userout;
|
||||
#endif
|
||||
printf("pid %d killed due to lack of floating point\n",
|
||||
uprintf("pid %d killed due to lack of floating point\n",
|
||||
p->p_pid);
|
||||
i = SIGKILL;
|
||||
ucode = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user