KVM: PPC: Book3S HV: Allow negative offsets to real-mode hcall handlers
authorPaul Mackerras <paulus@samba.org>
Mon, 8 Jul 2013 10:09:53 +0000 (20:09 +1000)
committerAlexander Graf <agraf@suse.de>
Wed, 10 Jul 2013 11:14:16 +0000 (13:14 +0200)
The table of offsets to real-mode hcall handlers in book3s_hv_rmhandlers.S
can contain negative values, if some of the handlers end up before the
table in the vmlinux binary.  Thus we need to use a sign-extending load
to read the values in the table rather than a zero-extending load.
Without this, the host crashes when the guest does one of the hcalls
with negative offsets, due to jumping to a bogus address.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
arch/powerpc/kvm/book3s_hv_rmhandlers.S

index b02f91e4c70dc5341bc450fa68f22b102ccd462e..60dce5bfab3fe25e7df25603719f712b0a1c88a6 100644 (file)
@@ -1381,7 +1381,7 @@ hcall_try_real_mode:
        cmpldi  r3,hcall_real_table_end - hcall_real_table
        bge     guest_exit_cont
        LOAD_REG_ADDR(r4, hcall_real_table)
-       lwzx    r3,r3,r4
+       lwax    r3,r3,r4
        cmpwi   r3,0
        beq     guest_exit_cont
        add     r3,r3,r4