diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-06 13:30:12 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-06 13:30:12 -0400 |
commit | 1feb17e286339382a1ae36e0fecc4d88c2d7f123 (patch) | |
tree | f90019dea4e08d290710a7c3aaae0bb2bf239a40 | |
parent | dadde13ad86bf45bc71f0663a6ce3dfe5dd4ecc5 (diff) | |
parent | 25442cafb8cc3d979418caccabc91260707a0947 (diff) |
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()
-rw-r--r-- | net/core/netevent.c | 1 | ||||
-rw-r--r-- | net/core/netpoll.c | 6 | ||||
-rw-r--r-- | net/core/skbuff.c | 1 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_h323_asn1.c | 4 | ||||
-rw-r--r-- | net/sctp/ipv6.c | 4 | ||||
-rw-r--r-- | net/sctp/socket.c | 12 |
6 files changed, 20 insertions, 8 deletions
diff --git a/net/core/netevent.c b/net/core/netevent.c index 35d02c38554e..95f81de87502 100644 --- a/net/core/netevent.c +++ b/net/core/netevent.c | |||
@@ -15,6 +15,7 @@ | |||
15 | 15 | ||
16 | #include <linux/rtnetlink.h> | 16 | #include <linux/rtnetlink.h> |
17 | #include <linux/notifier.h> | 17 | #include <linux/notifier.h> |
18 | #include <net/netevent.h> | ||
18 | 19 | ||
19 | static ATOMIC_NOTIFIER_HEAD(netevent_notif_chain); | 20 | static ATOMIC_NOTIFIER_HEAD(netevent_notif_chain); |
20 | 21 | ||
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index cf40ff91ac01..a0efdd7a6b37 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
@@ -72,8 +72,7 @@ static void queue_process(struct work_struct *work) | |||
72 | netif_tx_unlock(dev); | 72 | netif_tx_unlock(dev); |
73 | local_irq_restore(flags); | 73 | local_irq_restore(flags); |
74 | 74 | ||
75 | if (atomic_read(&npinfo->refcnt)) | 75 | schedule_delayed_work(&npinfo->tx_work, HZ/10); |
76 | schedule_delayed_work(&npinfo->tx_work, HZ/10); | ||
77 | return; | 76 | return; |
78 | } | 77 | } |
79 | netif_tx_unlock(dev); | 78 | netif_tx_unlock(dev); |
@@ -786,8 +785,7 @@ void netpoll_cleanup(struct netpoll *np) | |||
786 | if (atomic_dec_and_test(&npinfo->refcnt)) { | 785 | if (atomic_dec_and_test(&npinfo->refcnt)) { |
787 | skb_queue_purge(&npinfo->arp_tx); | 786 | skb_queue_purge(&npinfo->arp_tx); |
788 | skb_queue_purge(&npinfo->txq); | 787 | skb_queue_purge(&npinfo->txq); |
789 | cancel_delayed_work(&npinfo->tx_work); | 788 | cancel_rearming_delayed_work(&npinfo->tx_work); |
790 | flush_scheduled_work(); | ||
791 | 789 | ||
792 | /* clean after last, unfinished work */ | 790 | /* clean after last, unfinished work */ |
793 | if (!skb_queue_empty(&npinfo->txq)) { | 791 | if (!skb_queue_empty(&npinfo->txq)) { |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 27cfe5fe4bb9..3943c3ad9145 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -2211,7 +2211,6 @@ EXPORT_SYMBOL(pskb_copy); | |||
2211 | EXPORT_SYMBOL(pskb_expand_head); | 2211 | EXPORT_SYMBOL(pskb_expand_head); |
2212 | EXPORT_SYMBOL(skb_checksum); | 2212 | EXPORT_SYMBOL(skb_checksum); |
2213 | EXPORT_SYMBOL(skb_clone); | 2213 | EXPORT_SYMBOL(skb_clone); |
2214 | EXPORT_SYMBOL(skb_clone_fraglist); | ||
2215 | EXPORT_SYMBOL(skb_copy); | 2214 | EXPORT_SYMBOL(skb_copy); |
2216 | EXPORT_SYMBOL(skb_copy_and_csum_bits); | 2215 | EXPORT_SYMBOL(skb_copy_and_csum_bits); |
2217 | EXPORT_SYMBOL(skb_copy_and_csum_dev); | 2216 | EXPORT_SYMBOL(skb_copy_and_csum_dev); |
diff --git a/net/netfilter/nf_conntrack_h323_asn1.c b/net/netfilter/nf_conntrack_h323_asn1.c index f6fad713d484..6b7eaa019d4c 100644 --- a/net/netfilter/nf_conntrack_h323_asn1.c +++ b/net/netfilter/nf_conntrack_h323_asn1.c | |||
@@ -518,7 +518,7 @@ int decode_seq(bitstr_t * bs, field_t * f, char *base, int level) | |||
518 | CHECK_BOUND(bs, 2); | 518 | CHECK_BOUND(bs, 2); |
519 | len = get_len(bs); | 519 | len = get_len(bs); |
520 | CHECK_BOUND(bs, len); | 520 | CHECK_BOUND(bs, len); |
521 | if (!base) { | 521 | if (!base || !(son->attr & DECODE)) { |
522 | PRINT("%*.s%s\n", (level + 1) * TAB_SIZE, | 522 | PRINT("%*.s%s\n", (level + 1) * TAB_SIZE, |
523 | " ", son->name); | 523 | " ", son->name); |
524 | bs->cur += len; | 524 | bs->cur += len; |
@@ -704,6 +704,8 @@ int decode_choice(bitstr_t * bs, field_t * f, char *base, int level) | |||
704 | } else { | 704 | } else { |
705 | ext = 0; | 705 | ext = 0; |
706 | type = get_bits(bs, f->sz); | 706 | type = get_bits(bs, f->sz); |
707 | if (type >= f->lb) | ||
708 | return H323_ERROR_RANGE; | ||
707 | } | 709 | } |
708 | 710 | ||
709 | /* Write Type */ | 711 | /* Write Type */ |
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c index 84cd53635fe8..2c29394fd92e 100644 --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c | |||
@@ -844,6 +844,10 @@ static int sctp_inet6_bind_verify(struct sctp_sock *opt, union sctp_addr *addr) | |||
844 | dev = dev_get_by_index(addr->v6.sin6_scope_id); | 844 | dev = dev_get_by_index(addr->v6.sin6_scope_id); |
845 | if (!dev) | 845 | if (!dev) |
846 | return 0; | 846 | return 0; |
847 | if (!ipv6_chk_addr(&addr->v6.sin6_addr, dev, 0)) { | ||
848 | dev_put(dev); | ||
849 | return 0; | ||
850 | } | ||
847 | dev_put(dev); | 851 | dev_put(dev); |
848 | } | 852 | } |
849 | af = opt->pf->af; | 853 | af = opt->pf->af; |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 67861a8f00cb..b1917f68723c 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
@@ -980,6 +980,7 @@ static int __sctp_connect(struct sock* sk, | |||
980 | union sctp_addr *sa_addr; | 980 | union sctp_addr *sa_addr; |
981 | void *addr_buf; | 981 | void *addr_buf; |
982 | unsigned short port; | 982 | unsigned short port; |
983 | unsigned int f_flags = 0; | ||
983 | 984 | ||
984 | sp = sctp_sk(sk); | 985 | sp = sctp_sk(sk); |
985 | ep = sp->ep; | 986 | ep = sp->ep; |
@@ -1106,7 +1107,14 @@ static int __sctp_connect(struct sock* sk, | |||
1106 | af->to_sk_daddr(&to, sk); | 1107 | af->to_sk_daddr(&to, sk); |
1107 | sk->sk_err = 0; | 1108 | sk->sk_err = 0; |
1108 | 1109 | ||
1109 | timeo = sock_sndtimeo(sk, sk->sk_socket->file->f_flags & O_NONBLOCK); | 1110 | /* in-kernel sockets don't generally have a file allocated to them |
1111 | * if all they do is call sock_create_kern(). | ||
1112 | */ | ||
1113 | if (sk->sk_socket->file) | ||
1114 | f_flags = sk->sk_socket->file->f_flags; | ||
1115 | |||
1116 | timeo = sock_sndtimeo(sk, f_flags & O_NONBLOCK); | ||
1117 | |||
1110 | err = sctp_wait_for_connect(asoc, &timeo); | 1118 | err = sctp_wait_for_connect(asoc, &timeo); |
1111 | 1119 | ||
1112 | /* Don't free association on exit. */ | 1120 | /* Don't free association on exit. */ |
@@ -4170,7 +4178,7 @@ static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to, | |||
4170 | to += addrlen; | 4178 | to += addrlen; |
4171 | cnt ++; | 4179 | cnt ++; |
4172 | space_left -= addrlen; | 4180 | space_left -= addrlen; |
4173 | bytes_copied += addrlen; | 4181 | *bytes_copied += addrlen; |
4174 | } | 4182 | } |
4175 | 4183 | ||
4176 | return cnt; | 4184 | return cnt; |