• Paolo Bonzini's avatar
    KVM: selftests: Fix dynamic generation of configuration names · e39120ab
    Paolo Bonzini authored
    When we dynamically generate a name for a configuration in get-reg-list
    we use strcat() to append to a buffer allocated using malloc() but we
    never initialise that buffer. Since malloc() offers no guarantees
    regarding the contents of the memory it returns this can lead to us
    corrupting, and likely overflowing, the buffer:
    
      vregs: PASS
      vregs+pmu: PASS
      sve: PASS
      sve+pmu: PASS
      vregs+pauth_address+pauth_generic: PASS
      X?vr+gspauth_addre+spauth_generi+pmu: PASS
    
    The bug is that strcat() should have been strcpy(), and that replacement
    would be enough to fix it, but there are other things in the function
    that leave something to be desired.  In particular, an (incorrectly)
    empty config would cause an out of bounds access to c->name[-1].
    Since the strcpy() call relies on c->name[0..len-1] being initialized,
    enforce that invariant throughout the function.
    
    Fixes: 2f9ace5d ("KVM: arm64: selftests: get-reg-list: Introduce vcpu configs")
    Reviewed-by: default avatarAndrew Jones <ajones@ventanamicro.com>
    Co-developed-by: default avatarMark Brown <broonie@kernel.org>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    Message-Id: <20231211-kvm-get-reg-list-str-init-v3-1-6554c71c77b1@kernel.org>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    e39120ab
get-reg-list.c 9.88 KB