• Christian Borntraeger's avatar
    KVM: s390: reject invalid modes for runtime instrumentation · a5efb6b6
    Christian Borntraeger authored
    Usually a validity intercept is a programming error of the host
    because of invalid entries in the state description.
    We can get a validity intercept if the mode of the runtime
    instrumentation control block is wrong. As the host does not know
    which modes are valid, this can be used by userspace to trigger
    a WARN.
    Instead of printing a WARN let's return an error to userspace as
    this can only happen if userspace provides a malformed initial
    value (e.g. on migration). The kernel should never warn on bogus
    input. Instead let's log it into the s390 debug feature.
    
    While at it, let's return -EINVAL for all validity intercepts as
    this will trigger an error in QEMU like
    
    error: kvm run failed Invalid argument
    PSW=mask 0404c00180000000 addr 000000000063c226 cc 00
    R00=000000000000004f R01=0000000000000004 R02=0000000000760005 R03=000000007fe0a000
    R04=000000000064ba2a R05=000000049db73dd0 R06=000000000082c4b0 R07=0000000000000041
    R08=0000000000000002 R09=000003e0804042a8 R10=0000000496152c42 R11=000000007fe0afb0
    [...]
    
    This will avoid an endless loop of validity intercepts.
    
    Cc: stable@vger.kernel.org # v4.5+
    Fixes: c6e5f166 ("KVM: s390: implement the RI support of guest")
    Acked-by: default avatarFan Zhang <zhangfan@linux.vnet.ibm.com>
    Reviewed-by: default avatarPierre Morel <pmorel@linux.vnet.ibm.com>
    Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    a5efb6b6
intercept.c 10.6 KB