Benjamin Berg <benjamin@xxxxxxxxxxxxxxxx> writes: > 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> > > --- > > We also verified the (previous) patch internally and it is working well > there now. > > v2: Add proper bounds checking by verifying the length Excellent, thank you Benjamin for working on this. Miri, can I have your ack? I would like to apply this tomorrow so that it makes it still this week's wireless pull request. -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches