|
@@ -677,8 +677,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))
|