2019-10-26 03:26:07

by Zhenzhong Duan

[permalink] [raw]
Subject: [PATCH 2/5] KVM: add a check to ensure grow start value is nonzero

vcpu->halt_poll_ns could be zeroed in certain cases (e.g. by
halt_poll_ns_shrink). If halt_poll_ns_grow_start is zero,
vcpu->halt_poll_ns will never be larger than zero.

Signed-off-by: Zhenzhong Duan <[email protected]>
---
virt/kvm/kvm_main.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 2ca2979..1b6fe3b 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -2266,6 +2266,13 @@ static void grow_halt_poll_ns(struct kvm_vcpu *vcpu)
goto out;

val *= grow;
+
+ /*
+ * vcpu->halt_poll_ns needs a nonzero start point to grow if it's zero.
+ */
+ if (!grow_start)
+ grow_start = 1;
+
if (val < grow_start)
val = grow_start;

--
1.8.3.1


2019-11-11 13:51:55

by Paolo Bonzini

[permalink] [raw]
Subject: Re: [PATCH 2/5] KVM: add a check to ensure grow start value is nonzero

On 26/10/19 05:23, Zhenzhong Duan wrote:
> vcpu->halt_poll_ns could be zeroed in certain cases (e.g. by
> halt_poll_ns_shrink). If halt_poll_ns_grow_start is zero,
> vcpu->halt_poll_ns will never be larger than zero.
>
> Signed-off-by: Zhenzhong Duan <[email protected]>
> ---
> virt/kvm/kvm_main.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 2ca2979..1b6fe3b 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -2266,6 +2266,13 @@ static void grow_halt_poll_ns(struct kvm_vcpu *vcpu)
> goto out;
>
> val *= grow;
> +
> + /*
> + * vcpu->halt_poll_ns needs a nonzero start point to grow if it's zero.
> + */
> + if (!grow_start)
> + grow_start = 1;
> +
> if (val < grow_start)
> val = grow_start;
>
>

Zeroing grow_start will simply disable halt polling. Is that a problem?

Paolo