diff options
-rw-r--r-- | drivers/atm/firestream.c | 15 | ||||
-rw-r--r-- | drivers/net/tg3.c | 5 | ||||
-rw-r--r-- | include/net/af_unix.h | 8 | ||||
-rw-r--r-- | net/8021q/vlan.c | 3 | ||||
-rw-r--r-- | net/core/sock.c | 2 | ||||
-rw-r--r-- | net/dccp/probe.c | 2 | ||||
-rw-r--r-- | net/ipv4/datagram.c | 6 | ||||
-rw-r--r-- | net/ipv4/icmp.c | 15 | ||||
-rw-r--r-- | net/ipv4/inet_connection_sock.c | 4 | ||||
-rw-r--r-- | net/ipv4/tcp.c | 3 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 4 | ||||
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 5 | ||||
-rw-r--r-- | net/ipv4/udp.c | 5 | ||||
-rw-r--r-- | net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | 3 | ||||
-rw-r--r-- | net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c | 3 | ||||
-rw-r--r-- | net/sched/act_pedit.c | 3 | ||||
-rw-r--r-- | net/sched/sch_generic.c | 3 | ||||
-rw-r--r-- | net/sctp/debug.c | 8 | ||||
-rw-r--r-- | net/sctp/sm_statetable.c | 2 | ||||
-rw-r--r-- | net/unix/af_unix.c | 127 | ||||
-rw-r--r-- | net/wanrouter/wanmain.c | 2 |
21 files changed, 132 insertions, 96 deletions
diff --git a/drivers/atm/firestream.c b/drivers/atm/firestream.c index 9c67df5ccfa4..7f6d02ce1b5f 100644 --- a/drivers/atm/firestream.c +++ b/drivers/atm/firestream.c | |||
@@ -1475,6 +1475,7 @@ static void top_off_fp (struct fs_dev *dev, struct freepool *fp, | |||
1475 | struct FS_BPENTRY *qe, *ne; | 1475 | struct FS_BPENTRY *qe, *ne; |
1476 | struct sk_buff *skb; | 1476 | struct sk_buff *skb; |
1477 | int n = 0; | 1477 | int n = 0; |
1478 | u32 qe_tmp; | ||
1478 | 1479 | ||
1479 | fs_dprintk (FS_DEBUG_QUEUE, "Topping off queue at %x (%d-%d/%d)\n", | 1480 | fs_dprintk (FS_DEBUG_QUEUE, "Topping off queue at %x (%d-%d/%d)\n", |
1480 | fp->offset, read_fs (dev, FP_CNT (fp->offset)), fp->n, | 1481 | fp->offset, read_fs (dev, FP_CNT (fp->offset)), fp->n, |
@@ -1502,10 +1503,16 @@ static void top_off_fp (struct fs_dev *dev, struct freepool *fp, | |||
1502 | ne->skb = skb; | 1503 | ne->skb = skb; |
1503 | ne->fp = fp; | 1504 | ne->fp = fp; |
1504 | 1505 | ||
1505 | qe = (struct FS_BPENTRY *) (read_fs (dev, FP_EA(fp->offset))); | 1506 | /* |
1506 | fs_dprintk (FS_DEBUG_QUEUE, "link at %p\n", qe); | 1507 | * FIXME: following code encodes and decodes |
1507 | if (qe) { | 1508 | * machine pointers (could be 64-bit) into a |
1508 | qe = bus_to_virt ((long) qe); | 1509 | * 32-bit register. |
1510 | */ | ||
1511 | |||
1512 | qe_tmp = read_fs (dev, FP_EA(fp->offset)); | ||
1513 | fs_dprintk (FS_DEBUG_QUEUE, "link at %x\n", qe_tmp); | ||
1514 | if (qe_tmp) { | ||
1515 | qe = bus_to_virt ((long) qe_tmp); | ||
1509 | qe->next = virt_to_bus(ne); | 1516 | qe->next = virt_to_bus(ne); |
1510 | qe->flags &= ~FP_FLAGS_EPI; | 1517 | qe->flags &= ~FP_FLAGS_EPI; |
1511 | } else | 1518 | } else |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 023779a581fd..2f3184184ad9 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -64,8 +64,8 @@ | |||
64 | 64 | ||
65 | #define DRV_MODULE_NAME "tg3" | 65 | #define DRV_MODULE_NAME "tg3" |
66 | #define PFX DRV_MODULE_NAME ": " | 66 | #define PFX DRV_MODULE_NAME ": " |
67 | #define DRV_MODULE_VERSION "3.76" | 67 | #define DRV_MODULE_VERSION "3.77" |
68 | #define DRV_MODULE_RELDATE "May 5, 2007" | 68 | #define DRV_MODULE_RELDATE "May 31, 2007" |
69 | 69 | ||
70 | #define TG3_DEF_MAC_MODE 0 | 70 | #define TG3_DEF_MAC_MODE 0 |
71 | #define TG3_DEF_RX_MODE 0 | 71 | #define TG3_DEF_RX_MODE 0 |
@@ -10961,6 +10961,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
10961 | * upon subsystem IDs. | 10961 | * upon subsystem IDs. |
10962 | */ | 10962 | */ |
10963 | if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && | 10963 | if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && |
10964 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 && | ||
10964 | !(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) { | 10965 | !(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) { |
10965 | tp->tg3_flags |= (TG3_FLAG_USE_MI_INTERRUPT | | 10966 | tp->tg3_flags |= (TG3_FLAG_USE_MI_INTERRUPT | |
10966 | TG3_FLAG_USE_LINKCHG_REG); | 10967 | TG3_FLAG_USE_LINKCHG_REG); |
diff --git a/include/net/af_unix.h b/include/net/af_unix.h index c0398f5a8cb9..65f49fd7deff 100644 --- a/include/net/af_unix.h +++ b/include/net/af_unix.h | |||
@@ -62,13 +62,11 @@ struct unix_skb_parms { | |||
62 | #define UNIXCREDS(skb) (&UNIXCB((skb)).creds) | 62 | #define UNIXCREDS(skb) (&UNIXCB((skb)).creds) |
63 | #define UNIXSID(skb) (&UNIXCB((skb)).secid) | 63 | #define UNIXSID(skb) (&UNIXCB((skb)).secid) |
64 | 64 | ||
65 | #define unix_state_rlock(s) spin_lock(&unix_sk(s)->lock) | 65 | #define unix_state_lock(s) spin_lock(&unix_sk(s)->lock) |
66 | #define unix_state_runlock(s) spin_unlock(&unix_sk(s)->lock) | 66 | #define unix_state_unlock(s) spin_unlock(&unix_sk(s)->lock) |
67 | #define unix_state_wlock(s) spin_lock(&unix_sk(s)->lock) | 67 | #define unix_state_lock_nested(s) \ |
68 | #define unix_state_wlock_nested(s) \ | ||
69 | spin_lock_nested(&unix_sk(s)->lock, \ | 68 | spin_lock_nested(&unix_sk(s)->lock, \ |
70 | SINGLE_DEPTH_NESTING) | 69 | SINGLE_DEPTH_NESTING) |
71 | #define unix_state_wunlock(s) spin_unlock(&unix_sk(s)->lock) | ||
72 | 70 | ||
73 | #ifdef __KERNEL__ | 71 | #ifdef __KERNEL__ |
74 | /* The AF_UNIX socket */ | 72 | /* The AF_UNIX socket */ |
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index ceef57c9ab32..de78c9dd713b 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
@@ -736,8 +736,7 @@ static int vlan_ioctl_handler(void __user *arg) | |||
736 | case SET_VLAN_NAME_TYPE_CMD: | 736 | case SET_VLAN_NAME_TYPE_CMD: |
737 | if (!capable(CAP_NET_ADMIN)) | 737 | if (!capable(CAP_NET_ADMIN)) |
738 | return -EPERM; | 738 | return -EPERM; |
739 | if ((args.u.name_type >= 0) && | 739 | if (args.u.name_type < VLAN_NAME_TYPE_HIGHEST) { |
740 | (args.u.name_type < VLAN_NAME_TYPE_HIGHEST)) { | ||
741 | vlan_name_type = args.u.name_type; | 740 | vlan_name_type = args.u.name_type; |
742 | err = 0; | 741 | err = 0; |
743 | } else { | 742 | } else { |
diff --git a/net/core/sock.c b/net/core/sock.c index 7e51d3a5e4f6..c14ce0198d25 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -998,7 +998,7 @@ void sk_setup_caps(struct sock *sk, struct dst_entry *dst) | |||
998 | __sk_dst_set(sk, dst); | 998 | __sk_dst_set(sk, dst); |
999 | sk->sk_route_caps = dst->dev->features; | 999 | sk->sk_route_caps = dst->dev->features; |
1000 | if (sk->sk_route_caps & NETIF_F_GSO) | 1000 | if (sk->sk_route_caps & NETIF_F_GSO) |
1001 | sk->sk_route_caps |= NETIF_F_GSO_MASK; | 1001 | sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE; |
1002 | if (sk_can_gso(sk)) { | 1002 | if (sk_can_gso(sk)) { |
1003 | if (dst->header_len) | 1003 | if (dst->header_len) |
1004 | sk->sk_route_caps &= ~NETIF_F_GSO_MASK; | 1004 | sk->sk_route_caps &= ~NETIF_F_GSO_MASK; |
diff --git a/net/dccp/probe.c b/net/dccp/probe.c index 1f5e3ba62065..43a3adb027e7 100644 --- a/net/dccp/probe.c +++ b/net/dccp/probe.c | |||
@@ -128,7 +128,7 @@ static ssize_t dccpprobe_read(struct file *file, char __user *buf, | |||
128 | int error = 0, cnt = 0; | 128 | int error = 0, cnt = 0; |
129 | unsigned char *tbuf; | 129 | unsigned char *tbuf; |
130 | 130 | ||
131 | if (!buf || len < 0) | 131 | if (!buf) |
132 | return -EINVAL; | 132 | return -EINVAL; |
133 | 133 | ||
134 | if (len == 0) | 134 | if (len == 0) |
diff --git a/net/ipv4/datagram.c b/net/ipv4/datagram.c index dd02a45d0f67..0301dd468cf4 100644 --- a/net/ipv4/datagram.c +++ b/net/ipv4/datagram.c | |||
@@ -50,8 +50,12 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) | |||
50 | RT_CONN_FLAGS(sk), oif, | 50 | RT_CONN_FLAGS(sk), oif, |
51 | sk->sk_protocol, | 51 | sk->sk_protocol, |
52 | inet->sport, usin->sin_port, sk, 1); | 52 | inet->sport, usin->sin_port, sk, 1); |
53 | if (err) | 53 | if (err) { |
54 | if (err == -ENETUNREACH) | ||
55 | IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); | ||
54 | return err; | 56 | return err; |
57 | } | ||
58 | |||
55 | if ((rt->rt_flags & RTCF_BROADCAST) && !sock_flag(sk, SOCK_BROADCAST)) { | 59 | if ((rt->rt_flags & RTCF_BROADCAST) && !sock_flag(sk, SOCK_BROADCAST)) { |
56 | ip_rt_put(rt); | 60 | ip_rt_put(rt); |
57 | return -EACCES; | 61 | return -EACCES; |
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index e238b17f554c..02a899bec196 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
@@ -514,12 +514,15 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info) | |||
514 | 514 | ||
515 | saddr = iph->daddr; | 515 | saddr = iph->daddr; |
516 | if (!(rt->rt_flags & RTCF_LOCAL)) { | 516 | if (!(rt->rt_flags & RTCF_LOCAL)) { |
517 | /* This is broken, skb_in->dev points to the outgoing device | 517 | struct net_device *dev = NULL; |
518 | * after the packet passes through ip_output(). | 518 | |
519 | */ | 519 | if (rt->fl.iif && sysctl_icmp_errors_use_inbound_ifaddr) |
520 | if (skb_in->dev && sysctl_icmp_errors_use_inbound_ifaddr) | 520 | dev = dev_get_by_index(rt->fl.iif); |
521 | saddr = inet_select_addr(skb_in->dev, 0, RT_SCOPE_LINK); | 521 | |
522 | else | 522 | if (dev) { |
523 | saddr = inet_select_addr(dev, 0, RT_SCOPE_LINK); | ||
524 | dev_put(dev); | ||
525 | } else | ||
523 | saddr = 0; | 526 | saddr = 0; |
524 | } | 527 | } |
525 | 528 | ||
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 43fb1600f1f0..fbe7714f21d0 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c | |||
@@ -31,10 +31,8 @@ EXPORT_SYMBOL(inet_csk_timer_bug_msg); | |||
31 | 31 | ||
32 | /* | 32 | /* |
33 | * This array holds the first and last local port number. | 33 | * This array holds the first and last local port number. |
34 | * For high-usage systems, use sysctl to change this to | ||
35 | * 32768-61000 | ||
36 | */ | 34 | */ |
37 | int sysctl_local_port_range[2] = { 1024, 4999 }; | 35 | int sysctl_local_port_range[2] = { 32768, 61000 }; |
38 | 36 | ||
39 | int inet_csk_bind_conflict(const struct sock *sk, | 37 | int inet_csk_bind_conflict(const struct sock *sk, |
40 | const struct inet_bind_bucket *tb) | 38 | const struct inet_bind_bucket *tb) |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 766314505c09..cd3c7e95de9e 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -2464,13 +2464,10 @@ void __init tcp_init(void) | |||
2464 | order++) | 2464 | order++) |
2465 | ; | 2465 | ; |
2466 | if (order >= 4) { | 2466 | if (order >= 4) { |
2467 | sysctl_local_port_range[0] = 32768; | ||
2468 | sysctl_local_port_range[1] = 61000; | ||
2469 | tcp_death_row.sysctl_max_tw_buckets = 180000; | 2467 | tcp_death_row.sysctl_max_tw_buckets = 180000; |
2470 | sysctl_tcp_max_orphans = 4096 << (order - 4); | 2468 | sysctl_tcp_max_orphans = 4096 << (order - 4); |
2471 | sysctl_max_syn_backlog = 1024; | 2469 | sysctl_max_syn_backlog = 1024; |
2472 | } else if (order < 3) { | 2470 | } else if (order < 3) { |
2473 | sysctl_local_port_range[0] = 1024 * (3 - order); | ||
2474 | tcp_death_row.sysctl_max_tw_buckets >>= (3 - order); | 2471 | tcp_death_row.sysctl_max_tw_buckets >>= (3 - order); |
2475 | sysctl_tcp_max_orphans >>= (3 - order); | 2472 | sysctl_tcp_max_orphans >>= (3 - order); |
2476 | sysctl_max_syn_backlog = 128; | 2473 | sysctl_max_syn_backlog = 128; |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 38cb25b48bf3..74683d81c3f1 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -2407,8 +2407,8 @@ static int tcp_clean_rtx_queue(struct sock *sk, __s32 *seq_rtt_p) | |||
2407 | struct sk_buff *skb; | 2407 | struct sk_buff *skb; |
2408 | __u32 now = tcp_time_stamp; | 2408 | __u32 now = tcp_time_stamp; |
2409 | int acked = 0; | 2409 | int acked = 0; |
2410 | int prior_packets = tp->packets_out; | ||
2410 | __s32 seq_rtt = -1; | 2411 | __s32 seq_rtt = -1; |
2411 | u32 pkts_acked = 0; | ||
2412 | ktime_t last_ackt = ktime_set(0,0); | 2412 | ktime_t last_ackt = ktime_set(0,0); |
2413 | 2413 | ||
2414 | while ((skb = tcp_write_queue_head(sk)) && | 2414 | while ((skb = tcp_write_queue_head(sk)) && |
@@ -2437,7 +2437,6 @@ static int tcp_clean_rtx_queue(struct sock *sk, __s32 *seq_rtt_p) | |||
2437 | */ | 2437 | */ |
2438 | if (!(scb->flags & TCPCB_FLAG_SYN)) { | 2438 | if (!(scb->flags & TCPCB_FLAG_SYN)) { |
2439 | acked |= FLAG_DATA_ACKED; | 2439 | acked |= FLAG_DATA_ACKED; |
2440 | ++pkts_acked; | ||
2441 | } else { | 2440 | } else { |
2442 | acked |= FLAG_SYN_ACKED; | 2441 | acked |= FLAG_SYN_ACKED; |
2443 | tp->retrans_stamp = 0; | 2442 | tp->retrans_stamp = 0; |
@@ -2481,6 +2480,7 @@ static int tcp_clean_rtx_queue(struct sock *sk, __s32 *seq_rtt_p) | |||
2481 | } | 2480 | } |
2482 | 2481 | ||
2483 | if (acked&FLAG_ACKED) { | 2482 | if (acked&FLAG_ACKED) { |
2483 | u32 pkts_acked = prior_packets - tp->packets_out; | ||
2484 | const struct tcp_congestion_ops *ca_ops | 2484 | const struct tcp_congestion_ops *ca_ops |
2485 | = inet_csk(sk)->icsk_ca_ops; | 2485 | = inet_csk(sk)->icsk_ca_ops; |
2486 | 2486 | ||
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 5a3e7f839fc5..47c61055eb60 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -192,8 +192,11 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) | |||
192 | RT_CONN_FLAGS(sk), sk->sk_bound_dev_if, | 192 | RT_CONN_FLAGS(sk), sk->sk_bound_dev_if, |
193 | IPPROTO_TCP, | 193 | IPPROTO_TCP, |
194 | inet->sport, usin->sin_port, sk, 1); | 194 | inet->sport, usin->sin_port, sk, 1); |
195 | if (tmp < 0) | 195 | if (tmp < 0) { |
196 | if (tmp == -ENETUNREACH) | ||
197 | IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); | ||
196 | return tmp; | 198 | return tmp; |
199 | } | ||
197 | 200 | ||
198 | if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) { | 201 | if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) { |
199 | ip_rt_put(rt); | 202 | ip_rt_put(rt); |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 4c7e95fa090d..5da703e699da 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -722,8 +722,11 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
722 | .dport = dport } } }; | 722 | .dport = dport } } }; |
723 | security_sk_classify_flow(sk, &fl); | 723 | security_sk_classify_flow(sk, &fl); |
724 | err = ip_route_output_flow(&rt, &fl, sk, 1); | 724 | err = ip_route_output_flow(&rt, &fl, sk, 1); |
725 | if (err) | 725 | if (err) { |
726 | if (err == -ENETUNREACH) | ||
727 | IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); | ||
726 | goto out; | 728 | goto out; |
729 | } | ||
727 | 730 | ||
728 | err = -EACCES; | 731 | err = -EACCES; |
729 | if ((rt->rt_flags & RTCF_BROADCAST) && | 732 | if ((rt->rt_flags & RTCF_BROADCAST) && |
diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c index 6d2a08205111..dc442fb791b0 100644 --- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c +++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | |||
@@ -177,8 +177,7 @@ static unsigned int ipv6_confirm(unsigned int hooknum, | |||
177 | 177 | ||
178 | protoff = nf_ct_ipv6_skip_exthdr(*pskb, extoff, &pnum, | 178 | protoff = nf_ct_ipv6_skip_exthdr(*pskb, extoff, &pnum, |
179 | (*pskb)->len - extoff); | 179 | (*pskb)->len - extoff); |
180 | if (protoff < 0 || protoff > (*pskb)->len || | 180 | if (protoff > (*pskb)->len || pnum == NEXTHDR_FRAGMENT) { |
181 | pnum == NEXTHDR_FRAGMENT) { | ||
182 | DEBUGP("proto header not found\n"); | 181 | DEBUGP("proto header not found\n"); |
183 | return NF_ACCEPT; | 182 | return NF_ACCEPT; |
184 | } | 183 | } |
diff --git a/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c b/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c index 0be790d250f9..8814b95b2326 100644 --- a/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c +++ b/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c | |||
@@ -168,8 +168,7 @@ icmpv6_error_message(struct sk_buff *skb, | |||
168 | skb->len - inip6off | 168 | skb->len - inip6off |
169 | - sizeof(struct ipv6hdr)); | 169 | - sizeof(struct ipv6hdr)); |
170 | 170 | ||
171 | if ((inprotoff < 0) || (inprotoff > skb->len) || | 171 | if ((inprotoff > skb->len) || (inprotonum == NEXTHDR_FRAGMENT)) { |
172 | (inprotonum == NEXTHDR_FRAGMENT)) { | ||
173 | DEBUGP("icmpv6_error: Can't get protocol header in ICMPv6 payload.\n"); | 172 | DEBUGP("icmpv6_error: Can't get protocol header in ICMPv6 payload.\n"); |
174 | return -NF_ACCEPT; | 173 | return -NF_ACCEPT; |
175 | } | 174 | } |
diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c index 45b3cda86a21..6f8684b5617e 100644 --- a/net/sched/act_pedit.c +++ b/net/sched/act_pedit.c | |||
@@ -164,8 +164,7 @@ static int tcf_pedit(struct sk_buff *skb, struct tc_action *a, | |||
164 | printk("offset must be on 32 bit boundaries\n"); | 164 | printk("offset must be on 32 bit boundaries\n"); |
165 | goto bad; | 165 | goto bad; |
166 | } | 166 | } |
167 | if (skb->len < 0 || | 167 | if (offset > 0 && offset > skb->len) { |
168 | (offset > 0 && offset > skb->len)) { | ||
169 | printk("offset %d cant exceed pkt length %d\n", | 168 | printk("offset %d cant exceed pkt length %d\n", |
170 | offset, skb->len); | 169 | offset, skb->len); |
171 | goto bad; | 170 | goto bad; |
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index cbefe225581e..f4d34480a093 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -224,7 +224,8 @@ void __netdev_watchdog_up(struct net_device *dev) | |||
224 | if (dev->tx_timeout) { | 224 | if (dev->tx_timeout) { |
225 | if (dev->watchdog_timeo <= 0) | 225 | if (dev->watchdog_timeo <= 0) |
226 | dev->watchdog_timeo = 5*HZ; | 226 | dev->watchdog_timeo = 5*HZ; |
227 | if (!mod_timer(&dev->watchdog_timer, jiffies + dev->watchdog_timeo)) | 227 | if (!mod_timer(&dev->watchdog_timer, |
228 | round_jiffies(jiffies + dev->watchdog_timeo))) | ||
228 | dev_hold(dev); | 229 | dev_hold(dev); |
229 | } | 230 | } |
230 | } | 231 | } |
diff --git a/net/sctp/debug.c b/net/sctp/debug.c index e8c0f7435d7f..80f70aa53386 100644 --- a/net/sctp/debug.c +++ b/net/sctp/debug.c | |||
@@ -77,8 +77,6 @@ static const char *sctp_cid_tbl[SCTP_NUM_BASE_CHUNK_TYPES] = { | |||
77 | /* Lookup "chunk type" debug name. */ | 77 | /* Lookup "chunk type" debug name. */ |
78 | const char *sctp_cname(const sctp_subtype_t cid) | 78 | const char *sctp_cname(const sctp_subtype_t cid) |
79 | { | 79 | { |
80 | if (cid.chunk < 0) | ||
81 | return "illegal chunk id"; | ||
82 | if (cid.chunk <= SCTP_CID_BASE_MAX) | 80 | if (cid.chunk <= SCTP_CID_BASE_MAX) |
83 | return sctp_cid_tbl[cid.chunk]; | 81 | return sctp_cid_tbl[cid.chunk]; |
84 | 82 | ||
@@ -146,8 +144,6 @@ static const char *sctp_primitive_tbl[SCTP_NUM_PRIMITIVE_TYPES] = { | |||
146 | /* Lookup primitive debug name. */ | 144 | /* Lookup primitive debug name. */ |
147 | const char *sctp_pname(const sctp_subtype_t id) | 145 | const char *sctp_pname(const sctp_subtype_t id) |
148 | { | 146 | { |
149 | if (id.primitive < 0) | ||
150 | return "illegal primitive"; | ||
151 | if (id.primitive <= SCTP_EVENT_PRIMITIVE_MAX) | 147 | if (id.primitive <= SCTP_EVENT_PRIMITIVE_MAX) |
152 | return sctp_primitive_tbl[id.primitive]; | 148 | return sctp_primitive_tbl[id.primitive]; |
153 | return "unknown_primitive"; | 149 | return "unknown_primitive"; |
@@ -161,8 +157,6 @@ static const char *sctp_other_tbl[] = { | |||
161 | /* Lookup "other" debug name. */ | 157 | /* Lookup "other" debug name. */ |
162 | const char *sctp_oname(const sctp_subtype_t id) | 158 | const char *sctp_oname(const sctp_subtype_t id) |
163 | { | 159 | { |
164 | if (id.other < 0) | ||
165 | return "illegal 'other' event"; | ||
166 | if (id.other <= SCTP_EVENT_OTHER_MAX) | 160 | if (id.other <= SCTP_EVENT_OTHER_MAX) |
167 | return sctp_other_tbl[id.other]; | 161 | return sctp_other_tbl[id.other]; |
168 | return "unknown 'other' event"; | 162 | return "unknown 'other' event"; |
@@ -184,8 +178,6 @@ static const char *sctp_timer_tbl[] = { | |||
184 | /* Lookup timer debug name. */ | 178 | /* Lookup timer debug name. */ |
185 | const char *sctp_tname(const sctp_subtype_t id) | 179 | const char *sctp_tname(const sctp_subtype_t id) |
186 | { | 180 | { |
187 | if (id.timeout < 0) | ||
188 | return "illegal 'timer' event"; | ||
189 | if (id.timeout <= SCTP_EVENT_TIMEOUT_MAX) | 181 | if (id.timeout <= SCTP_EVENT_TIMEOUT_MAX) |
190 | return sctp_timer_tbl[id.timeout]; | 182 | return sctp_timer_tbl[id.timeout]; |
191 | return "unknown_timer"; | 183 | return "unknown_timer"; |
diff --git a/net/sctp/sm_statetable.c b/net/sctp/sm_statetable.c index 523071c7902f..70a91ece3c49 100644 --- a/net/sctp/sm_statetable.c +++ b/net/sctp/sm_statetable.c | |||
@@ -960,7 +960,7 @@ static const sctp_sm_table_entry_t *sctp_chunk_event_lookup(sctp_cid_t cid, | |||
960 | if (state > SCTP_STATE_MAX) | 960 | if (state > SCTP_STATE_MAX) |
961 | return &bug; | 961 | return &bug; |
962 | 962 | ||
963 | if (cid >= 0 && cid <= SCTP_CID_BASE_MAX) | 963 | if (cid <= SCTP_CID_BASE_MAX) |
964 | return &chunk_event_table[cid][state]; | 964 | return &chunk_event_table[cid][state]; |
965 | 965 | ||
966 | if (sctp_prsctp_enable) { | 966 | if (sctp_prsctp_enable) { |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index fc12ba51c1fc..87c794d8fa2d 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -174,11 +174,11 @@ static struct sock *unix_peer_get(struct sock *s) | |||
174 | { | 174 | { |
175 | struct sock *peer; | 175 | struct sock *peer; |
176 | 176 | ||
177 | unix_state_rlock(s); | 177 | unix_state_lock(s); |
178 | peer = unix_peer(s); | 178 | peer = unix_peer(s); |
179 | if (peer) | 179 | if (peer) |
180 | sock_hold(peer); | 180 | sock_hold(peer); |
181 | unix_state_runlock(s); | 181 | unix_state_unlock(s); |
182 | return peer; | 182 | return peer; |
183 | } | 183 | } |
184 | 184 | ||
@@ -369,7 +369,7 @@ static int unix_release_sock (struct sock *sk, int embrion) | |||
369 | unix_remove_socket(sk); | 369 | unix_remove_socket(sk); |
370 | 370 | ||
371 | /* Clear state */ | 371 | /* Clear state */ |
372 | unix_state_wlock(sk); | 372 | unix_state_lock(sk); |
373 | sock_orphan(sk); | 373 | sock_orphan(sk); |
374 | sk->sk_shutdown = SHUTDOWN_MASK; | 374 | sk->sk_shutdown = SHUTDOWN_MASK; |
375 | dentry = u->dentry; | 375 | dentry = u->dentry; |
@@ -378,7 +378,7 @@ static int unix_release_sock (struct sock *sk, int embrion) | |||
378 | u->mnt = NULL; | 378 | u->mnt = NULL; |
379 | state = sk->sk_state; | 379 | state = sk->sk_state; |
380 | sk->sk_state = TCP_CLOSE; | 380 | sk->sk_state = TCP_CLOSE; |
381 | unix_state_wunlock(sk); | 381 | unix_state_unlock(sk); |
382 | 382 | ||
383 | wake_up_interruptible_all(&u->peer_wait); | 383 | wake_up_interruptible_all(&u->peer_wait); |
384 | 384 | ||
@@ -386,12 +386,12 @@ static int unix_release_sock (struct sock *sk, int embrion) | |||
386 | 386 | ||
387 | if (skpair!=NULL) { | 387 | if (skpair!=NULL) { |
388 | if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) { | 388 | if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) { |
389 | unix_state_wlock(skpair); | 389 | unix_state_lock(skpair); |
390 | /* No more writes */ | 390 | /* No more writes */ |
391 | skpair->sk_shutdown = SHUTDOWN_MASK; | 391 | skpair->sk_shutdown = SHUTDOWN_MASK; |
392 | if (!skb_queue_empty(&sk->sk_receive_queue) || embrion) | 392 | if (!skb_queue_empty(&sk->sk_receive_queue) || embrion) |
393 | skpair->sk_err = ECONNRESET; | 393 | skpair->sk_err = ECONNRESET; |
394 | unix_state_wunlock(skpair); | 394 | unix_state_unlock(skpair); |
395 | skpair->sk_state_change(skpair); | 395 | skpair->sk_state_change(skpair); |
396 | read_lock(&skpair->sk_callback_lock); | 396 | read_lock(&skpair->sk_callback_lock); |
397 | sk_wake_async(skpair,1,POLL_HUP); | 397 | sk_wake_async(skpair,1,POLL_HUP); |
@@ -448,7 +448,7 @@ static int unix_listen(struct socket *sock, int backlog) | |||
448 | err = -EINVAL; | 448 | err = -EINVAL; |
449 | if (!u->addr) | 449 | if (!u->addr) |
450 | goto out; /* No listens on an unbound socket */ | 450 | goto out; /* No listens on an unbound socket */ |
451 | unix_state_wlock(sk); | 451 | unix_state_lock(sk); |
452 | if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN) | 452 | if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN) |
453 | goto out_unlock; | 453 | goto out_unlock; |
454 | if (backlog > sk->sk_max_ack_backlog) | 454 | if (backlog > sk->sk_max_ack_backlog) |
@@ -462,7 +462,7 @@ static int unix_listen(struct socket *sock, int backlog) | |||
462 | err = 0; | 462 | err = 0; |
463 | 463 | ||
464 | out_unlock: | 464 | out_unlock: |
465 | unix_state_wunlock(sk); | 465 | unix_state_unlock(sk); |
466 | out: | 466 | out: |
467 | return err; | 467 | return err; |
468 | } | 468 | } |
@@ -858,6 +858,31 @@ out_mknod_parent: | |||
858 | goto out_up; | 858 | goto out_up; |
859 | } | 859 | } |
860 | 860 | ||
861 | static void unix_state_double_lock(struct sock *sk1, struct sock *sk2) | ||
862 | { | ||
863 | if (unlikely(sk1 == sk2) || !sk2) { | ||
864 | unix_state_lock(sk1); | ||
865 | return; | ||
866 | } | ||
867 | if (sk1 < sk2) { | ||
868 | unix_state_lock(sk1); | ||
869 | unix_state_lock_nested(sk2); | ||
870 | } else { | ||
871 | unix_state_lock(sk2); | ||
872 | unix_state_lock_nested(sk1); | ||
873 | } | ||
874 | } | ||
875 | |||
876 | static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2) | ||
877 | { | ||
878 | if (unlikely(sk1 == sk2) || !sk2) { | ||
879 | unix_state_unlock(sk1); | ||
880 | return; | ||
881 | } | ||
882 | unix_state_unlock(sk1); | ||
883 | unix_state_unlock(sk2); | ||
884 | } | ||
885 | |||
861 | static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr, | 886 | static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr, |
862 | int alen, int flags) | 887 | int alen, int flags) |
863 | { | 888 | { |
@@ -877,11 +902,19 @@ static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr, | |||
877 | !unix_sk(sk)->addr && (err = unix_autobind(sock)) != 0) | 902 | !unix_sk(sk)->addr && (err = unix_autobind(sock)) != 0) |
878 | goto out; | 903 | goto out; |
879 | 904 | ||
905 | restart: | ||
880 | other=unix_find_other(sunaddr, alen, sock->type, hash, &err); | 906 | other=unix_find_other(sunaddr, alen, sock->type, hash, &err); |
881 | if (!other) | 907 | if (!other) |
882 | goto out; | 908 | goto out; |
883 | 909 | ||
884 | unix_state_wlock(sk); | 910 | unix_state_double_lock(sk, other); |
911 | |||
912 | /* Apparently VFS overslept socket death. Retry. */ | ||
913 | if (sock_flag(other, SOCK_DEAD)) { | ||
914 | unix_state_double_unlock(sk, other); | ||
915 | sock_put(other); | ||
916 | goto restart; | ||
917 | } | ||
885 | 918 | ||
886 | err = -EPERM; | 919 | err = -EPERM; |
887 | if (!unix_may_send(sk, other)) | 920 | if (!unix_may_send(sk, other)) |
@@ -896,7 +929,7 @@ static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr, | |||
896 | * 1003.1g breaking connected state with AF_UNSPEC | 929 | * 1003.1g breaking connected state with AF_UNSPEC |
897 | */ | 930 | */ |
898 | other = NULL; | 931 | other = NULL; |
899 | unix_state_wlock(sk); | 932 | unix_state_double_lock(sk, other); |
900 | } | 933 | } |
901 | 934 | ||
902 | /* | 935 | /* |
@@ -905,19 +938,19 @@ static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr, | |||
905 | if (unix_peer(sk)) { | 938 | if (unix_peer(sk)) { |
906 | struct sock *old_peer = unix_peer(sk); | 939 | struct sock *old_peer = unix_peer(sk); |
907 | unix_peer(sk)=other; | 940 | unix_peer(sk)=other; |
908 | unix_state_wunlock(sk); | 941 | unix_state_double_unlock(sk, other); |
909 | 942 | ||
910 | if (other != old_peer) | 943 | if (other != old_peer) |
911 | unix_dgram_disconnected(sk, old_peer); | 944 | unix_dgram_disconnected(sk, old_peer); |
912 | sock_put(old_peer); | 945 | sock_put(old_peer); |
913 | } else { | 946 | } else { |
914 | unix_peer(sk)=other; | 947 | unix_peer(sk)=other; |
915 | unix_state_wunlock(sk); | 948 | unix_state_double_unlock(sk, other); |
916 | } | 949 | } |
917 | return 0; | 950 | return 0; |
918 | 951 | ||
919 | out_unlock: | 952 | out_unlock: |
920 | unix_state_wunlock(sk); | 953 | unix_state_double_unlock(sk, other); |
921 | sock_put(other); | 954 | sock_put(other); |
922 | out: | 955 | out: |
923 | return err; | 956 | return err; |
@@ -936,7 +969,7 @@ static long unix_wait_for_peer(struct sock *other, long timeo) | |||
936 | (skb_queue_len(&other->sk_receive_queue) > | 969 | (skb_queue_len(&other->sk_receive_queue) > |
937 | other->sk_max_ack_backlog); | 970 | other->sk_max_ack_backlog); |
938 | 971 | ||
939 | unix_state_runlock(other); | 972 | unix_state_unlock(other); |
940 | 973 | ||
941 | if (sched) | 974 | if (sched) |
942 | timeo = schedule_timeout(timeo); | 975 | timeo = schedule_timeout(timeo); |
@@ -994,11 +1027,11 @@ restart: | |||
994 | goto out; | 1027 | goto out; |
995 | 1028 | ||
996 | /* Latch state of peer */ | 1029 | /* Latch state of peer */ |
997 | unix_state_rlock(other); | 1030 | unix_state_lock(other); |
998 | 1031 | ||
999 | /* Apparently VFS overslept socket death. Retry. */ | 1032 | /* Apparently VFS overslept socket death. Retry. */ |
1000 | if (sock_flag(other, SOCK_DEAD)) { | 1033 | if (sock_flag(other, SOCK_DEAD)) { |
1001 | unix_state_runlock(other); | 1034 | unix_state_unlock(other); |
1002 | sock_put(other); | 1035 | sock_put(other); |
1003 | goto restart; | 1036 | goto restart; |
1004 | } | 1037 | } |
@@ -1048,18 +1081,18 @@ restart: | |||
1048 | goto out_unlock; | 1081 | goto out_unlock; |
1049 | } | 1082 | } |
1050 | 1083 | ||
1051 | unix_state_wlock_nested(sk); | 1084 | unix_state_lock_nested(sk); |
1052 | 1085 | ||
1053 | if (sk->sk_state != st) { | 1086 | if (sk->sk_state != st) { |
1054 | unix_state_wunlock(sk); | 1087 | unix_state_unlock(sk); |
1055 | unix_state_runlock(other); | 1088 | unix_state_unlock(other); |
1056 | sock_put(other); | 1089 | sock_put(other); |
1057 | goto restart; | 1090 | goto restart; |
1058 | } | 1091 | } |
1059 | 1092 | ||
1060 | err = security_unix_stream_connect(sock, other->sk_socket, newsk); | 1093 | err = security_unix_stream_connect(sock, other->sk_socket, newsk); |
1061 | if (err) { | 1094 | if (err) { |
1062 | unix_state_wunlock(sk); | 1095 | unix_state_unlock(sk); |
1063 | goto out_unlock; | 1096 | goto out_unlock; |
1064 | } | 1097 | } |
1065 | 1098 | ||
@@ -1096,7 +1129,7 @@ restart: | |||
1096 | smp_mb__after_atomic_inc(); /* sock_hold() does an atomic_inc() */ | 1129 | smp_mb__after_atomic_inc(); /* sock_hold() does an atomic_inc() */ |
1097 | unix_peer(sk) = newsk; | 1130 | unix_peer(sk) = newsk; |
1098 | 1131 | ||
1099 | unix_state_wunlock(sk); | 1132 | unix_state_unlock(sk); |
1100 | 1133 | ||
1101 | /* take ten and and send info to listening sock */ | 1134 | /* take ten and and send info to listening sock */ |
1102 | spin_lock(&other->sk_receive_queue.lock); | 1135 | spin_lock(&other->sk_receive_queue.lock); |
@@ -1105,14 +1138,14 @@ restart: | |||
1105 | * is installed to listening socket. */ | 1138 | * is installed to listening socket. */ |
1106 | atomic_inc(&newu->inflight); | 1139 | atomic_inc(&newu->inflight); |
1107 | spin_unlock(&other->sk_receive_queue.lock); | 1140 | spin_unlock(&other->sk_receive_queue.lock); |
1108 | unix_state_runlock(other); | 1141 | unix_state_unlock(other); |
1109 | other->sk_data_ready(other, 0); | 1142 | other->sk_data_ready(other, 0); |
1110 | sock_put(other); | 1143 | sock_put(other); |
1111 | return 0; | 1144 | return 0; |
1112 | 1145 | ||
1113 | out_unlock: | 1146 | out_unlock: |
1114 | if (other) | 1147 | if (other) |
1115 | unix_state_runlock(other); | 1148 | unix_state_unlock(other); |
1116 | 1149 | ||
1117 | out: | 1150 | out: |
1118 | if (skb) | 1151 | if (skb) |
@@ -1178,10 +1211,10 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags) | |||
1178 | wake_up_interruptible(&unix_sk(sk)->peer_wait); | 1211 | wake_up_interruptible(&unix_sk(sk)->peer_wait); |
1179 | 1212 | ||
1180 | /* attach accepted sock to socket */ | 1213 | /* attach accepted sock to socket */ |
1181 | unix_state_wlock(tsk); | 1214 | unix_state_lock(tsk); |
1182 | newsock->state = SS_CONNECTED; | 1215 | newsock->state = SS_CONNECTED; |
1183 | sock_graft(tsk, newsock); | 1216 | sock_graft(tsk, newsock); |
1184 | unix_state_wunlock(tsk); | 1217 | unix_state_unlock(tsk); |
1185 | return 0; | 1218 | return 0; |
1186 | 1219 | ||
1187 | out: | 1220 | out: |
@@ -1208,7 +1241,7 @@ static int unix_getname(struct socket *sock, struct sockaddr *uaddr, int *uaddr_ | |||
1208 | } | 1241 | } |
1209 | 1242 | ||
1210 | u = unix_sk(sk); | 1243 | u = unix_sk(sk); |
1211 | unix_state_rlock(sk); | 1244 | unix_state_lock(sk); |
1212 | if (!u->addr) { | 1245 | if (!u->addr) { |
1213 | sunaddr->sun_family = AF_UNIX; | 1246 | sunaddr->sun_family = AF_UNIX; |
1214 | sunaddr->sun_path[0] = 0; | 1247 | sunaddr->sun_path[0] = 0; |
@@ -1219,7 +1252,7 @@ static int unix_getname(struct socket *sock, struct sockaddr *uaddr, int *uaddr_ | |||
1219 | *uaddr_len = addr->len; | 1252 | *uaddr_len = addr->len; |
1220 | memcpy(sunaddr, addr->name, *uaddr_len); | 1253 | memcpy(sunaddr, addr->name, *uaddr_len); |
1221 | } | 1254 | } |
1222 | unix_state_runlock(sk); | 1255 | unix_state_unlock(sk); |
1223 | sock_put(sk); | 1256 | sock_put(sk); |
1224 | out: | 1257 | out: |
1225 | return err; | 1258 | return err; |
@@ -1337,7 +1370,7 @@ restart: | |||
1337 | goto out_free; | 1370 | goto out_free; |
1338 | } | 1371 | } |
1339 | 1372 | ||
1340 | unix_state_rlock(other); | 1373 | unix_state_lock(other); |
1341 | err = -EPERM; | 1374 | err = -EPERM; |
1342 | if (!unix_may_send(sk, other)) | 1375 | if (!unix_may_send(sk, other)) |
1343 | goto out_unlock; | 1376 | goto out_unlock; |
@@ -1347,20 +1380,20 @@ restart: | |||
1347 | * Check with 1003.1g - what should | 1380 | * Check with 1003.1g - what should |
1348 | * datagram error | 1381 | * datagram error |
1349 | */ | 1382 | */ |
1350 | unix_state_runlock(other); | 1383 | unix_state_unlock(other); |
1351 | sock_put(other); | 1384 | sock_put(other); |
1352 | 1385 | ||
1353 | err = 0; | 1386 | err = 0; |
1354 | unix_state_wlock(sk); | 1387 | unix_state_lock(sk); |
1355 | if (unix_peer(sk) == other) { | 1388 | if (unix_peer(sk) == other) { |
1356 | unix_peer(sk)=NULL; | 1389 | unix_peer(sk)=NULL; |
1357 | unix_state_wunlock(sk); | 1390 | unix_state_unlock(sk); |
1358 | 1391 | ||
1359 | unix_dgram_disconnected(sk, other); | 1392 | unix_dgram_disconnected(sk, other); |
1360 | sock_put(other); | 1393 | sock_put(other); |
1361 | err = -ECONNREFUSED; | 1394 | err = -ECONNREFUSED; |
1362 | } else { | 1395 | } else { |
1363 | unix_state_wunlock(sk); | 1396 | unix_state_unlock(sk); |
1364 | } | 1397 | } |
1365 | 1398 | ||
1366 | other = NULL; | 1399 | other = NULL; |
@@ -1397,14 +1430,14 @@ restart: | |||
1397 | } | 1430 | } |
1398 | 1431 | ||
1399 | skb_queue_tail(&other->sk_receive_queue, skb); | 1432 | skb_queue_tail(&other->sk_receive_queue, skb); |
1400 | unix_state_runlock(other); | 1433 | unix_state_unlock(other); |
1401 | other->sk_data_ready(other, len); | 1434 | other->sk_data_ready(other, len); |
1402 | sock_put(other); | 1435 | sock_put(other); |
1403 | scm_destroy(siocb->scm); | 1436 | scm_destroy(siocb->scm); |
1404 | return len; | 1437 | return len; |
1405 | 1438 | ||
1406 | out_unlock: | 1439 | out_unlock: |
1407 | unix_state_runlock(other); | 1440 | unix_state_unlock(other); |
1408 | out_free: | 1441 | out_free: |
1409 | kfree_skb(skb); | 1442 | kfree_skb(skb); |
1410 | out: | 1443 | out: |
@@ -1494,14 +1527,14 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, | |||
1494 | goto out_err; | 1527 | goto out_err; |
1495 | } | 1528 | } |
1496 | 1529 | ||
1497 | unix_state_rlock(other); | 1530 | unix_state_lock(other); |
1498 | 1531 | ||
1499 | if (sock_flag(other, SOCK_DEAD) || | 1532 | if (sock_flag(other, SOCK_DEAD) || |
1500 | (other->sk_shutdown & RCV_SHUTDOWN)) | 1533 | (other->sk_shutdown & RCV_SHUTDOWN)) |
1501 | goto pipe_err_free; | 1534 | goto pipe_err_free; |
1502 | 1535 | ||
1503 | skb_queue_tail(&other->sk_receive_queue, skb); | 1536 | skb_queue_tail(&other->sk_receive_queue, skb); |
1504 | unix_state_runlock(other); | 1537 | unix_state_unlock(other); |
1505 | other->sk_data_ready(other, size); | 1538 | other->sk_data_ready(other, size); |
1506 | sent+=size; | 1539 | sent+=size; |
1507 | } | 1540 | } |
@@ -1512,7 +1545,7 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, | |||
1512 | return sent; | 1545 | return sent; |
1513 | 1546 | ||
1514 | pipe_err_free: | 1547 | pipe_err_free: |
1515 | unix_state_runlock(other); | 1548 | unix_state_unlock(other); |
1516 | kfree_skb(skb); | 1549 | kfree_skb(skb); |
1517 | pipe_err: | 1550 | pipe_err: |
1518 | if (sent==0 && !(msg->msg_flags&MSG_NOSIGNAL)) | 1551 | if (sent==0 && !(msg->msg_flags&MSG_NOSIGNAL)) |
@@ -1641,7 +1674,7 @@ static long unix_stream_data_wait(struct sock * sk, long timeo) | |||
1641 | { | 1674 | { |
1642 | DEFINE_WAIT(wait); | 1675 | DEFINE_WAIT(wait); |
1643 | 1676 | ||
1644 | unix_state_rlock(sk); | 1677 | unix_state_lock(sk); |
1645 | 1678 | ||
1646 | for (;;) { | 1679 | for (;;) { |
1647 | prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); | 1680 | prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); |
@@ -1654,14 +1687,14 @@ static long unix_stream_data_wait(struct sock * sk, long timeo) | |||
1654 | break; | 1687 | break; |
1655 | 1688 | ||
1656 | set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); | 1689 | set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); |
1657 | unix_state_runlock(sk); | 1690 | unix_state_unlock(sk); |
1658 | timeo = schedule_timeout(timeo); | 1691 | timeo = schedule_timeout(timeo); |
1659 | unix_state_rlock(sk); | 1692 | unix_state_lock(sk); |
1660 | clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); | 1693 | clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); |
1661 | } | 1694 | } |
1662 | 1695 | ||
1663 | finish_wait(sk->sk_sleep, &wait); | 1696 | finish_wait(sk->sk_sleep, &wait); |
1664 | unix_state_runlock(sk); | 1697 | unix_state_unlock(sk); |
1665 | return timeo; | 1698 | return timeo; |
1666 | } | 1699 | } |
1667 | 1700 | ||
@@ -1816,12 +1849,12 @@ static int unix_shutdown(struct socket *sock, int mode) | |||
1816 | mode = (mode+1)&(RCV_SHUTDOWN|SEND_SHUTDOWN); | 1849 | mode = (mode+1)&(RCV_SHUTDOWN|SEND_SHUTDOWN); |
1817 | 1850 | ||
1818 | if (mode) { | 1851 | if (mode) { |
1819 | unix_state_wlock(sk); | 1852 | unix_state_lock(sk); |
1820 | sk->sk_shutdown |= mode; | 1853 | sk->sk_shutdown |= mode; |
1821 | other=unix_peer(sk); | 1854 | other=unix_peer(sk); |
1822 | if (other) | 1855 | if (other) |
1823 | sock_hold(other); | 1856 | sock_hold(other); |
1824 | unix_state_wunlock(sk); | 1857 | unix_state_unlock(sk); |
1825 | sk->sk_state_change(sk); | 1858 | sk->sk_state_change(sk); |
1826 | 1859 | ||
1827 | if (other && | 1860 | if (other && |
@@ -1833,9 +1866,9 @@ static int unix_shutdown(struct socket *sock, int mode) | |||
1833 | peer_mode |= SEND_SHUTDOWN; | 1866 | peer_mode |= SEND_SHUTDOWN; |
1834 | if (mode&SEND_SHUTDOWN) | 1867 | if (mode&SEND_SHUTDOWN) |
1835 | peer_mode |= RCV_SHUTDOWN; | 1868 | peer_mode |= RCV_SHUTDOWN; |
1836 | unix_state_wlock(other); | 1869 | unix_state_lock(other); |
1837 | other->sk_shutdown |= peer_mode; | 1870 | other->sk_shutdown |= peer_mode; |
1838 | unix_state_wunlock(other); | 1871 | unix_state_unlock(other); |
1839 | other->sk_state_change(other); | 1872 | other->sk_state_change(other); |
1840 | read_lock(&other->sk_callback_lock); | 1873 | read_lock(&other->sk_callback_lock); |
1841 | if (peer_mode == SHUTDOWN_MASK) | 1874 | if (peer_mode == SHUTDOWN_MASK) |
@@ -1973,7 +2006,7 @@ static int unix_seq_show(struct seq_file *seq, void *v) | |||
1973 | else { | 2006 | else { |
1974 | struct sock *s = v; | 2007 | struct sock *s = v; |
1975 | struct unix_sock *u = unix_sk(s); | 2008 | struct unix_sock *u = unix_sk(s); |
1976 | unix_state_rlock(s); | 2009 | unix_state_lock(s); |
1977 | 2010 | ||
1978 | seq_printf(seq, "%p: %08X %08X %08X %04X %02X %5lu", | 2011 | seq_printf(seq, "%p: %08X %08X %08X %04X %02X %5lu", |
1979 | s, | 2012 | s, |
@@ -2001,7 +2034,7 @@ static int unix_seq_show(struct seq_file *seq, void *v) | |||
2001 | for ( ; i < len; i++) | 2034 | for ( ; i < len; i++) |
2002 | seq_putc(seq, u->addr->name->sun_path[i]); | 2035 | seq_putc(seq, u->addr->name->sun_path[i]); |
2003 | } | 2036 | } |
2004 | unix_state_runlock(s); | 2037 | unix_state_unlock(s); |
2005 | seq_putc(seq, '\n'); | 2038 | seq_putc(seq, '\n'); |
2006 | } | 2039 | } |
2007 | 2040 | ||
diff --git a/net/wanrouter/wanmain.c b/net/wanrouter/wanmain.c index 7a19e0ede289..849cc06bd914 100644 --- a/net/wanrouter/wanmain.c +++ b/net/wanrouter/wanmain.c | |||
@@ -454,7 +454,7 @@ static int wanrouter_device_setup(struct wan_device *wandev, | |||
454 | } | 454 | } |
455 | 455 | ||
456 | if (conf->data_size && conf->data) { | 456 | if (conf->data_size && conf->data) { |
457 | if (conf->data_size > 128000 || conf->data_size < 0) { | 457 | if (conf->data_size > 128000) { |
458 | printk(KERN_INFO | 458 | printk(KERN_INFO |
459 | "%s: ERROR, Invalid firmware data size %i !\n", | 459 | "%s: ERROR, Invalid firmware data size %i !\n", |
460 | wandev->name, conf->data_size); | 460 | wandev->name, conf->data_size); |