Messages in this thread | | | Date | Mon, 15 Jun 2020 08:54:55 +0200 | From | Christoph Hellwig <> | Subject | Re: [patch for-5.8 1/4] dma-direct: always align allocation size in dma_direct_alloc_pages() |
| |
On Thu, Jun 11, 2020 at 12:20:28PM -0700, David Rientjes wrote: > dma_alloc_contiguous() does size >> PAGE_SHIFT and set_memory_decrypted() > works at page granularity. It's necessary to page align the allocation > size in dma_direct_alloc_pages() for consistent behavior. > > This also fixes an issue when arch_dma_prep_coherent() is called on an > unaligned allocation size for dma_alloc_need_uncached() when > CONFIG_DMA_DIRECT_REMAP is disabled but CONFIG_ARCH_HAS_DMA_SET_UNCACHED > is enabled. > > Cc: stable@vger.kernel.org > Signed-off-by: David Rientjes <rientjes@google.com> > --- > kernel/dma/direct.c | 17 ++++++++++------- > 1 file changed, 10 insertions(+), 7 deletions(-) > > diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c > --- a/kernel/dma/direct.c > +++ b/kernel/dma/direct.c > @@ -112,11 +112,12 @@ static inline bool dma_should_free_from_pool(struct device *dev, > struct page *__dma_direct_alloc_pages(struct device *dev, size_t size, > gfp_t gfp, unsigned long attrs) > { > - size_t alloc_size = PAGE_ALIGN(size); > int node = dev_to_node(dev); > struct page *page = NULL; > u64 phys_limit; > > + VM_BUG_ON(!PAGE_ALIGNED(size));
This really should be a WARN_ON_ONCE, but I've fixed this up before applying. I've also added a prep patch to mark __dma_direct_alloc_pages static as part of auditing for other callers.
| |