• Robin Murphy's avatar
    dma-direct: don't over-decrypt memory · 4a37f3dd
    Robin Murphy authored
    The original x86 sev_alloc() only called set_memory_decrypted() on
    memory returned by alloc_pages_node(), so the page order calculation
    fell out of that logic. However, the common dma-direct code has several
    potential allocators, not all of which are guaranteed to round up the
    underlying allocation to a power-of-two size, so carrying over that
    calculation for the encryption/decryption size was a mistake. Fix it by
    rounding to a *number* of pages, rather than an order.
    
    Until recently there was an even worse interaction with DMA_DIRECT_REMAP
    where we could have ended up decrypting part of the next adjacent
    vmalloc area, only averted by no architecture actually supporting both
    configs at once. Don't ask how I found that one out...
    
    Fixes: c10f07aa ("dma/direct: Handle force decryption for DMA coherent buffers in common code")
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Acked-by: default avatarDavid Rientjes <rientjes@google.com>
    4a37f3dd
direct.c 16.9 KB