• David Hildenbrand's avatar
    KVM: s390: fix memory overwrites when vx is disabled · 3824f787
    David Hildenbrand authored
    commit 9abc2a08 upstream.
    
    The kernel now always uses vector registers when available, however KVM
    has special logic if support is really enabled for a guest. If support
    is disabled, guest_fpregs.fregs will only contain memory for the fpu.
    The kernel, however, will store vector registers into that area,
    resulting in crazy memory overwrites.
    
    Simply extending that area is not enough, because the format of the
    registers also changes. We would have to do additional conversions, making
    the code even more complex. Therefore let's directly use one place for
    the vector/fpu registers + fpc (in kvm_run). We just have to convert the
    data properly when accessing it. This makes current code much easier.
    
    Please note that vector/fpu registers are now always stored to
    vcpu->run->s.regs.vrs. Although this data is visible to QEMU and
    used for migration, we only guarantee valid values to user space  when
    KVM_SYNC_VRS is set. As that is only the case when we have vector
    register support, we are on the safe side.
    
    Fixes: b5510d9b ("s390/fpu: always enable the vector facility if it is available")
    Cc: stable@vger.kernel.org # v4.4 d9a3a09a s390/kvm: remove dependency on struct save_area definition
    Signed-off-by: default avatarDavid Hildenbrand <dahi@linux.vnet.ibm.com>
    Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    [adopt to d9a3a09a]
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3824f787
kvm-s390.c 69.2 KB