• Peter Gonda's avatar
    virt/sev-guest: Prevent IV reuse in the SNP guest driver · 47894e0f
    Peter Gonda authored
    The AMD Secure Processor (ASP) and an SNP guest use a series of
    AES-GCM keys called VMPCKs to communicate securely with each other.
    The IV to this scheme is a sequence number that both the ASP and the
    guest track.
    
    Currently, this sequence number in a guest request must exactly match
    the sequence number tracked by the ASP. This means that if the guest
    sees an error from the host during a request it can only retry that
    exact request or disable the VMPCK to prevent an IV reuse. AES-GCM
    cannot tolerate IV reuse, see: "Authentication Failures in NIST version
    of GCM" - Antoine Joux et al.
    
    In order to address this, make handle_guest_request() delete the VMPCK
    on any non successful return. To allow userspace querying the cert_data
    length make handle_guest_request() save the number of pages required by
    the host, then have handle_guest_request() retry the request without
    requesting the extended data, then return the number of pages required
    back to userspace.
    
      [ bp: Massage, incorporate Tom's review comments. ]
    
    Fixes: fce96cf0 ("virt: Add SEV-SNP guest driver")
    Reported-by: default avatarPeter Gonda <pgonda@google.com>
    Signed-off-by: default avatarPeter Gonda <pgonda@google.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Reviewed-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
    Cc: stable@kernel.org
    Link: https://lore.kernel.org/r/20221116175558.2373112-1-pgonda@google.com
    47894e0f
sev-guest.c 21.5 KB