net: orphan frags on stand-alone ptype in dev_queue_xmit_nit
Subsystems (2)
PATCH v2 1/1 net: orphan frags on stand-alone ptype in dev_queue_xmit_nit
Zerocopy skbs frags are copied when the skb is looped to a local sock. Commit 1080e512d44d ("net: orphan frags on receive") introduced calls to skb_orphan_frags to deliver_skb and __netif_receive_skb for this.
With msg_zerocopy, these skbs can also exist in the tx path and thus loop from dev_queue_xmit_nit. This already calls deliver_skb in its loop. But it does not orphan before a separate pt_prev->func().
Add the missing skb_orphan_frags_rx.
Changes
v1->v2: handle skb_orphan_frags_rx failure
--- net/core/dev.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
net/core/dev.c +6 -2
@@ -1948,8 +1948,12 @@ void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev) goto again; } out_unlock: -if (pt_prev) - pt_prev->func (skb2, skb->dev, pt_prev, skb->dev); +if (pt_prev) { +if (!skb_orphan_frags_rx (skb2,GFP_ATOMIC )) + pt_prev->func (skb2, skb->dev, pt_prev, skb->dev); +else +kfree_skb (skb2); + }rcu_read_unlock (); }EXPORT_SYMBOL_GPL (dev_queue_xmit_nit);
Signature · 1 line
2.14.1.821.g8fa685d3b7-goog
Quoted 10 lines · Willem de Bruijn
Zerocopy skbs frags are copied when the skb is looped to a local sock. Commit
1080e512d44d("net: orphan frags on receive") introduced calls toskb_orphan_fragstodeliver_skband__netif_receive_skbfor this.With
msg_zerocopy, these skbs can also exist in the tx path and thus loop fromdev_queue_xmit_nit. This already callsdeliver_skbin its loop. But it does not orphan before a separatept_prev->func().Add the missing
skb_orphan_frags_rx.
Quoted 8 lines
Changes
v1->v2: handleskb_orphan_frags_rxfailureFixes 1f8b977ab32d ("sock: enable MSG_ZEROCOPY")Signed-off-by Willem de Bruijn <[email protected]>--- net/core/dev.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
David Miller
maintainerFrom: Willem de Bruijn <[email protected]>
Date: Fri, 22 Sep 2017 19:42:37 -0400
Quoted 8 lines
Zerocopy skbs frags are copied when the skb is looped to a local sock. Commit
1080e512d44d("net: orphan frags on receive") introduced calls toskb_orphan_fragstodeliver_skband__netif_receive_skbfor this.With
msg_zerocopy, these skbs can also exist in the tx path and thus loop fromdev_queue_xmit_nit. This already callsdeliver_skbin its loop. But it does not orphan before a separatept_prev->func().
Quoted 7 lines
Add the missing
skb_orphan_frags_rx.Changes
v1->v2: handleskb_orphan_frags_rxfailureFixes 1f8b977ab32d ("sock: enable MSG_ZEROCOPY")Signed-off-by Willem de Bruijn <[email protected]>
Applied and queued up for -stable, thanks.