|
@@ -744,7 +744,7 @@ static int br_nf_dev_queue_xmit(struct sock *sk, struct sk_buff *skb)
|
|
struct brnf_frag_data *data;
|
|
struct brnf_frag_data *data;
|
|
|
|
|
|
if (br_validate_ipv4(skb))
|
|
if (br_validate_ipv4(skb))
|
|
- return NF_DROP;
|
|
|
|
|
|
+ goto drop;
|
|
|
|
|
|
IPCB(skb)->frag_max_size = nf_bridge->frag_max_size;
|
|
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;
|
|
struct brnf_frag_data *data;
|
|
|
|
|
|
if (br_validate_ipv6(skb))
|
|
if (br_validate_ipv6(skb))
|
|
- return NF_DROP;
|
|
|
|
|
|
+ goto drop;
|
|
|
|
|
|
IP6CB(skb)->frag_max_size = nf_bridge->frag_max_size;
|
|
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)
|
|
if (v6ops)
|
|
return v6ops->fragment(sk, skb, br_nf_push_frag_xmit);
|
|
return v6ops->fragment(sk, skb, br_nf_push_frag_xmit);
|
|
- else
|
|
|
|
- return -EMSGSIZE;
|
|
|
|
|
|
+
|
|
|
|
+ kfree_skb(skb);
|
|
|
|
+ return -EMSGSIZE;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
nf_bridge_info_free(skb);
|
|
nf_bridge_info_free(skb);
|
|
return br_dev_queue_push_xmit(sk, skb);
|
|
return br_dev_queue_push_xmit(sk, skb);
|
|
|
|
+ drop:
|
|
|
|
+ kfree_skb(skb);
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
/* PF_BRIDGE/POST_ROUTING ********************************************/
|
|
/* PF_BRIDGE/POST_ROUTING ********************************************/
|