Author: attilio
Date: Sat Sep  8 18:35:15 2012
New Revision: 240246
URL: http://svn.freebsd.org/changeset/base/240246

Log:
  Move the checks for td_pinned, td_critnest, TDP_NOFAULTING and
  TDP_NOSLEEPING leaking from syscallret() to userret() so that also
  trap handling is covered. Also, the check on td_locks is not duplicated
  between the two functions.
  
  Reported by:  avg
  Reviewed by:  kib
  MFC after:    1 week

Modified:
  head/sys/kern/subr_syscall.c
  head/sys/kern/subr_trap.c

Modified: head/sys/kern/subr_syscall.c
==============================================================================
--- head/sys/kern/subr_syscall.c        Sat Sep  8 18:29:53 2012        
(r240245)
+++ head/sys/kern/subr_syscall.c        Sat Sep  8 18:35:15 2012        
(r240246)
@@ -172,27 +172,6 @@ syscallret(struct thread *td, int error,
        p = td->td_proc;
 
        /*
-        * Check for misbehavior.
-        */
-       WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning",
-           syscallname(p, sa->code));
-       KASSERT(td->td_critnest == 0,
-           ("System call %s returning in a critical section",
-           syscallname(p, sa->code)));
-       KASSERT(td->td_locks == 0,
-           ("System call %s returning with %d locks held",
-            syscallname(p, sa->code), td->td_locks));
-       KASSERT((td->td_pflags & TDP_NOFAULTING) == 0,
-           ("System call %s returning with pagefaults disabled",
-            syscallname(p, sa->code)));
-       KASSERT((td->td_pflags & TDP_NOSLEEPING) == 0,
-           ("System call %s returning with sleep disabled",
-            syscallname(p, sa->code)));
-       KASSERT(td->td_pinned == 0,
-           ("System call %s returning with pinned thread",
-            syscallname(p, sa->code)));
-
-       /*
         * Handle reschedule and other end-of-syscall issues
         */
        userret(td, td->td_frame);

Modified: head/sys/kern/subr_trap.c
==============================================================================
--- head/sys/kern/subr_trap.c   Sat Sep  8 18:29:53 2012        (r240245)
+++ head/sys/kern/subr_trap.c   Sat Sep  8 18:35:15 2012        (r240246)
@@ -139,8 +139,21 @@ userret(struct thread *td, struct trapfr
 #ifdef XEN
        PT_UPDATES_FLUSH();
 #endif
+
+       /*
+        * Check for misbehavior.
+        */
+       WITNESS_WARN(WARN_PANIC, NULL, "userret: returning");
+       KASSERT(td->td_critnest == 0,
+           ("userret: Returning in a critical section"));
        KASSERT(td->td_locks == 0,
-           ("userret: Returning with %d locks held.", td->td_locks));
+           ("userret: Returning with %d locks held", td->td_locks));
+       KASSERT((td->td_pflags & TDP_NOFAULTING) == 0,
+           ("userret: Returning with pagefaults disabled"));
+       KASSERT((td->td_pflags & TDP_NOSLEEPING) == 0,
+           ("userret: Returning with sleep disabled"));
+       KASSERT(td->td_pinned == 0,
+           ("userret: Returning with with pinned thread"));
 #ifdef VIMAGE
        /* Unfortunately td_vnet_lpush needs VNET_DEBUG. */
        VNET_ASSERT(curvnet == NULL,
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to