Improve sigonstack().

Avoid relying on unsigned overflow for the test.
Simplify expressions to avoid duplicate check for the range.
Style.
Add herald comment.

Reviewed by:	jhb
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D18361
This commit is contained in:
Konstantin Belousov 2018-11-27 19:50:58 +00:00
parent b307954481
commit affd918514

View File

@ -615,20 +615,25 @@ signotify(struct thread *td)
}
}
/*
* Returns 1 (true) if altstack is configured for the thread, and the
* passed stack bottom address falls into the altstack range. Handles
* the 43 compat special case where the alt stack size is zero.
*/
int
sigonstack(size_t sp)
{
struct thread *td = curthread;
struct thread *td;
return ((td->td_pflags & TDP_ALTSTACK) ?
td = curthread;
if ((td->td_pflags & TDP_ALTSTACK) == 0)
return (0);
#if defined(COMPAT_43)
((td->td_sigstk.ss_size == 0) ?
(td->td_sigstk.ss_flags & SS_ONSTACK) :
((sp - (size_t)td->td_sigstk.ss_sp) < td->td_sigstk.ss_size))
#else
((sp - (size_t)td->td_sigstk.ss_sp) < td->td_sigstk.ss_size)
if (td->td_sigstk.ss_size == 0)
return ((td->td_sigstk.ss_flags & SS_ONSTACK) != 0);
#endif
: 0);
return (sp >= (size_t)td->td_sigstk.ss_sp &&
sp < td->td_sigstk.ss_size + (size_t)td->td_sigstk.ss_sp);
}
static __inline int