net: add skb frag size accessors
To ease skb->truesize sanitization, its better to be able to localize all references to skb frags size. Define accessors : skb_frag_size() to fetch frag size, and skb_frag_size_{set|add|sub}() to manipulate it. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
此提交包含在:
@@ -656,8 +656,8 @@ vmxnet3_append_frag(struct sk_buff *skb, struct Vmxnet3_RxCompDesc *rcd,
|
||||
|
||||
__skb_frag_set_page(frag, rbi->page);
|
||||
frag->page_offset = 0;
|
||||
frag->size = rcd->len;
|
||||
skb->data_len += frag->size;
|
||||
skb_frag_size_set(frag, rcd->len);
|
||||
skb->data_len += rcd->len;
|
||||
skb->truesize += PAGE_SIZE;
|
||||
skb_shinfo(skb)->nr_frags++;
|
||||
}
|
||||
@@ -745,21 +745,21 @@ vmxnet3_map_pkt(struct sk_buff *skb, struct vmxnet3_tx_ctx *ctx,
|
||||
}
|
||||
|
||||
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
|
||||
struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
|
||||
const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
|
||||
|
||||
tbi = tq->buf_info + tq->tx_ring.next2fill;
|
||||
tbi->map_type = VMXNET3_MAP_PAGE;
|
||||
tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag,
|
||||
0, frag->size,
|
||||
0, skb_frag_size(frag),
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
tbi->len = frag->size;
|
||||
tbi->len = skb_frag_size(frag);
|
||||
|
||||
gdesc = tq->tx_ring.base + tq->tx_ring.next2fill;
|
||||
BUG_ON(gdesc->txd.gen == tq->tx_ring.gen);
|
||||
|
||||
gdesc->txd.addr = cpu_to_le64(tbi->dma_addr);
|
||||
gdesc->dword[2] = cpu_to_le32(dw2 | frag->size);
|
||||
gdesc->dword[2] = cpu_to_le32(dw2 | skb_frag_size(frag));
|
||||
gdesc->dword[3] = 0;
|
||||
|
||||
dev_dbg(&adapter->netdev->dev,
|
||||
|
新增問題並參考
封鎖使用者