svn commit: r360286 - stable/12/sys/kern
John Baldwin
jhb at FreeBSD.org
Fri Apr 24 22:17:14 UTC 2020
Author: jhb
Date: Fri Apr 24 22:17:13 2020
New Revision: 360286
URL: https://svnweb.freebsd.org/changeset/base/360286
Log:
MFC 349871: Use 'retval' label for first error in syscallenter().
This is more consistent with the rest of the function and lets us
unindent most of the function.
Sponsored by: DARPA
Modified:
stable/12/sys/kern/subr_syscall.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/kern/subr_syscall.c
==============================================================================
--- stable/12/sys/kern/subr_syscall.c Fri Apr 24 22:10:02 2020 (r360285)
+++ stable/12/sys/kern/subr_syscall.c Fri Apr 24 22:17:13 2020 (r360286)
@@ -85,69 +85,68 @@ syscallenter(struct thread *td)
(uintptr_t)td, "pid:%d", td->td_proc->p_pid, "arg0:%p", sa->args[0],
"arg1:%p", sa->args[1], "arg2:%p", sa->args[2]);
- if (error == 0) {
+ if (error != 0)
+ goto retval;
- STOPEVENT(p, S_SCE, sa->narg);
- if (p->p_flag & P_TRACED) {
- PROC_LOCK(p);
- if (p->p_ptevents & PTRACE_SCE)
- ptracestop((td), SIGTRAP, NULL);
- PROC_UNLOCK(p);
- }
- if (td->td_dbgflags & TDB_USERWR) {
- /*
- * Reread syscall number and arguments if
- * debugger modified registers or memory.
- */
- error = (p->p_sysent->sv_fetch_syscall_args)(td);
+ STOPEVENT(p, S_SCE, sa->narg);
+ if ((p->p_flag & P_TRACED) != 0) {
+ PROC_LOCK(p);
+ if (p->p_ptevents & PTRACE_SCE)
+ ptracestop((td), SIGTRAP, NULL);
+ PROC_UNLOCK(p);
+ }
+ 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);
#ifdef KTRACE
- if (KTRPOINT(td, KTR_SYSCALL))
- ktrsyscall(sa->code, sa->narg, sa->args);
+ if (KTRPOINT(td, KTR_SYSCALL))
+ ktrsyscall(sa->code, sa->narg, sa->args);
#endif
- if (error != 0)
- goto retval;
- }
+ if (error != 0)
+ goto retval;
+ }
#ifdef CAPABILITY_MODE
- /*
- * In capability mode, we only allow access to system calls
- * flagged with SYF_CAPENABLED.
- */
- if (IN_CAPABILITY_MODE(td) &&
- !(sa->callp->sy_flags & SYF_CAPENABLED)) {
- error = ECAPMODE;
- goto retval;
- }
+ /*
+ * In capability mode, we only allow access to system calls
+ * flagged with SYF_CAPENABLED.
+ */
+ if (IN_CAPABILITY_MODE(td) &&
+ !(sa->callp->sy_flags & SYF_CAPENABLED)) {
+ error = ECAPMODE;
+ goto retval;
+ }
#endif
- error = syscall_thread_enter(td, sa->callp);
- if (error != 0)
- goto retval;
+ error = syscall_thread_enter(td, sa->callp);
+ if (error != 0)
+ goto retval;
#ifdef KDTRACE_HOOKS
- /* Give the syscall:::entry DTrace probe a chance to fire. */
- if (__predict_false(systrace_enabled &&
- sa->callp->sy_entry != 0))
- (*systrace_probe_func)(sa, SYSTRACE_ENTRY, 0);
+ /* Give the syscall:::entry DTrace probe a chance to fire. */
+ if (__predict_false(systrace_enabled && sa->callp->sy_entry != 0))
+ (*systrace_probe_func)(sa, SYSTRACE_ENTRY, 0);
#endif
- AUDIT_SYSCALL_ENTER(sa->code, td);
- error = (sa->callp->sy_call)(td, sa->args);
- AUDIT_SYSCALL_EXIT(error, td);
+ AUDIT_SYSCALL_ENTER(sa->code, td);
+ error = (sa->callp->sy_call)(td, sa->args);
+ AUDIT_SYSCALL_EXIT(error, td);
- /* Save the latest error return value. */
- if ((td->td_pflags & TDP_NERRNO) == 0)
- td->td_errno = error;
+ /* Save the latest error return value. */
+ if ((td->td_pflags & TDP_NERRNO) == 0)
+ td->td_errno = error;
#ifdef KDTRACE_HOOKS
- /* Give the syscall:::return DTrace probe a chance to fire. */
- if (__predict_false(systrace_enabled &&
- sa->callp->sy_return != 0))
- (*systrace_probe_func)(sa, SYSTRACE_RETURN,
- error ? -1 : td->td_retval[0]);
+ /* Give the syscall:::return DTrace probe a chance to fire. */
+ if (__predict_false(systrace_enabled && sa->callp->sy_return != 0))
+ (*systrace_probe_func)(sa, SYSTRACE_RETURN,
+ error ? -1 : td->td_retval[0]);
#endif
- syscall_thread_exit(td, sa->callp);
- }
+ syscall_thread_exit(td, sa->callp);
+
retval:
KTR_STOP4(KTR_SYSC, "syscall", syscallname(p, sa->code),
(uintptr_t)td, "pid:%d", td->td_proc->p_pid, "error:%d", error,
More information about the svn-src-all
mailing list