Message ID | 20210913180246.193388-1-jouni@codeaurora.org (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Kalle Valo |
Headers | show |
Series | [1/5] ath11k: Change DMA_FROM_DEVICE to DMA_TO_DEVICE when map reinjected packets | expand |
> diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c > index 90da56316e7e..0c27eead3e02 100644 > --- a/drivers/net/wireless/ath/ath11k/dp_rx.c > +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c > @@ -3434,7 +3434,7 @@ static int ath11k_dp_rx_h_defrag_reo_reinject(struct ath11k *ar, struct dp_rx_ti > > paddr = dma_map_single(ab->dev, defrag_skb->data, > defrag_skb->len + skb_tailroom(defrag_skb), > - DMA_FROM_DEVICE); > + DMA_TO_DEVICE); > if (dma_mapping_error(ab->dev, paddr)) > return -ENOMEM; > Need to update this line too? err_unmap_dma: dma_unmap_single(ab->dev, paddr, defrag_skb->len + skb_tailroom(defrag_skb), DMA_FROM_DEVICE); Thanks, Peter
Jouni Malinen <jouni@codeaurora.org> wrote: > For fragmented packets, ath11k reassembles each fragment as a normal > packet and then reinjects it into HW ring. In this case, the DMA > direction should be DMA_TO_DEVICE, not DMA_FROM_DEVICE, otherwise > invalid payload will be reinjected to HW and then delivered to host. > What is more, since arbitrary memory could be allocated to the frame, we > don't know what kind of data is contained in the buffer reinjected. > Thus, as a bad result, private info may be leaked. > > Note that this issue is only found on Intel platform. > > Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1 > Signed-off-by: Baochen Qiang <bqiang@codeaurora.org> > Signed-off-by: Jouni Malinen <jouni@codeaurora.org> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Dropping due to the issue Peter found. Patch set to Changes Requested.
diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c index 90da56316e7e..0c27eead3e02 100644 --- a/drivers/net/wireless/ath/ath11k/dp_rx.c +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c @@ -3434,7 +3434,7 @@ static int ath11k_dp_rx_h_defrag_reo_reinject(struct ath11k *ar, struct dp_rx_ti paddr = dma_map_single(ab->dev, defrag_skb->data, defrag_skb->len + skb_tailroom(defrag_skb), - DMA_FROM_DEVICE); + DMA_TO_DEVICE); if (dma_mapping_error(ab->dev, paddr)) return -ENOMEM;