on intel processors, a general protection exception is fired if a non-canonical address is loaded into PC during SYSRET. this will cause the kernel to panic.
see http://www.kb.cert.org/vuls/id/649219 and the intel software developer manual for more information.
* Address spaces. User:
*/
#define UTZERO (0x0000000000200000ull) /* first address in user text */
+#define UADDRMASK (0x00007fffffffffffull) /* canonical address mask */
#define TSTKTOP (0x00007ffffffff000ull)
-#define USTKSIZE (16*MiB) /* size of user stack */
-#define USTKTOP (TSTKTOP-USTKSIZE) /* end of new stack in sysexec */
+#define USTKSIZE (16*MiB) /* size of user stack */
+#define USTKTOP (TSTKTOP-USTKSIZE) /* end of new stack in sysexec */
/*
* Address spaces. Kernel, sorted by address.
if(ureg->gs != UDSEL)
ureg->gs = 0;
ureg->flags = (ureg->flags & 0x00ff) | (flags & 0xff00);
+ ureg->pc &= UADDRMASK;
}
static void