• P
    target-i386: get CPL from SS.DPL · 7125c937
    Paolo Bonzini 提交于
    CS.RPL is not equal to the CPL in the few instructions between
    setting CR0.PE and reloading CS.  We get this right in the common
    case, because writes to CR0 do not modify the CPL, but it would
    not be enough if an SMI comes exactly during that brief period.
    Were this to happen, the RSM instruction would erroneously set
    CPL to the low two bits of the real-mode selector; and if they are
    not 00, the next instruction fetch cannot access the code segment
    and causes a triple fault.
    
    However, SS.DPL *is* always equal to the CPL.  In real processors
    (AMD only) there is a weird case of SYSRET setting SS.DPL=SS.RPL
    from the STAR register while forcing CPL=3, but we do not emulate
    that.
    Tested-by: NKevin O'Connor <kevin@koconnor.net>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    7125c937
machine.c 22.8 KB