aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2012-10-14 21:18:37 -0400
committerAlexander Graf <agraf@suse.de>2012-10-30 05:54:58 -0400
commit9f8c8c7812976fbfaf4bb30aaf8f6b001864f20a (patch)
treed2b200398f27d85c4b4b9e2fff24a20f8d5334a9
parentc7b676709c163e12ec161c0593c2c76809c25ff4 (diff)
KVM: PPC: Book3S HV: Allow DTL to be set to address 0, length 0
Commit 55b665b026 ("KVM: PPC: Book3S HV: Provide a way for userspace to get/set per-vCPU areas") includes a check on the length of the dispatch trace log (DTL) to make sure the buffer is at least one entry long. This is appropriate when registering a buffer, but the interface also allows for any existing buffer to be unregistered by specifying a zero address. In this case the length check is not appropriate. This makes the check conditional on the address being non-zero. Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r--arch/powerpc/kvm/book3s_hv.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
index 8b3c470e6cb9..812764c96229 100644
--- a/arch/powerpc/kvm/book3s_hv.c
+++ b/arch/powerpc/kvm/book3s_hv.c
@@ -811,9 +811,8 @@ int kvmppc_set_one_reg(struct kvm_vcpu *vcpu, u64 id, union kvmppc_one_reg *val)
811 addr = val->vpaval.addr; 811 addr = val->vpaval.addr;
812 len = val->vpaval.length; 812 len = val->vpaval.length;
813 r = -EINVAL; 813 r = -EINVAL;
814 if (len < sizeof(struct dtl_entry)) 814 if (addr && (len < sizeof(struct dtl_entry) ||
815 break; 815 !vcpu->arch.vpa.next_gpa))
816 if (addr && !vcpu->arch.vpa.next_gpa)
817 break; 816 break;
818 len -= len % sizeof(struct dtl_entry); 817 len -= len % sizeof(struct dtl_entry);
819 r = set_vpa(vcpu, &vcpu->arch.dtl, addr, len); 818 r = set_vpa(vcpu, &vcpu->arch.dtl, addr, len);