• Petr Tesarik's avatar
    swiotlb: do not free decrypted pages if dynamic · a5e3b127
    Petr Tesarik authored
    Fix these two error paths:
    
    1. When set_memory_decrypted() fails, pages may be left fully or partially
       decrypted.
    
    2. Decrypted pages may be freed if swiotlb_alloc_tlb() determines that the
       physical address is too high.
    
    To fix the first issue, call set_memory_encrypted() on the allocated region
    after a failed decryption attempt. If that also fails, leak the pages.
    
    To fix the second issue, check that the TLB physical address is below the
    requested limit before decrypting.
    
    Let the caller differentiate between unsuitable physical address (=> retry
    from a lower zone) and allocation failures (=> no point in retrying).
    
    Cc: stable@vger.kernel.org
    Fixes: 79636caa
    
     ("swiotlb: if swiotlb is full, fall back to a transient memory pool")
    Signed-off-by: default avatarPetr Tesarik <petr.tesarik1@huawei-partners.com>
    Reviewed-by: default avatarRick Edgecombe <rick.p.edgecombe@intel.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    a5e3b127
swiotlb.c 46.9 KB