• Fabiano Rosas's avatar
    KVM: PPC: mmio: Reject instructions that access more than mmio.data size · 3f831504
    Fabiano Rosas authored
    The MMIO interface between the kernel and userspace uses a structure
    that supports a maximum of 8-bytes of data. Instructions that access
    more than that need to be emulated in parts.
    
    We currently don't have generic support for splitting the emulation in
    parts and each set of instructions needs to be explicitly included.
    
    There's already an error message being printed when a load or store
    exceeds the mmio.data buffer but we don't fail the emulation until
    later at kvmppc_complete_mmio_load and even then we allow userspace to
    make a partial copy of the data, which ends up overwriting some fields
    of the mmio structure.
    
    This patch makes the emulation fail earlier at kvmppc_handle_load|store,
    which will send a Program interrupt to the guest. This is better than
    allowing the guest to proceed with partial data.
    
    Note that this was caught in a somewhat artificial scenario using
    quadword instructions (lq/stq), there's no account of an actual guest
    in the wild running instructions that are not properly emulated.
    
    (While here, remove the "bad MMIO" messages. The caller already has an
    error message.)
    Signed-off-by: default avatarFabiano Rosas <farosas@linux.ibm.com>
    Reviewed-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Reviewed-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220125215655.1026224-4-farosas@linux.ibm.com
    3f831504
powerpc.c 56.4 KB