KVM: x86 emulator: Check segment limits in real mode too
Segment limits are verified in real mode, not just protected mode. Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
Родитель
03ebebeb1f
Коммит
a5625189f6
|
@ -668,8 +668,6 @@ static int __linearize(struct x86_emulate_ctxt *ctxt,
|
|||
|
||||
la = seg_base(ctxt, addr.seg) + addr.ea;
|
||||
switch (ctxt->mode) {
|
||||
case X86EMUL_MODE_REAL:
|
||||
break;
|
||||
case X86EMUL_MODE_PROT64:
|
||||
if (((signed long)la << 16) >> 16 != la)
|
||||
return emulate_gp(ctxt, 0);
|
||||
|
@ -699,7 +697,10 @@ static int __linearize(struct x86_emulate_ctxt *ctxt,
|
|||
goto bad;
|
||||
}
|
||||
cpl = ctxt->ops->cpl(ctxt);
|
||||
rpl = sel & 3;
|
||||
if (ctxt->mode == X86EMUL_MODE_REAL)
|
||||
rpl = 0;
|
||||
else
|
||||
rpl = sel & 3;
|
||||
cpl = max(cpl, rpl);
|
||||
if (!(desc.type & 8)) {
|
||||
/* data segment */
|
||||
|
|
Загрузка…
Ссылка в новой задаче