Benjamin Berg <benjamin@xxxxxxxxxxxxxxxx> wrote: > From: Benjamin Berg <benjamin.berg@xxxxxxxxx> > > The code to lookup the scatter gather table entry assumed that it was > possible to use sg_virt() in order to lookup the DMA address in a mapped > scatter gather table. However, this assumption is incorrect as the DMA > mapping code may merge multiple entries into one. In that case, the DMA > address space may have e.g. two consecutive pages which is correctly > represented by the scatter gather list entry, however the virtual > addresses for these two pages may differ and the relationship cannot be > resolved anymore. > > Avoid this problem entirely by working with the offset into the mapped > area instead of using virtual addresses. With that we only use the DMA > length and DMA address from the scatter gather list entries. The > underlying DMA/IOMMU code is therefore free to merge two entries into > one even if the virtual addresses space for the area is not continuous. > > Fixes: 90db50755228 ("wifi: iwlwifi: use already mapped data when TXing an AMSDU") > Reported-by: Chris Bainbridge <chris.bainbridge@xxxxxxxxx> > Closes: https://lore.kernel.org/r/ZrNRoEbdkxkKFMBi@debian.local > Signed-off-by: Benjamin Berg <benjamin.berg@xxxxxxxxx> > Tested-by: Chris Bainbridge <chris.bainbridge@xxxxxxxxx> Patch applied to wireless.git, thanks. 38c8d02501c0 wifi: iwlwifi: correctly lookup DMA address in SG table -- https://patchwork.kernel.org/project/linux-wireless/patch/20240812110640.460514-1-benjamin@xxxxxxxxxxxxxxxx/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches