fixed null segment validation (aka x86_64 regression bug)
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sat, 17 Dec 2005 02:59:58 +0000 (02:59 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sat, 17 Dec 2005 02:59:58 +0000 (02:59 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1708 c046a42c-6fe2-441c-8c8c-71466251a162

target-i386/helper.c

index 531ba1b..a649242 100644 (file)
@@ -1986,7 +1986,14 @@ static inline void validate_seg(int seg_reg, int cpl)
 {
     int dpl;
     uint32_t e2;
-    
+
+    /* XXX: on x86_64, we do not want to nullify FS and GS because
+       they may still contain a valid base. I would be interested to
+       know how a real x86_64 CPU behaves */
+    if ((seg_reg == R_FS || seg_reg == R_GS) && 
+        (env->segs[seg_reg].selector & 0xfffc) == 0)
+        return;
+
     e2 = env->segs[seg_reg].flags;
     dpl = (e2 >> DESC_DPL_SHIFT) & 3;
     if (!(e2 & DESC_CS_MASK) || !(e2 & DESC_C_MASK)) {