• Dan Williams's avatar
    virt: sevguest: Fix passing a stack buffer as a scatterlist target · db10cb9b
    Dan Williams authored
    CONFIG_DEBUG_SG highlights that get_{report,ext_report,derived_key)()}
    are passing stack buffers as the @req_buf argument to
    handle_guest_request(), generating a Call Trace of the following form:
    
        WARNING: CPU: 0 PID: 1175 at include/linux/scatterlist.h:187 enc_dec_message+0x518/0x5b0 [sev_guest]
        [..]
        Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/26/2023
        RIP: 0010:enc_dec_message+0x518/0x5b0 [sev_guest]
        Call Trace:
         <TASK>
        [..]
         handle_guest_request+0x135/0x520 [sev_guest]
         get_ext_report+0x1ec/0x3e0 [sev_guest]
         snp_guest_ioctl+0x157/0x200 [sev_guest]
    
    Note that the above Call Trace was with the DEBUG_SG BUG_ON()s converted
    to WARN_ON()s.
    
    This is benign as long as there are no hardware crypto accelerators
    loaded for the aead cipher, and no subsequent dma_map_sg() is performed
    on the scatterlist. However, sev-guest can not assume the presence of
    an aead accelerator nor can it assume that CONFIG_DEBUG_SG is disabled.
    
    Resolve this bug by allocating virt_addr_valid() memory, similar to the
    other buffers am @snp_dev instance carries, to marshal requests from
    user buffers to kernel buffers.
    Reported-by: default avatarPeter Gonda <pgonda@google.com>
    Closes: http://lore.kernel.org/r/CAMkAt6r2VPPMZ__SQfJse8qWsUyYW3AgYbOUVM0S_Vtk=KvkxQ@mail.gmail.com
    Fixes: fce96cf0 ("virt: Add SEV-SNP guest driver")
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Cc: Dionna Glaze <dionnaglaze@google.com>
    Cc: Jeremi Piotrowski <jpiotrowski@linux.microsoft.com>
    Tested-by: default avatarKuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Reviewed-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    db10cb9b
sev-guest.c 23.7 KB