On 26.06.2012, at 16:06, Cornelia Huck wrote:
> From: Heiko Carstens <[email protected]>
>
> If an invalid parameter is passed or the addressed cpu is in an
> incorrect state sigp set prefix will store a status.
> This status must only have bits set as defined by the architecture.
> The current kvm implementation missed to clear bits and also did
> not set the intended status bit ("and" instead of "or" operation).
>
> Signed-off-by: Heiko Carstens <[email protected]>
> Signed-off-by: Cornelia Huck <[email protected]>
What was the net effect of this for a guest? Any problems rising from it?
Alex
> ---
> arch/s390/kvm/sigp.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c
> index caccc0e..ca544d5 100644
> --- a/arch/s390/kvm/sigp.c
> +++ b/arch/s390/kvm/sigp.c
> @@ -207,6 +207,7 @@ static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16
> cpu_addr, u32 address,
> address = address & 0x7fffe000u;
> if (copy_from_guest_absolute(vcpu, &tmp, address, 1) ||
> copy_from_guest_absolute(vcpu, &tmp, address + PAGE_SIZE, 1)) {
> + *reg &= 0xffffffff00000000UL;
> *reg |= SIGP_STATUS_INVALID_PARAMETER;
> return 1; /* invalid parameter */
> }
> @@ -220,8 +221,9 @@ static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16
> cpu_addr, u32 address,
> li = fi->local_int[cpu_addr];
>
> if (li == NULL) {
> + *reg &= 0xffffffff00000000UL;
> + *reg |= SIGP_STATUS_INCORRECT_STATE;
> rc = 1; /* incorrect state */
> - *reg &= SIGP_STATUS_INCORRECT_STATE;
> kfree(inti);
> goto out_fi;
> }
> @@ -229,8 +231,9 @@ static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16
> cpu_addr, u32 address,
> spin_lock_bh(&li->lock);
> /* cpu must be in stopped state */
> if (!(atomic_read(li->cpuflags) & CPUSTAT_STOPPED)) {
> + *reg &= 0xffffffff00000000UL;
> + *reg |= SIGP_STATUS_INCORRECT_STATE;
> rc = 1; /* incorrect state */
> - *reg &= SIGP_STATUS_INCORRECT_STATE;
> kfree(inti);
> goto out_li;
> }
> --
> 1.7.10.4
>
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html