diff options
author | Paul Mackerras <paulus@samba.org> | 2013-07-08 20:09:53 +1000 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2013-07-10 13:14:16 +0200 |
commit | 4baa1d871c8c959084aa5367a9bf211f383941e5 (patch) | |
tree | 830c7b99cf615740fb9846e4c1a94bb3d2655671 | |
parent | 5448050124d9d289bc2f5177318c68c0484ca413 (diff) | |
download | op-kernel-dev-4baa1d871c8c959084aa5367a9bf211f383941e5.zip op-kernel-dev-4baa1d871c8c959084aa5367a9bf211f383941e5.tar.gz |
KVM: PPC: Book3S HV: Allow negative offsets to real-mode hcall handlers
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>
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index b02f91e..60dce5b 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S @@ -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 |