Commit cd072e01d86b3d7adab35de03d242e3938e798df

Authored by bellard
1 parent d3e9db93

fixed null segment validation (aka x86_64 regression bug)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1708 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 8 additions and 1 deletions
target-i386/helper.c
... ... @@ -1986,7 +1986,14 @@ static inline void validate_seg(int seg_reg, int cpl)
1986 1986 {
1987 1987 int dpl;
1988 1988 uint32_t e2;
1989   -
  1989 +
  1990 + /* XXX: on x86_64, we do not want to nullify FS and GS because
  1991 + they may still contain a valid base. I would be interested to
  1992 + know how a real x86_64 CPU behaves */
  1993 + if ((seg_reg == R_FS || seg_reg == R_GS) &&
  1994 + (env->segs[seg_reg].selector & 0xfffc) == 0)
  1995 + return;
  1996 +
1990 1997 e2 = env->segs[seg_reg].flags;
1991 1998 dpl = (e2 >> DESC_DPL_SHIFT) & 3;
1992 1999 if (!(e2 & DESC_CS_MASK) || !(e2 & DESC_C_MASK)) {
... ...