KVM: x86 emulator: allow loading null SS in long mode
Null SS is valid in long mode; allow loading it. Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
6d6eede4a0
commit
79d5b4c3cd
@ -1324,8 +1324,14 @@ static int load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
|
|||||||
goto load;
|
goto load;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NULL selector is not valid for TR, CS and SS */
|
rpl = selector & 3;
|
||||||
if ((seg == VCPU_SREG_CS || seg == VCPU_SREG_SS || seg == VCPU_SREG_TR)
|
cpl = ctxt->ops->cpl(ctxt);
|
||||||
|
|
||||||
|
/* NULL selector is not valid for TR, CS and SS (except for long mode) */
|
||||||
|
if ((seg == VCPU_SREG_CS
|
||||||
|
|| (seg == VCPU_SREG_SS
|
||||||
|
&& (ctxt->mode != X86EMUL_MODE_PROT64 || rpl != cpl))
|
||||||
|
|| seg == VCPU_SREG_TR)
|
||||||
&& null_selector)
|
&& null_selector)
|
||||||
goto exception;
|
goto exception;
|
||||||
|
|
||||||
@ -1352,9 +1358,7 @@ static int load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
|
|||||||
goto exception;
|
goto exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl = selector & 3;
|
|
||||||
dpl = seg_desc.dpl;
|
dpl = seg_desc.dpl;
|
||||||
cpl = ctxt->ops->cpl(ctxt);
|
|
||||||
|
|
||||||
switch (seg) {
|
switch (seg) {
|
||||||
case VCPU_SREG_SS:
|
case VCPU_SREG_SS:
|
||||||
|
Loading…
Reference in New Issue
Block a user