• Avi Kivity's avatar
    KVM: x86 emulator: use stack size attribute to mask rsp in stack ops · 5ad105e5
    Avi Kivity authored
    The sub-register used to access the stack (sp, esp, or rsp) is not
    determined by the address size attribute like other memory references,
    but by the stack segment's B bit (if not in x86_64 mode).
    
    Fix by using the existing stack_mask() to figure out the correct mask.
    
    This long-existing bug was exposed by a combination of a27685c3
    (emulate invalid guest state by default), which causes many more
    instructions to be emulated, and a seabios change (possibly a bug) which
    causes the high 16 bits of esp to become polluted across calls to real
    mode software interrupts.
    Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
    Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
    5ad105e5
emulate.c 118 KB