]> Pileus Git - ~andy/linux/blobdiff - arch/x86/kvm/emulate.c
Merge tag 'kvm-3.8-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[~andy/linux] / arch / x86 / kvm / emulate.c
index bba39bfa1c4b03806cf1f42773cd8041f18b8759..a27e763711087df9e095f440b7e6aaf76cfeff5b 100644 (file)
@@ -676,8 +676,9 @@ static int __linearize(struct x86_emulate_ctxt *ctxt,
                                                addr.seg);
                if (!usable)
                        goto bad;
-               /* code segment or read-only data segment */
-               if (((desc.type & 8) || !(desc.type & 2)) && write)
+               /* code segment in protected mode or read-only data segment */
+               if ((((ctxt->mode != X86EMUL_MODE_REAL) && (desc.type & 8))
+                                       || !(desc.type & 2)) && write)
                        goto bad;
                /* unreadable code segment */
                if (!fetch && (desc.type & 8) && !(desc.type & 2))