diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-08-22 17:19:28 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-09-08 14:51:37 -0700 |
commit | 9d3925d7a0eb89385cfef62020578baff230dfce (patch) | |
tree | dcf9fe74957aca8ebf8bb3ae4a3eb4558d77ea83 /net | |
parent | 7cadd43d5a72cb042e09fed4816d818615b2ca73 (diff) |
bridge-netfilter: don't overwrite memory outside of skb
The bridge netfilter code needs to check for space at the
front of the skb before overwriting; otherwise if skb from
device doesn't have headroom, then it will cause random
memory corruption.
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'net')
-rw-r--r-- | net/bridge/br_forward.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index 56f3aa47e75..ddb7e1cedc1 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c @@ -43,11 +43,15 @@ int br_dev_queue_push_xmit(struct sk_buff *skb) else { #ifdef CONFIG_BRIDGE_NETFILTER /* ip_refrag calls ip_fragment, doesn't copy the MAC header. */ - nf_bridge_maybe_copy_header(skb); + if (nf_bridge_maybe_copy_header(skb)) + kfree_skb(skb); + else #endif - skb_push(skb, ETH_HLEN); + { + skb_push(skb, ETH_HLEN); - dev_queue_xmit(skb); + dev_queue_xmit(skb); + } } return 0; |