NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
PR/55990 CVS commit: src/sys/arch/m68k/m68k
The following reply was made to PR port-m68k/55990; it has been noted by GNATS.
From: "Izumi Tsutsui" <tsutsui%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc:
Subject: PR/55990 CVS commit: src/sys/arch/m68k/m68k
Date: Sun, 20 Sep 2026 03:58:19 +0000
Module Name: src
Committed By: tsutsui
Date: Sun Sep 20 03:58:19 UTC 2026
Modified Files:
src/sys/arch/m68k/m68k: reenter_syscall.s
Log Message:
m68k: remove invalid diagnostic check inside #ifdef DEBUG
This could happen on the following case:
```
(libc / sigtramp -> trap #0)
syscall(SYS_setcontext, frame)
(p->p_md.md_syscall)()
syscall_plain()
sy_call(callp, ...)
(*callp->sy_call)()
sys_setcontext()
setucontext()
cpu_setmcontext()
(saved mcontext format >= FMT4 && f_stackadj == 0)
reenter_syscall(frame, sz)
(relocate trapframe downward by sz and set f_stackadj = sz)
syscall(SYS_setcontext, relocated frame)
(p->p_md.md_syscall)()
syscall_plain()
sy_call(callp, ...)
(*callp->sy_call)()
sys_setcontext()
setucontext()
cpu_setmcontext()
(f_stackadj == sz, so restore long exception frame,
then f_stackadj = 0)
return EJUSTRETURN from 2nd sys_setcontext()
return from sy_call()
return from syscall_plain()
userret()
==> PR/55990 triggering case:
a pending signal is delivered at this user-return point
mi_userret()
lwp_userret()
(LW_PENDSIG is set;
issignal() returns a pending signal)
postsig()
kpsendsig()
(*p->p_emul->e_sendsig)()
sendsig()
sendsig_siginfo()
cpu_getmcontext()
(save longframe to mcontext,
set f_format = 0, and
f_stackadj += sz)
return from userret() in the 2nd syscall()
return from the 2nd syscall()
epilogue of reenter_syscall()
==> f_stackadj != 0 here;
reenter_syscall.s rev 1.6 and prior did not handle this case,
then caused PR/55990
```
so this f_stackadj == 0 check should have been removed in rev 1.7.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/m68k/m68k/reenter_syscall.s
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Home |
Main Index |
Thread Index |
Old Index