Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (32 commits) ucc_geth: Fix oops when using fixed-link support dm9000: locking bugfix net: update dnet.c for bus_id removal dnet: DNET should depend on HAS_IOMEM dca: add missing copyright/license headers nl80211: Check that function pointer != NULL before using it sungem: missing net_device_ops be2net: fix to restore vlan ids into BE2 during a IF DOWN->UP cycle be2net: replenish when posting to rx-queue is starved in out of mem conditions bas_gigaset: correctly allocate USB interrupt transfer buffer smsc911x: reset last known duplex and carrier on open sh_eth: Fix mistake of the address of SH7763 sh_eth: Change handling of IRQ netns: oops in ip[6]_frag_reasm incrementing stats net: kfree(napi->skb) => kfree_skb net: fix sctp breakage ipv6: fix display of local and remote sit endpoints net: Document /proc/sys/net/core/netdev_budget tulip: fix crash on iface up with shirq debug virtio_net: Make virtio_net support carrier detection ...
This commit is contained in:
@@ -2588,9 +2588,9 @@ static int process_backlog(struct napi_struct *napi, int quota)
|
||||
local_irq_disable();
|
||||
skb = __skb_dequeue(&queue->input_pkt_queue);
|
||||
if (!skb) {
|
||||
__napi_complete(napi);
|
||||
local_irq_enable();
|
||||
break;
|
||||
napi_complete(napi);
|
||||
goto out;
|
||||
}
|
||||
local_irq_enable();
|
||||
|
||||
@@ -2599,6 +2599,7 @@ static int process_backlog(struct napi_struct *napi, int quota)
|
||||
|
||||
napi_gro_flush(napi);
|
||||
|
||||
out:
|
||||
return work;
|
||||
}
|
||||
|
||||
@@ -2671,7 +2672,7 @@ void netif_napi_del(struct napi_struct *napi)
|
||||
struct sk_buff *skb, *next;
|
||||
|
||||
list_del_init(&napi->dev_list);
|
||||
kfree(napi->skb);
|
||||
kfree_skb(napi->skb);
|
||||
|
||||
for (skb = napi->gro_list; skb; skb = next) {
|
||||
next = skb->next;
|
||||
|
@@ -463,6 +463,7 @@ err:
|
||||
static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
|
||||
struct net_device *dev)
|
||||
{
|
||||
struct net *net = container_of(qp->q.net, struct net, ipv4.frags);
|
||||
struct iphdr *iph;
|
||||
struct sk_buff *fp, *head = qp->q.fragments;
|
||||
int len;
|
||||
@@ -548,7 +549,7 @@ static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
|
||||
iph = ip_hdr(head);
|
||||
iph->frag_off = 0;
|
||||
iph->tot_len = htons(len);
|
||||
IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_REASMOKS);
|
||||
IP_INC_STATS_BH(net, IPSTATS_MIB_REASMOKS);
|
||||
qp->q.fragments = NULL;
|
||||
return 0;
|
||||
|
||||
|
@@ -528,14 +528,14 @@ find_prev_fhdr(struct sk_buff *skb, u8 *prevhdrp, int *prevhoff, int *fhoff)
|
||||
if (!ipv6_ext_hdr(nexthdr)) {
|
||||
return -1;
|
||||
}
|
||||
if (len < (int)sizeof(struct ipv6_opt_hdr)) {
|
||||
pr_debug("too short\n");
|
||||
return -1;
|
||||
}
|
||||
if (nexthdr == NEXTHDR_NONE) {
|
||||
pr_debug("next header is none\n");
|
||||
return -1;
|
||||
}
|
||||
if (len < (int)sizeof(struct ipv6_opt_hdr)) {
|
||||
pr_debug("too short\n");
|
||||
return -1;
|
||||
}
|
||||
if (skb_copy_bits(skb, start, &hdr, sizeof(hdr)))
|
||||
BUG();
|
||||
if (nexthdr == NEXTHDR_AUTH)
|
||||
|
@@ -452,6 +452,7 @@ err:
|
||||
static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
|
||||
struct net_device *dev)
|
||||
{
|
||||
struct net *net = container_of(fq->q.net, struct net, ipv6.frags);
|
||||
struct sk_buff *fp, *head = fq->q.fragments;
|
||||
int payload_len;
|
||||
unsigned int nhoff;
|
||||
@@ -551,8 +552,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
|
||||
head->csum);
|
||||
|
||||
rcu_read_lock();
|
||||
IP6_INC_STATS_BH(dev_net(dev),
|
||||
__in6_dev_get(dev), IPSTATS_MIB_REASMOKS);
|
||||
IP6_INC_STATS_BH(net, __in6_dev_get(dev), IPSTATS_MIB_REASMOKS);
|
||||
rcu_read_unlock();
|
||||
fq->q.fragments = NULL;
|
||||
return 1;
|
||||
@@ -566,8 +566,7 @@ out_oom:
|
||||
printk(KERN_DEBUG "ip6_frag_reasm: no memory for reassembly\n");
|
||||
out_fail:
|
||||
rcu_read_lock();
|
||||
IP6_INC_STATS_BH(dev_net(dev),
|
||||
__in6_dev_get(dev), IPSTATS_MIB_REASMFAILS);
|
||||
IP6_INC_STATS_BH(net, __in6_dev_get(dev), IPSTATS_MIB_REASMFAILS);
|
||||
rcu_read_unlock();
|
||||
return -1;
|
||||
}
|
||||
|
@@ -188,9 +188,9 @@ static struct ip_tunnel * ipip6_tunnel_locate(struct net *net,
|
||||
}
|
||||
|
||||
nt = netdev_priv(dev);
|
||||
ipip6_tunnel_init(dev);
|
||||
|
||||
nt->parms = *parms;
|
||||
ipip6_tunnel_init(dev);
|
||||
|
||||
if (parms->i_flags & SIT_ISATAP)
|
||||
dev->priv_flags |= IFF_ISATAP;
|
||||
|
@@ -752,6 +752,8 @@ ieee80211_tx_h_fragment(struct ieee80211_tx_data *tx)
|
||||
skb_copy_queue_mapping(frag, first);
|
||||
|
||||
frag->do_not_encrypt = first->do_not_encrypt;
|
||||
frag->dev = first->dev;
|
||||
frag->iif = first->iif;
|
||||
|
||||
pos += copylen;
|
||||
left -= copylen;
|
||||
|
@@ -726,7 +726,7 @@ nf_conntrack_in(struct net *net, u_int8_t pf, unsigned int hooknum,
|
||||
NF_CT_ASSERT(skb->nfct);
|
||||
|
||||
ret = l4proto->packet(ct, skb, dataoff, ctinfo, pf, hooknum);
|
||||
if (ret < 0) {
|
||||
if (ret <= 0) {
|
||||
/* Invalid: inverse of the return code tells
|
||||
* the netfilter core what to do */
|
||||
pr_debug("nf_conntrack_in: Can't track with proto module\n");
|
||||
|
@@ -1780,6 +1780,7 @@ ctnetlink_create_expect(struct nlattr *cda[], u_int8_t u3, u32 pid, int report)
|
||||
goto out;
|
||||
}
|
||||
|
||||
exp->class = 0;
|
||||
exp->expectfn = NULL;
|
||||
exp->flags = 0;
|
||||
exp->master = ct;
|
||||
|
@@ -859,7 +859,7 @@ static int tcp_packet(struct nf_conn *ct,
|
||||
*/
|
||||
if (nf_ct_kill(ct))
|
||||
return -NF_REPEAT;
|
||||
return -NF_DROP;
|
||||
return NF_DROP;
|
||||
}
|
||||
/* Fall through */
|
||||
case TCP_CONNTRACK_IGNORE:
|
||||
@@ -892,7 +892,7 @@ static int tcp_packet(struct nf_conn *ct,
|
||||
nf_log_packet(pf, 0, skb, NULL, NULL, NULL,
|
||||
"nf_ct_tcp: killing out of sync session ");
|
||||
nf_ct_kill(ct);
|
||||
return -NF_DROP;
|
||||
return NF_DROP;
|
||||
}
|
||||
ct->proto.tcp.last_index = index;
|
||||
ct->proto.tcp.last_dir = dir;
|
||||
|
@@ -111,7 +111,8 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
|
||||
if (sctp_addip_enable) {
|
||||
auth_chunks->chunks[0] = SCTP_CID_ASCONF;
|
||||
auth_chunks->chunks[1] = SCTP_CID_ASCONF_ACK;
|
||||
auth_chunks->param_hdr.length += htons(2);
|
||||
auth_chunks->param_hdr.length =
|
||||
htons(sizeof(sctp_paramhdr_t) + 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -102,3 +102,13 @@ config LIB80211_CRYPT_CCMP
|
||||
|
||||
config LIB80211_CRYPT_TKIP
|
||||
tristate
|
||||
|
||||
config LIB80211_DEBUG
|
||||
bool "lib80211 debugging messages"
|
||||
depends on LIB80211
|
||||
default n
|
||||
---help---
|
||||
You can enable this if you want verbose debugging messages
|
||||
from lib80211.
|
||||
|
||||
If unsure, say N.
|
||||
|
@@ -337,6 +337,7 @@ static int lib80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
pos += 8;
|
||||
|
||||
if (ccmp_replay_check(pn, key->rx_pn)) {
|
||||
#ifdef CONFIG_LIB80211_DEBUG
|
||||
if (net_ratelimit()) {
|
||||
printk(KERN_DEBUG "CCMP: replay detected: STA=%pM "
|
||||
"previous PN %02x%02x%02x%02x%02x%02x "
|
||||
@@ -346,6 +347,7 @@ static int lib80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
key->rx_pn[3], key->rx_pn[4], key->rx_pn[5],
|
||||
pn[0], pn[1], pn[2], pn[3], pn[4], pn[5]);
|
||||
}
|
||||
#endif
|
||||
key->dot11RSNAStatsCCMPReplays++;
|
||||
return -4;
|
||||
}
|
||||
|
@@ -465,12 +465,14 @@ static int lib80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
pos += 8;
|
||||
|
||||
if (tkip_replay_check(iv32, iv16, tkey->rx_iv32, tkey->rx_iv16)) {
|
||||
#ifdef CONFIG_LIB80211_DEBUG
|
||||
if (net_ratelimit()) {
|
||||
printk(KERN_DEBUG "TKIP: replay detected: STA=%pM"
|
||||
" previous TSC %08x%04x received TSC "
|
||||
"%08x%04x\n", hdr->addr2,
|
||||
tkey->rx_iv32, tkey->rx_iv16, iv32, iv16);
|
||||
}
|
||||
#endif
|
||||
tkey->dot11RSNAStatsTKIPReplays++;
|
||||
return -4;
|
||||
}
|
||||
@@ -505,10 +507,12 @@ static int lib80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
|
||||
* it needs to be recalculated for the next packet. */
|
||||
tkey->rx_phase1_done = 0;
|
||||
}
|
||||
#ifdef CONFIG_LIB80211_DEBUG
|
||||
if (net_ratelimit()) {
|
||||
printk(KERN_DEBUG "TKIP: ICV error detected: STA="
|
||||
"%pM\n", hdr->addr2);
|
||||
}
|
||||
#endif
|
||||
tkey->dot11RSNAStatsTKIPICVErrors++;
|
||||
return -5;
|
||||
}
|
||||
|
@@ -1908,6 +1908,11 @@ static int nl80211_get_mesh_params(struct sk_buff *skb,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (!drv->ops->get_mesh_params) {
|
||||
err = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Get the mesh params */
|
||||
rtnl_lock();
|
||||
err = drv->ops->get_mesh_params(&drv->wiphy, dev, &cur_params);
|
||||
@@ -2017,6 +2022,11 @@ static int nl80211_set_mesh_params(struct sk_buff *skb, struct genl_info *info)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (!drv->ops->set_mesh_params) {
|
||||
err = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* This makes sure that there aren't more than 32 mesh config
|
||||
* parameters (otherwise our bitfield scheme would not work.) */
|
||||
BUILD_BUG_ON(NL80211_MESHCONF_ATTR_MAX > 32);
|
||||
@@ -2061,6 +2071,7 @@ static int nl80211_set_mesh_params(struct sk_buff *skb, struct genl_info *info)
|
||||
err = drv->ops->set_mesh_params(&drv->wiphy, dev, &cfg, mask);
|
||||
rtnl_unlock();
|
||||
|
||||
out:
|
||||
/* cleanup */
|
||||
cfg80211_put_dev(drv);
|
||||
dev_put(dev);
|
||||
|
Reference in New Issue
Block a user