提交 c7317d4d 创建 作者: kolya's avatar kolya

always save and restore %fs, %gs to ensure old segment entries are never

accessible to user from the hidden CPU segment registers.
上级 adcd16c3
......@@ -8,6 +8,8 @@ alltraps:
# Build trap frame.
pushl %ds
pushl %es
pushl %fs
pushl %gs
pushal
# Set up data segments.
......@@ -24,6 +26,8 @@ alltraps:
.globl trapret
trapret:
popal
popl %gs
popl %fs
popl %es
popl %ds
addl $0x8, %esp # trapno and errcode
......
......@@ -135,21 +135,25 @@ struct trapframe {
uint eax;
// rest of trap frame
ushort es;
ushort gs;
ushort padding1;
ushort ds;
ushort fs;
ushort padding2;
ushort es;
ushort padding3;
ushort ds;
ushort padding4;
uint trapno;
// below here defined by x86 hardware
uint err;
uint eip;
ushort cs;
ushort padding3;
ushort padding5;
uint eflags;
// below here only when crossing rings, such as from user to kernel
uint esp;
ushort ss;
ushort padding4;
ushort padding6;
};
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论