diff options
| author | kolya <kolya> | 2008-09-24 01:48:31 +0000 | 
|---|---|---|
| committer | kolya <kolya> | 2008-09-24 01:48:31 +0000 | 
| commit | c7317d4dc74bcb1d0e939c6b06a724fce1510a4e (patch) | |
| tree | db061a7ee7430ee83da28632822bb93773dd0553 | |
| parent | adcd16c3f7588b4a28d37495f05e94278c9e3a1e (diff) | |
| download | xv6-labs-c7317d4dc74bcb1d0e939c6b06a724fce1510a4e.tar.gz xv6-labs-c7317d4dc74bcb1d0e939c6b06a724fce1510a4e.tar.bz2 xv6-labs-c7317d4dc74bcb1d0e939c6b06a724fce1510a4e.zip | |
always save and restore %fs, %gs to ensure old segment entries are never
accessible to user from the hidden CPU segment registers.
| -rw-r--r-- | trapasm.S | 4 | ||||
| -rw-r--r-- | x86.h | 12 | 
2 files changed, 12 insertions, 4 deletions
| @@ -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;  }; | 
