提交 1feb17e2 编写于 作者: L 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:
  [NETPOLL]: Fixups for 'fix soft lockup when removing module'
  [NET]: net/core/netevent.c should #include <net/netevent.h>
  [NETFILTER]: nf_conntrack_h323: add checking of out-of-range on choices' index values
  [NET] skbuff: remove export of static symbol
  SCTP: Add scope_id validation for link-local binds
  SCTP: Check to make sure file is valid before setting timeout
  SCTP: Fix thinko in sctp_copy_laddrs()
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/rtnetlink.h> #include <linux/rtnetlink.h>
#include <linux/notifier.h> #include <linux/notifier.h>
#include <net/netevent.h>
static ATOMIC_NOTIFIER_HEAD(netevent_notif_chain); static ATOMIC_NOTIFIER_HEAD(netevent_notif_chain);
......
...@@ -72,8 +72,7 @@ static void queue_process(struct work_struct *work) ...@@ -72,8 +72,7 @@ static void queue_process(struct work_struct *work)
netif_tx_unlock(dev); netif_tx_unlock(dev);
local_irq_restore(flags); local_irq_restore(flags);
if (atomic_read(&npinfo->refcnt)) schedule_delayed_work(&npinfo->tx_work, HZ/10);
schedule_delayed_work(&npinfo->tx_work, HZ/10);
return; return;
} }
netif_tx_unlock(dev); netif_tx_unlock(dev);
...@@ -786,8 +785,7 @@ void netpoll_cleanup(struct netpoll *np) ...@@ -786,8 +785,7 @@ void netpoll_cleanup(struct netpoll *np)
if (atomic_dec_and_test(&npinfo->refcnt)) { if (atomic_dec_and_test(&npinfo->refcnt)) {
skb_queue_purge(&npinfo->arp_tx); skb_queue_purge(&npinfo->arp_tx);
skb_queue_purge(&npinfo->txq); skb_queue_purge(&npinfo->txq);
cancel_delayed_work(&npinfo->tx_work); cancel_rearming_delayed_work(&npinfo->tx_work);
flush_scheduled_work();
/* clean after last, unfinished work */ /* clean after last, unfinished work */
if (!skb_queue_empty(&npinfo->txq)) { if (!skb_queue_empty(&npinfo->txq)) {
......
...@@ -2211,7 +2211,6 @@ EXPORT_SYMBOL(pskb_copy); ...@@ -2211,7 +2211,6 @@ EXPORT_SYMBOL(pskb_copy);
EXPORT_SYMBOL(pskb_expand_head); EXPORT_SYMBOL(pskb_expand_head);
EXPORT_SYMBOL(skb_checksum); EXPORT_SYMBOL(skb_checksum);
EXPORT_SYMBOL(skb_clone); EXPORT_SYMBOL(skb_clone);
EXPORT_SYMBOL(skb_clone_fraglist);
EXPORT_SYMBOL(skb_copy); EXPORT_SYMBOL(skb_copy);
EXPORT_SYMBOL(skb_copy_and_csum_bits); EXPORT_SYMBOL(skb_copy_and_csum_bits);
EXPORT_SYMBOL(skb_copy_and_csum_dev); EXPORT_SYMBOL(skb_copy_and_csum_dev);
......
...@@ -518,7 +518,7 @@ int decode_seq(bitstr_t * bs, field_t * f, char *base, int level) ...@@ -518,7 +518,7 @@ int decode_seq(bitstr_t * bs, field_t * f, char *base, int level)
CHECK_BOUND(bs, 2); CHECK_BOUND(bs, 2);
len = get_len(bs); len = get_len(bs);
CHECK_BOUND(bs, len); CHECK_BOUND(bs, len);
if (!base) { if (!base || !(son->attr & DECODE)) {
PRINT("%*.s%s\n", (level + 1) * TAB_SIZE, PRINT("%*.s%s\n", (level + 1) * TAB_SIZE,
" ", son->name); " ", son->name);
bs->cur += len; bs->cur += len;
...@@ -704,6 +704,8 @@ int decode_choice(bitstr_t * bs, field_t * f, char *base, int level) ...@@ -704,6 +704,8 @@ int decode_choice(bitstr_t * bs, field_t * f, char *base, int level)
} else { } else {
ext = 0; ext = 0;
type = get_bits(bs, f->sz); type = get_bits(bs, f->sz);
if (type >= f->lb)
return H323_ERROR_RANGE;
} }
/* Write Type */ /* Write Type */
......
...@@ -844,6 +844,10 @@ static int sctp_inet6_bind_verify(struct sctp_sock *opt, union sctp_addr *addr) ...@@ -844,6 +844,10 @@ static int sctp_inet6_bind_verify(struct sctp_sock *opt, union sctp_addr *addr)
dev = dev_get_by_index(addr->v6.sin6_scope_id); dev = dev_get_by_index(addr->v6.sin6_scope_id);
if (!dev) if (!dev)
return 0; return 0;
if (!ipv6_chk_addr(&addr->v6.sin6_addr, dev, 0)) {
dev_put(dev);
return 0;
}
dev_put(dev); dev_put(dev);
} }
af = opt->pf->af; af = opt->pf->af;
......
...@@ -980,6 +980,7 @@ static int __sctp_connect(struct sock* sk, ...@@ -980,6 +980,7 @@ static int __sctp_connect(struct sock* sk,
union sctp_addr *sa_addr; union sctp_addr *sa_addr;
void *addr_buf; void *addr_buf;
unsigned short port; unsigned short port;
unsigned int f_flags = 0;
sp = sctp_sk(sk); sp = sctp_sk(sk);
ep = sp->ep; ep = sp->ep;
...@@ -1106,7 +1107,14 @@ static int __sctp_connect(struct sock* sk, ...@@ -1106,7 +1107,14 @@ static int __sctp_connect(struct sock* sk,
af->to_sk_daddr(&to, sk); af->to_sk_daddr(&to, sk);
sk->sk_err = 0; sk->sk_err = 0;
timeo = sock_sndtimeo(sk, sk->sk_socket->file->f_flags & O_NONBLOCK); /* in-kernel sockets don't generally have a file allocated to them
* if all they do is call sock_create_kern().
*/
if (sk->sk_socket->file)
f_flags = sk->sk_socket->file->f_flags;
timeo = sock_sndtimeo(sk, f_flags & O_NONBLOCK);
err = sctp_wait_for_connect(asoc, &timeo); err = sctp_wait_for_connect(asoc, &timeo);
/* Don't free association on exit. */ /* Don't free association on exit. */
...@@ -4170,7 +4178,7 @@ static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to, ...@@ -4170,7 +4178,7 @@ static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to,
to += addrlen; to += addrlen;
cnt ++; cnt ++;
space_left -= addrlen; space_left -= addrlen;
bytes_copied += addrlen; *bytes_copied += addrlen;
} }
return cnt; return cnt;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册