diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-28 11:39:05 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-28 11:39:05 -0400 |
| commit | 2ef7b45a5925c54d948f858e42babb0533b9a3c5 (patch) | |
| tree | 9733a7b50854654162d9e15551a7edd74bfdef2c /net | |
| parent | 07117e305487b0d4251a97d3529fa2c7d930d36a (diff) | |
| parent | b582ad8e961c78458005250ae28fdd7a25db55aa (diff) | |
Merge git://github.com/davem330/net
* git://github.com/davem330/net:
ipv6-multicast: Fix memory leak in IPv6 multicast.
ipv6: check return value for dst_alloc
net: check return value for dst_alloc
ipv6-multicast: Fix memory leak in input path.
bnx2x: add missing break in bnx2x_dcbnl_get_cap
bnx2x: fix WOL by enablement PME in config space
bnx2x: fix hw attention handling
net: fix a typo in Documentation/networking/scaling.txt
ath9k: Fix a dma warning/memory leak
rtlwifi: rtl8192cu: Fix unitialized struct
iwlagn: fix dangling scan request
batman-adv: do_bcast has to be true for broadcast packets only
cfg80211: Fix validation of AKM suites
iwlegacy: do not use interruptible waits
iwlegacy: fix command queue timeout
ath9k_hw: Fix Rx DMA stuck for AR9003 chips
Diffstat (limited to 'net')
| -rw-r--r-- | net/batman-adv/soft-interface.c | 10 | ||||
| -rw-r--r-- | net/ipv6/ip6mr.c | 8 | ||||
| -rw-r--r-- | net/ipv6/route.c | 4 | ||||
| -rw-r--r-- | net/wireless/nl80211.c | 5 | ||||
| -rw-r--r-- | net/xfrm/xfrm_policy.c | 10 |
5 files changed, 24 insertions, 13 deletions
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c index 3e2f91ffa4e2..05dd35114a27 100644 --- a/net/batman-adv/soft-interface.c +++ b/net/batman-adv/soft-interface.c | |||
| @@ -565,7 +565,7 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface) | |||
| 565 | struct orig_node *orig_node = NULL; | 565 | struct orig_node *orig_node = NULL; |
| 566 | int data_len = skb->len, ret; | 566 | int data_len = skb->len, ret; |
| 567 | short vid = -1; | 567 | short vid = -1; |
| 568 | bool do_bcast = false; | 568 | bool do_bcast; |
| 569 | 569 | ||
| 570 | if (atomic_read(&bat_priv->mesh_state) != MESH_ACTIVE) | 570 | if (atomic_read(&bat_priv->mesh_state) != MESH_ACTIVE) |
| 571 | goto dropped; | 571 | goto dropped; |
| @@ -598,15 +598,15 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface) | |||
| 598 | tt_local_add(soft_iface, ethhdr->h_source); | 598 | tt_local_add(soft_iface, ethhdr->h_source); |
| 599 | 599 | ||
| 600 | orig_node = transtable_search(bat_priv, ethhdr->h_dest); | 600 | orig_node = transtable_search(bat_priv, ethhdr->h_dest); |
| 601 | if (is_multicast_ether_addr(ethhdr->h_dest) || | 601 | do_bcast = is_multicast_ether_addr(ethhdr->h_dest); |
| 602 | (orig_node && orig_node->gw_flags)) { | 602 | if (do_bcast || (orig_node && orig_node->gw_flags)) { |
| 603 | ret = gw_is_target(bat_priv, skb, orig_node); | 603 | ret = gw_is_target(bat_priv, skb, orig_node); |
| 604 | 604 | ||
| 605 | if (ret < 0) | 605 | if (ret < 0) |
| 606 | goto dropped; | 606 | goto dropped; |
| 607 | 607 | ||
| 608 | if (ret == 0) | 608 | if (ret) |
| 609 | do_bcast = true; | 609 | do_bcast = false; |
| 610 | } | 610 | } |
| 611 | 611 | ||
| 612 | /* ethernet packet should be broadcasted */ | 612 | /* ethernet packet should be broadcasted */ |
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index 705c82886281..def0538e2413 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c | |||
| @@ -696,8 +696,10 @@ static netdev_tx_t reg_vif_xmit(struct sk_buff *skb, | |||
| 696 | int err; | 696 | int err; |
| 697 | 697 | ||
| 698 | err = ip6mr_fib_lookup(net, &fl6, &mrt); | 698 | err = ip6mr_fib_lookup(net, &fl6, &mrt); |
| 699 | if (err < 0) | 699 | if (err < 0) { |
| 700 | kfree_skb(skb); | ||
| 700 | return err; | 701 | return err; |
| 702 | } | ||
| 701 | 703 | ||
| 702 | read_lock(&mrt_lock); | 704 | read_lock(&mrt_lock); |
| 703 | dev->stats.tx_bytes += skb->len; | 705 | dev->stats.tx_bytes += skb->len; |
| @@ -2052,8 +2054,10 @@ int ip6_mr_input(struct sk_buff *skb) | |||
| 2052 | int err; | 2054 | int err; |
| 2053 | 2055 | ||
| 2054 | err = ip6mr_fib_lookup(net, &fl6, &mrt); | 2056 | err = ip6mr_fib_lookup(net, &fl6, &mrt); |
| 2055 | if (err < 0) | 2057 | if (err < 0) { |
| 2058 | kfree_skb(skb); | ||
| 2056 | return err; | 2059 | return err; |
| 2060 | } | ||
| 2057 | 2061 | ||
| 2058 | read_lock(&mrt_lock); | 2062 | read_lock(&mrt_lock); |
| 2059 | cache = ip6mr_cache_find(mrt, | 2063 | cache = ip6mr_cache_find(mrt, |
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 1250f9020670..fb545edef6ea 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
| @@ -244,7 +244,9 @@ static inline struct rt6_info *ip6_dst_alloc(struct dst_ops *ops, | |||
| 244 | { | 244 | { |
| 245 | struct rt6_info *rt = dst_alloc(ops, dev, 0, 0, flags); | 245 | struct rt6_info *rt = dst_alloc(ops, dev, 0, 0, flags); |
| 246 | 246 | ||
| 247 | memset(&rt->rt6i_table, 0, sizeof(*rt) - sizeof(struct dst_entry)); | 247 | if (rt != NULL) |
| 248 | memset(&rt->rt6i_table, 0, | ||
| 249 | sizeof(*rt) - sizeof(struct dst_entry)); | ||
| 248 | 250 | ||
| 249 | return rt; | 251 | return rt; |
| 250 | } | 252 | } |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index e83e7fee3bc0..ea40d540a990 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
| @@ -4113,9 +4113,12 @@ static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev, | |||
| 4113 | if (len % sizeof(u32)) | 4113 | if (len % sizeof(u32)) |
| 4114 | return -EINVAL; | 4114 | return -EINVAL; |
| 4115 | 4115 | ||
| 4116 | if (settings->n_akm_suites > NL80211_MAX_NR_AKM_SUITES) | ||
| 4117 | return -EINVAL; | ||
| 4118 | |||
| 4116 | memcpy(settings->akm_suites, data, len); | 4119 | memcpy(settings->akm_suites, data, len); |
| 4117 | 4120 | ||
| 4118 | for (i = 0; i < settings->n_ciphers_pairwise; i++) | 4121 | for (i = 0; i < settings->n_akm_suites; i++) |
| 4119 | if (!nl80211_valid_akm_suite(settings->akm_suites[i])) | 4122 | if (!nl80211_valid_akm_suite(settings->akm_suites[i])) |
| 4120 | return -EINVAL; | 4123 | return -EINVAL; |
| 4121 | } | 4124 | } |
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 94fdcc7f1030..552df27dcf53 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
| @@ -1349,14 +1349,16 @@ static inline struct xfrm_dst *xfrm_alloc_dst(struct net *net, int family) | |||
| 1349 | BUG(); | 1349 | BUG(); |
| 1350 | } | 1350 | } |
| 1351 | xdst = dst_alloc(dst_ops, NULL, 0, 0, 0); | 1351 | xdst = dst_alloc(dst_ops, NULL, 0, 0, 0); |
| 1352 | memset(&xdst->u.rt6.rt6i_table, 0, sizeof(*xdst) - sizeof(struct dst_entry)); | ||
| 1353 | xfrm_policy_put_afinfo(afinfo); | ||
| 1354 | 1352 | ||
| 1355 | if (likely(xdst)) | 1353 | if (likely(xdst)) { |
| 1354 | memset(&xdst->u.rt6.rt6i_table, 0, | ||
| 1355 | sizeof(*xdst) - sizeof(struct dst_entry)); | ||
| 1356 | xdst->flo.ops = &xfrm_bundle_fc_ops; | 1356 | xdst->flo.ops = &xfrm_bundle_fc_ops; |
| 1357 | else | 1357 | } else |
| 1358 | xdst = ERR_PTR(-ENOBUFS); | 1358 | xdst = ERR_PTR(-ENOBUFS); |
| 1359 | 1359 | ||
| 1360 | xfrm_policy_put_afinfo(afinfo); | ||
| 1361 | |||
| 1360 | return xdst; | 1362 | return xdst; |
| 1361 | } | 1363 | } |
| 1362 | 1364 | ||
