• Will Deacon's avatar
    KVM: arm64: Ensure 'params' is initialised when looking up sys register · 1ce74e96
    Will Deacon authored
    Commit 4b927b94 ("KVM: arm/arm64: vgic: Introduce find_reg_by_id()")
    introduced 'find_reg_by_id()', which looks up a system register only if
    the 'id' index parameter identifies a valid system register. As part of
    the patch, existing callers of 'find_reg()' were ported over to the new
    interface, but this breaks 'index_to_sys_reg_desc()' in the case that the
    initial lookup in the vCPU target table fails because we will then call
    into 'find_reg()' for the system register table with an uninitialised
    'param' as the key to the lookup.
    
    GCC 10 is bright enough to spot this (amongst a tonne of false positives,
    but hey!):
    
      | arch/arm64/kvm/sys_regs.c: In function ‘index_to_sys_reg_desc.part.0.isra’:
      | arch/arm64/kvm/sys_regs.c:983:33: warning: ‘params.Op2’ may be used uninitialized in this function [-Wmaybe-uninitialized]
      |   983 |   (u32)(x)->CRn, (u32)(x)->CRm, (u32)(x)->Op2);
      | [...]
    
    Revert the hunk of 4b927b94 which breaks 'index_to_sys_reg_desc()' so
    that the old behaviour of checking the index upfront is restored.
    
    Fixes: 4b927b94 ("KVM: arm/arm64: vgic: Introduce find_reg_by_id()")
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20191212094049.12437-1-will@kernel.org
    1ce74e96
sys_regs.c 75.9 KB