From fbdb0b778af5cde3c40e2280f6dd8589f1fe4432 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Tue, 25 Nov 2014 12:52:00 +0000 Subject: [PATCH] MFamd64: Check for invalid flags in the machine context in sigreturn() and setcontext(). --- sys/i386/i386/machdep.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index c3af9f62a705..751e73294761 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -1060,6 +1060,11 @@ sys_sigreturn(td, uap) if (error != 0) return (error); ucp = &uc; + if ((ucp->uc_mcontext.mc_flags & ~_MC_FLAG_MASK) != 0) { + uprintf("pid %d (%s): sigreturn mc_flags %x\n", p->p_pid, + td->td_name, ucp->uc_mcontext.mc_flags); + return (EINVAL); + } regs = td->td_frame; eflags = ucp->uc_mcontext.mc_eflags; if (eflags & PSL_VM) { @@ -3858,7 +3863,8 @@ set_mcontext(struct thread *td, const mcontext_t *mcp) int eflags, ret; tp = td->td_frame; - if (mcp->mc_len != sizeof(*mcp)) + if (mcp->mc_len != sizeof(*mcp) || + (mcp->mc_flags & ~_MC_FLAG_MASK) != 0) return (EINVAL); eflags = (mcp->mc_eflags & PSL_USERCHANGE) | (tp->tf_eflags & ~PSL_USERCHANGE);