From: Herbert Xu Date: Sun, 14 Oct 2007 07:39:01 +0000 (-0700) Subject: [BRIDGE]: Unshare skb upon entry X-Git-Tag: v2.6.24-rc1~1277^2~36 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b995651e373d6424f81db23f2ec503306dfd7f0;p=linux-2.6 [BRIDGE]: Unshare skb upon entry Due to the special location of the bridging hook, it should never see a shared packet anyway (certainly not with any in-kernel code). So it makes sense to unshare the skb there if necessary as that will greatly simplify the code below it (in particular, netfilter). Signed-off-by: Herbert Xu Signed-off-by: David S. Miller --- diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 3a8a015c92..f8e0a2fa79 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c @@ -126,6 +126,10 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) if (!is_valid_ether_addr(eth_hdr(skb)->h_source)) goto drop; + skb = skb_share_check(skb, GFP_ATOMIC); + if (!skb) + return NULL; + if (unlikely(is_link_local(dest))) { /* Pause frames shouldn't be passed up by driver anyway */ if (skb->protocol == htons(ETH_P_PAUSE))