• Sean Christopherson's avatar
    crypto: ccp: Detect and reject "invalid" addresses destined for PSP · 74c1f136
    Sean Christopherson authored
    Explicitly reject using pointers that are not virt_to_phys() friendly
    as the source for SEV commands that are sent to the PSP.  The PSP works
    with physical addresses, and __pa()/virt_to_phys() will not return the
    correct address in these cases, e.g. for a vmalloc'd pointer.  At best,
    the bogus address will cause the command to fail, and at worst lead to
    system instability.
    
    While it's unlikely that callers will deliberately use a bad pointer for
    SEV buffers, a caller can easily use a vmalloc'd pointer unknowingly when
    running with CONFIG_VMAP_STACK=y as it's not obvious that putting the
    command buffers on the stack would be bad.  The command buffers are
    relative  small and easily fit on the stack, and the APIs to do not
    document that the incoming pointer must be a physically contiguous,
    __pa() friendly pointer.
    
    Cc: Brijesh Singh <brijesh.singh@amd.com>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Fixes: 200664d5 ("crypto: ccp: Add Secure Encrypted Virtualization (SEV) command support")
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20210406224952.4177376-3-seanjc@google.com>
    Reviewed-by: default avatarBrijesh Singh <brijesh.singh@amd.com>
    Acked-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    74c1f136
sev-dev.c 26.8 KB