Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Sep 2015 20:55:01 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r287870 - head/sys/kern
Message-ID:  <201509162055.t8GKt13u090688@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Wed Sep 16 20:55:00 2015
New Revision: 287870
URL: https://svnweb.freebsd.org/changeset/base/287870

Log:
  Always clear TDB_USERWR before fetching system call arguments.  The
  TDB_USERWR flag may still be set after a debugger detaches from a
  process via PT_DETACH.  Previously the flag would never be cleared
  forcing a double fetch of the system call arguments for each system
  call.  Note that the flag cannot be cleared at PT_DETACH time in case
  one of the threads in the process is currently stopped in
  syscallenter() and the debugger has modified the arguments for that
  pending system call before detaching.
  
  Reviewed by:	kib
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D3678

Modified:
  head/sys/kern/subr_syscall.c

Modified: head/sys/kern/subr_syscall.c
==============================================================================
--- head/sys/kern/subr_syscall.c	Wed Sep 16 19:58:04 2015	(r287869)
+++ head/sys/kern/subr_syscall.c	Wed Sep 16 20:55:00 2015	(r287870)
@@ -63,14 +63,14 @@ syscallenter(struct thread *td, struct s
 	td->td_pticks = 0;
 	if (td->td_cowgen != p->p_cowgen)
 		thread_cow_update(td);
-	if (p->p_flag & P_TRACED) {
-		traced = 1;
+	traced = (p->p_flag & P_TRACED) != 0;
+	if (traced || td->td_dbgflags & TDB_USERWR) {
 		PROC_LOCK(p);
 		td->td_dbgflags &= ~TDB_USERWR;
-		td->td_dbgflags |= TDB_SCE;
+		if (traced)
+			td->td_dbgflags |= TDB_SCE;
 		PROC_UNLOCK(p);
-	} else
-		traced = 0;
+	}
 	error = (p->p_sysent->sv_fetch_syscall_args)(td, sa);
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_SYSCALL))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201509162055.t8GKt13u090688>