summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Martin <Dave.Martin@arm.com>2019-04-11 17:37:38 +0200
committerMarc Zyngier <marc.zyngier@arm.com>2019-04-18 18:14:01 +0200
commit55ffad3b636a32dae03752078f4a0846bfd3a151 (patch)
treef0cf6afc486239d4b1d7608d6d529b2ebffc1083
parentKVM: arm64/sve: Make register ioctl access errors more consistent (diff)
downloadlinux-55ffad3b636a32dae03752078f4a0846bfd3a151.tar.xz
linux-55ffad3b636a32dae03752078f4a0846bfd3a151.zip
KVM: arm64/sve: WARN when avoiding divide-by-zero in sve_reg_to_region()
sve_reg_to_region() currently passes the result of vcpu_sve_state_size() to array_index_nospec(), effectively leading to a divide / modulo operation. Currently the code bails out and returns -EINVAL if vcpu_sve_state_size() turns out to be zero, in order to avoid going ahead and attempting to divide by zero. This is reasonable, but it should only happen if the kernel contains some other bug that allowed this code to be reached without the vcpu having been properly initialised. To make it clear that this is a defence against bugs rather than something that the user should be able to trigger, this patch marks the check with WARN_ON(). Suggested-by: Andrew Jones <drjones@redhat.com> Signed-off-by: Dave Martin <Dave.Martin@arm.com> Reviewed-by: Andrew Jones <drjones@redhat.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
-rw-r--r--arch/arm64/kvm/guest.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
index e45a042c0628..73044e3f8706 100644
--- a/arch/arm64/kvm/guest.c
+++ b/arch/arm64/kvm/guest.c
@@ -371,7 +371,7 @@ static int sve_reg_to_region(struct sve_state_reg_region *region,
}
sve_state_size = vcpu_sve_state_size(vcpu);
- if (!sve_state_size)
+ if (WARN_ON(!sve_state_size))
return -EINVAL;
region->koffset = array_index_nospec(reqoffset, sve_state_size);