aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-06 13:30:12 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-06 13:30:12 -0400
commit1feb17e286339382a1ae36e0fecc4d88c2d7f123 (patch)
treef90019dea4e08d290710a7c3aaae0bb2bf239a40
parentdadde13ad86bf45bc71f0663a6ce3dfe5dd4ecc5 (diff)
parent25442cafb8cc3d979418caccabc91260707a0947 (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.c1
-rw-r--r--net/core/netpoll.c6
-rw-r--r--net/core/skbuff.c1
-rw-r--r--net/netfilter/nf_conntrack_h323_asn1.c4
-rw-r--r--net/sctp/ipv6.c4
-rw-r--r--net/sctp/socket.c12
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
19static ATOMIC_NOTIFIER_HEAD(netevent_notif_chain); 20static 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);
2211EXPORT_SYMBOL(pskb_expand_head); 2211EXPORT_SYMBOL(pskb_expand_head);
2212EXPORT_SYMBOL(skb_checksum); 2212EXPORT_SYMBOL(skb_checksum);
2213EXPORT_SYMBOL(skb_clone); 2213EXPORT_SYMBOL(skb_clone);
2214EXPORT_SYMBOL(skb_clone_fraglist);
2215EXPORT_SYMBOL(skb_copy); 2214EXPORT_SYMBOL(skb_copy);
2216EXPORT_SYMBOL(skb_copy_and_csum_bits); 2215EXPORT_SYMBOL(skb_copy_and_csum_bits);
2217EXPORT_SYMBOL(skb_copy_and_csum_dev); 2216EXPORT_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;