On Tue, May 09, 2023 at 06:25:42AM -0700, Christoph Hellwig wrote: > On Sun, May 07, 2023 at 09:58:44PM +0800, Ruihan Li wrote: > > static int usbdev_mmap(struct file *file, struct vm_area_struct *vma) > > { > > // ... > > mem = usb_alloc_coherent(ps->dev, size, GFP_USER | __GFP_NOWARN, > > &dma_handle); > > // ... > > if (hcd->localmem_pool || !hcd_uses_dma(hcd)) { > > if (remap_pfn_range(vma, vma->vm_start, > > virt_to_phys(usbm->mem) >> PAGE_SHIFT, > > usb_alloc_coherent and up in the DMA coherent allocator (usually > anyway), and you absolutely must never do a virt_to_phys or virt_to_page > on that return value. This code is a buggy as f**k. Odd, you gave it a reviewed-by: in commit a0e710a7def4 ("USB: usbfs: fix mmap dma mismatch") back in 2020 when it was merged as you said that was the way to fix this up. :) Do you have a better way to do it now that is more correct? Did some DMA changes happen that missed this codepath getting fixed up? thanks, gre gk-h