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
This commit is contained in:
parent
1e61b37b3f
commit
7f498fac4a
@ -171,27 +171,6 @@ syscallret(struct thread *td, int error, struct syscall_args *sa __unused)
|
||||
|
||||
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
|
||||
*/
|
||||
|
@ -139,8 +139,21 @@ userret(struct thread *td, struct trapframe *frame)
|
||||
#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,
|
||||
|
Loading…
Reference in New Issue
Block a user