svn commit: r367445 - head/sys/kern
Edward Tomasz Napierala
trasz at FreeBSD.org
Sat Nov 7 13:09:51 UTC 2020
Author: trasz
Date: Sat Nov 7 13:09:51 2020
New Revision: 367445
URL: https://svnweb.freebsd.org/changeset/base/367445
Log:
Move TDB_USERWR check under 'if (traced)'.
If we hadn't been traced in the first place when syscallenter()
started executing, we can ignore TDB_USERWR. TDB_USERWR can get set,
sure, but if it does, it's because the debugger raced with the syscall,
and it cannot depend on winning that race.
Reviewed by: kib
MFC after: 2 weeks
Sponsored by: EPSRC
Differential Revision: https://reviews.freebsd.org/D26585
Modified:
head/sys/kern/subr_syscall.c
Modified: head/sys/kern/subr_syscall.c
==============================================================================
--- head/sys/kern/subr_syscall.c Sat Nov 7 05:10:46 2020 (r367444)
+++ head/sys/kern/subr_syscall.c Sat Nov 7 13:09:51 2020 (r367445)
@@ -97,21 +97,22 @@ syscallenter(struct thread *td)
if (p->p_ptevents & PTRACE_SCE)
ptracestop((td), SIGTRAP, NULL);
PROC_UNLOCK(p);
- }
- if (__predict_false((td->td_dbgflags & TDB_USERWR) != 0)) {
- /*
- * Reread syscall number and arguments if debugger
- * modified registers or memory.
- */
- error = (p->p_sysent->sv_fetch_syscall_args)(td);
- se = sa->callp;
+
+ if ((td->td_dbgflags & TDB_USERWR) != 0) {
+ /*
+ * Reread syscall number and arguments if debugger
+ * modified registers or memory.
+ */
+ error = (p->p_sysent->sv_fetch_syscall_args)(td);
+ se = sa->callp;
#ifdef KTRACE
- if (KTRPOINT(td, KTR_SYSCALL))
- ktrsyscall(sa->code, se->sy_narg, sa->args);
+ if (KTRPOINT(td, KTR_SYSCALL))
+ ktrsyscall(sa->code, se->sy_narg, sa->args);
#endif
- if (error != 0) {
- td->td_errno = error;
- goto retval;
+ if (error != 0) {
+ td->td_errno = error;
+ goto retval;
+ }
}
}
More information about the svn-src-all
mailing list