Re: [PATCH RFC 5/6] net: orphan frags on receive
From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2012-05-09 15:12:01
On Wed, May 09, 2012 at 02:54:52PM +0100, Ian Campbell wrote:
On Mon, 2012-05-07 at 14:54 +0100, Michael S. Tsirkin wrote:quoted
zero copy packets are normally sent to the outside network, but bridging, tun etc might loop them back to host networking stack. If this happens destructors will never be called, so orphan the frags immediately on receive.I think this deceptively simply patch is actually the meat of the series. It's been a long time since I dug into the bridging code. Am I right that this function is only reached when an SKB is going to be delivered locally and not when forwarding to another port on the bridge? Ian.
I think so - bridge uses netdev_rx_handler_unregister so it does not go through packet handlers.
quoted
Signed-off-by: Michael S. Tsirkin <mst@redhat.com> --- net/core/dev.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)diff --git a/net/core/dev.c b/net/core/dev.c index a2be59f..c0cdc00 100644 --- a/net/core/dev.c +++ b/net/core/dev.c@@ -1630,6 +1630,8 @@ static inline int deliver_skb(struct sk_buff *skb, struct packet_type *pt_prev, struct net_device *orig_dev) { + if (unlikely(skb_orphan_frags(skb, GFP_ATOMIC))) + return -ENOMEM; atomic_inc(&skb->users); return pt_prev->func(skb, skb->dev, pt_prev, orig_dev); }