diff options
| -rw-r--r-- | net/bridge/br_netfilter_hooks.c | 12 | 
1 files changed, 8 insertions, 4 deletions
| diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c index 8a394bd3af83..c8b9bcfe997e 100644 --- a/net/bridge/br_netfilter_hooks.c +++ b/net/bridge/br_netfilter_hooks.c @@ -744,7 +744,7 @@ static int br_nf_dev_queue_xmit(struct sock *sk, struct sk_buff *skb)  		struct brnf_frag_data *data;  		if (br_validate_ipv4(skb)) -			return NF_DROP; +			goto drop;  		IPCB(skb)->frag_max_size = nf_bridge->frag_max_size; @@ -769,7 +769,7 @@ static int br_nf_dev_queue_xmit(struct sock *sk, struct sk_buff *skb)  		struct brnf_frag_data *data;  		if (br_validate_ipv6(skb)) -			return NF_DROP; +			goto drop;  		IP6CB(skb)->frag_max_size = nf_bridge->frag_max_size; @@ -784,12 +784,16 @@ static int br_nf_dev_queue_xmit(struct sock *sk, struct sk_buff *skb)  		if (v6ops)  			return v6ops->fragment(sk, skb, br_nf_push_frag_xmit); -		else -			return -EMSGSIZE; + +		kfree_skb(skb); +		return -EMSGSIZE;  	}  #endif  	nf_bridge_info_free(skb);  	return br_dev_queue_push_xmit(sk, skb); + drop: +	kfree_skb(skb); +	return 0;  }  /* PF_BRIDGE/POST_ROUTING ********************************************/ |