Commit 605a494e authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
  [IPv6]: Invalid semicolon after if statement
  [NET]: Fix unbalanced rcu_read_unlock in __sock_create
  [VLAN] net/8021q/vlanproc.c: fix check-after-use
  [NET]: Unexport dev_ethtool
  [IOAT]: Remove redundant struct member to avoid descriptor cache miss
  [ECONET]: remove econet_packet_type on unload
  [AX25]: don't free pointers to statically allocated data
  [PATCH] mac80211: probe for hidden SSIDs in pre-auth scan
  [PATCH] mac80211: fix tx status frame code
  [BRIDGE]: Fix typo in net/bridge/br_stp_if.c
  [BRIDGE]: sysfs locking fix.
  [NETFILTER]: nf_nat_sip: don't drop short packets
  [NETFILTER]: nf_conntrack_sip: fix SIP-URI parsing
  [NETFILTER]: nf_conntrack_sip: check sname != NULL before calling strncmp
  [NETFILTER]: netfilter: xt_u32 bug correction
parents 585eb6da 660adc6e
...@@ -347,8 +347,7 @@ ioat_dma_prep_memcpy(struct dma_chan *chan, size_t len, int int_en) ...@@ -347,8 +347,7 @@ ioat_dma_prep_memcpy(struct dma_chan *chan, size_t len, int int_en)
new->async_tx.ack = 0; /* client is in control of this ack */ new->async_tx.ack = 0; /* client is in control of this ack */
new->async_tx.cookie = -EBUSY; new->async_tx.cookie = -EBUSY;
pci_unmap_len_set(new, src_len, orig_len); pci_unmap_len_set(new, len, orig_len);
pci_unmap_len_set(new, dst_len, orig_len);
spin_unlock_bh(&ioat_chan->desc_lock); spin_unlock_bh(&ioat_chan->desc_lock);
return new ? &new->async_tx : NULL; return new ? &new->async_tx : NULL;
...@@ -423,11 +422,11 @@ static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *chan) ...@@ -423,11 +422,11 @@ static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *chan)
*/ */
pci_unmap_page(chan->device->pdev, pci_unmap_page(chan->device->pdev,
pci_unmap_addr(desc, dst), pci_unmap_addr(desc, dst),
pci_unmap_len(desc, dst_len), pci_unmap_len(desc, len),
PCI_DMA_FROMDEVICE); PCI_DMA_FROMDEVICE);
pci_unmap_page(chan->device->pdev, pci_unmap_page(chan->device->pdev,
pci_unmap_addr(desc, src), pci_unmap_addr(desc, src),
pci_unmap_len(desc, src_len), pci_unmap_len(desc, len),
PCI_DMA_TODEVICE); PCI_DMA_TODEVICE);
} }
......
...@@ -111,10 +111,9 @@ struct ioat_desc_sw { ...@@ -111,10 +111,9 @@ struct ioat_desc_sw {
struct ioat_dma_descriptor *hw; struct ioat_dma_descriptor *hw;
struct list_head node; struct list_head node;
int tx_cnt; int tx_cnt;
DECLARE_PCI_UNMAP_LEN(len)
DECLARE_PCI_UNMAP_ADDR(src) DECLARE_PCI_UNMAP_ADDR(src)
DECLARE_PCI_UNMAP_LEN(src_len)
DECLARE_PCI_UNMAP_ADDR(dst) DECLARE_PCI_UNMAP_ADDR(dst)
DECLARE_PCI_UNMAP_LEN(dst_len)
struct dma_async_tx_descriptor async_tx; struct dma_async_tx_descriptor async_tx;
}; };
......
...@@ -319,7 +319,7 @@ static int vlandev_seq_show(struct seq_file *seq, void *offset) ...@@ -319,7 +319,7 @@ static int vlandev_seq_show(struct seq_file *seq, void *offset)
static const char fmt[] = "%30s %12lu\n"; static const char fmt[] = "%30s %12lu\n";
int i; int i;
if ((vlandev == NULL) || (!(vlandev->priv_flags & IFF_802_1Q_VLAN))) if (!(vlandev->priv_flags & IFF_802_1Q_VLAN))
return 0; return 0;
seq_printf(seq, "%s VID: %d REORDER_HDR: %i dev->priv_flags: %hx\n", seq_printf(seq, "%s VID: %d REORDER_HDR: %i dev->priv_flags: %hx\n",
......
...@@ -69,7 +69,6 @@ void ax25_protocol_release(unsigned int pid) ...@@ -69,7 +69,6 @@ void ax25_protocol_release(unsigned int pid)
if (protocol->pid == pid) { if (protocol->pid == pid) {
protocol_list = protocol->next; protocol_list = protocol->next;
write_unlock_bh(&protocol_list_lock); write_unlock_bh(&protocol_list_lock);
kfree(protocol);
return; return;
} }
...@@ -78,7 +77,6 @@ void ax25_protocol_release(unsigned int pid) ...@@ -78,7 +77,6 @@ void ax25_protocol_release(unsigned int pid)
s = protocol->next; s = protocol->next;
protocol->next = protocol->next->next; protocol->next = protocol->next->next;
write_unlock_bh(&protocol_list_lock); write_unlock_bh(&protocol_list_lock);
kfree(s);
return; return;
} }
......
...@@ -132,7 +132,7 @@ static void br_stp_start(struct net_bridge *br) ...@@ -132,7 +132,7 @@ static void br_stp_start(struct net_bridge *br)
} else { } else {
br->stp_enabled = BR_KERNEL_STP; br->stp_enabled = BR_KERNEL_STP;
printk(KERN_INFO "%s: starting userspace STP failed, " printk(KERN_INFO "%s: starting userspace STP failed, "
"staring kernel STP\n", br->dev->name); "starting kernel STP\n", br->dev->name);
/* To start timers on any ports left in blocking */ /* To start timers on any ports left in blocking */
spin_lock_bh(&br->lock); spin_lock_bh(&br->lock);
......
...@@ -147,20 +147,26 @@ static ssize_t show_stp_state(struct device *d, ...@@ -147,20 +147,26 @@ static ssize_t show_stp_state(struct device *d,
return sprintf(buf, "%d\n", br->stp_enabled); return sprintf(buf, "%d\n", br->stp_enabled);
} }
static void set_stp_state(struct net_bridge *br, unsigned long val)
{
rtnl_lock();
spin_unlock_bh(&br->lock);
br_stp_set_enabled(br, val);
spin_lock_bh(&br->lock);
rtnl_unlock();
}
static ssize_t store_stp_state(struct device *d, static ssize_t store_stp_state(struct device *d,
struct device_attribute *attr, const char *buf, struct device_attribute *attr, const char *buf,
size_t len) size_t len)
{ {
return store_bridge_parm(d, buf, len, set_stp_state); struct net_bridge *br = to_bridge(d);
char *endp;
unsigned long val;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
val = simple_strtoul(buf, &endp, 0);
if (endp == buf)
return -EINVAL;
rtnl_lock();
br_stp_set_enabled(br, val);
rtnl_unlock();
} }
static DEVICE_ATTR(stp_state, S_IRUGO | S_IWUSR, show_stp_state, static DEVICE_ATTR(stp_state, S_IRUGO | S_IWUSR, show_stp_state,
store_stp_state); store_stp_state);
......
...@@ -948,7 +948,6 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -948,7 +948,6 @@ int dev_ethtool(struct ifreq *ifr)
return rc; return rc;
} }
EXPORT_SYMBOL(dev_ethtool);
EXPORT_SYMBOL(ethtool_op_get_link); EXPORT_SYMBOL(ethtool_op_get_link);
EXPORT_SYMBOL(ethtool_op_get_sg); EXPORT_SYMBOL(ethtool_op_get_sg);
EXPORT_SYMBOL(ethtool_op_get_tso); EXPORT_SYMBOL(ethtool_op_get_tso);
......
...@@ -1146,6 +1146,9 @@ static void __exit econet_proto_exit(void) ...@@ -1146,6 +1146,9 @@ static void __exit econet_proto_exit(void)
sock_release(udpsock); sock_release(udpsock);
#endif #endif
unregister_netdevice_notifier(&econet_netdev_notifier); unregister_netdevice_notifier(&econet_netdev_notifier);
#ifdef CONFIG_ECONET_NATIVE
dev_remove_pack(&econet_packet_type);
#endif
sock_unregister(econet_family_ops.family); sock_unregister(econet_family_ops.family);
proto_unregister(&econet_proto); proto_unregister(&econet_proto);
} }
......
...@@ -104,7 +104,7 @@ static unsigned int ip_nat_sip(struct sk_buff **pskb, ...@@ -104,7 +104,7 @@ static unsigned int ip_nat_sip(struct sk_buff **pskb,
dataoff = ip_hdrlen(*pskb) + sizeof(struct udphdr); dataoff = ip_hdrlen(*pskb) + sizeof(struct udphdr);
datalen = (*pskb)->len - dataoff; datalen = (*pskb)->len - dataoff;
if (datalen < sizeof("SIP/2.0") - 1) if (datalen < sizeof("SIP/2.0") - 1)
return NF_DROP; return NF_ACCEPT;
addr_map_init(ct, &map); addr_map_init(ct, &map);
......
...@@ -820,7 +820,7 @@ static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_txoptions *opt, ...@@ -820,7 +820,7 @@ static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_txoptions *opt,
return 0; return 0;
len = min_t(unsigned int, len, ipv6_optlen(hdr)); len = min_t(unsigned int, len, ipv6_optlen(hdr));
if (copy_to_user(optval, hdr, len)); if (copy_to_user(optval, hdr, len))
return -EFAULT; return -EFAULT;
return ipv6_optlen(hdr); return ipv6_optlen(hdr);
} }
......
...@@ -4678,7 +4678,6 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb, ...@@ -4678,7 +4678,6 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb,
memset(skb->cb, 0, sizeof(skb->cb)); memset(skb->cb, 0, sizeof(skb->cb));
netif_rx(skb); netif_rx(skb);
skb = skb2; skb = skb2;
break;
} }
} }
out: out:
......
...@@ -2154,7 +2154,11 @@ static int ieee80211_sta_config_auth(struct net_device *dev, ...@@ -2154,7 +2154,11 @@ static int ieee80211_sta_config_auth(struct net_device *dev,
return 0; return 0;
} else { } else {
if (ifsta->state != IEEE80211_AUTHENTICATE) { if (ifsta->state != IEEE80211_AUTHENTICATE) {
ieee80211_sta_start_scan(dev, NULL, 0); if (ifsta->auto_ssid_sel)
ieee80211_sta_start_scan(dev, NULL, 0);
else
ieee80211_sta_start_scan(dev, ifsta->ssid,
ifsta->ssid_len);
ifsta->state = IEEE80211_AUTHENTICATE; ifsta->state = IEEE80211_AUTHENTICATE;
set_bit(IEEE80211_STA_REQ_AUTH, &ifsta->request); set_bit(IEEE80211_STA_REQ_AUTH, &ifsta->request);
} else } else
......
...@@ -295,6 +295,7 @@ static int epaddr_len(struct nf_conn *ct, const char *dptr, ...@@ -295,6 +295,7 @@ static int epaddr_len(struct nf_conn *ct, const char *dptr,
static int skp_epaddr_len(struct nf_conn *ct, const char *dptr, static int skp_epaddr_len(struct nf_conn *ct, const char *dptr,
const char *limit, int *shift) const char *limit, int *shift)
{ {
const char *start = dptr;
int s = *shift; int s = *shift;
/* Search for @, but stop at the end of the line. /* Search for @, but stop at the end of the line.
...@@ -309,8 +310,10 @@ static int skp_epaddr_len(struct nf_conn *ct, const char *dptr, ...@@ -309,8 +310,10 @@ static int skp_epaddr_len(struct nf_conn *ct, const char *dptr,
if (dptr <= limit && *dptr == '@') { if (dptr <= limit && *dptr == '@') {
dptr++; dptr++;
(*shift)++; (*shift)++;
} else } else {
dptr = start;
*shift = s; *shift = s;
}
return epaddr_len(ct, dptr, limit, shift); return epaddr_len(ct, dptr, limit, shift);
} }
...@@ -330,7 +333,8 @@ int ct_sip_get_info(struct nf_conn *ct, ...@@ -330,7 +333,8 @@ int ct_sip_get_info(struct nf_conn *ct,
while (dptr <= limit) { while (dptr <= limit) {
if ((strncmp(dptr, hnfo->lname, hnfo->lnlen) != 0) && if ((strncmp(dptr, hnfo->lname, hnfo->lnlen) != 0) &&
(strncmp(dptr, hnfo->sname, hnfo->snlen) != 0)) { (hnfo->sname == NULL ||
strncmp(dptr, hnfo->sname, hnfo->snlen) != 0)) {
dptr++; dptr++;
continue; continue;
} }
......
...@@ -36,7 +36,7 @@ static bool u32_match_it(const struct xt_u32 *data, ...@@ -36,7 +36,7 @@ static bool u32_match_it(const struct xt_u32 *data,
at = 0; at = 0;
pos = ct->location[0].number; pos = ct->location[0].number;
if (skb->len < 4 || pos > skb->len - 4); if (skb->len < 4 || pos > skb->len - 4)
return false; return false;
ret = skb_copy_bits(skb, pos, &n, sizeof(n)); ret = skb_copy_bits(skb, pos, &n, sizeof(n));
......
...@@ -1168,7 +1168,7 @@ static int __sock_create(int family, int type, int protocol, ...@@ -1168,7 +1168,7 @@ static int __sock_create(int family, int type, int protocol,
module_put(pf->owner); module_put(pf->owner);
err = security_socket_post_create(sock, family, type, protocol, kern); err = security_socket_post_create(sock, family, type, protocol, kern);
if (err) if (err)
goto out_release; goto out_sock_release;
*res = sock; *res = sock;
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment