x86: Fixes context security
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 23 Mar 2015 18:28:01 +0000 (14:28 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 23 Mar 2015 19:18:55 +0000 (15:18 -0400)
commita027bf8f981e09e9bd5ff241290df2614b02850d
tree364174a23a2db933e3a915eff11cc3442fe3b7b1
parent9e096beae1e5557323ec96cb155863d14a5931cb
x86: Fixes context security

The big thing is that SW contexts are popped with sysret.  On Intel
machines, a non-canonical RIP will trigger a GP in kernel mode.
A user could have manged the RIP of a VC ctx in the VCPD of a preempted
vcore, then done a sys_change_to() to get the kernel to pop the ctx.

For more info, check out:
https://blog.xenproject.org/2012/06/13/the-intel-sysret-privilege-escalation/

While I was here, I also had init_ctx always call secure_ctx.  This
removed some redundant code.  It also enforces gsbase for HW ctxs,
though it was just zeroed a moment before.

Finally, we memset the entire structure for new contexts.  If we used a
smaller context for the init ctx, we could leak some information when we
eventually copy the ctx to procdata.
kern/arch/x86/process64.c