diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/802/tr.c | 3 | ||||
-rw-r--r-- | net/8021q/vlan_core.c | 4 | ||||
-rw-r--r-- | net/core/dev.c | 9 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 3 | ||||
-rw-r--r-- | net/ipv4/udp.c | 3 | ||||
-rw-r--r-- | net/ipv6/ipv6_sockglue.c | 4 | ||||
-rw-r--r-- | net/ipv6/netfilter/ip6_tables.c | 2 | ||||
-rw-r--r-- | net/ipv6/udp.c | 6 | ||||
-rw-r--r-- | net/netfilter/Kconfig | 2 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_expect.c | 30 | ||||
-rw-r--r-- | net/packet/af_packet.c | 5 | ||||
-rw-r--r-- | net/rose/af_rose.c | 10 | ||||
-rw-r--r-- | net/sched/em_meta.c | 6 |
13 files changed, 36 insertions, 51 deletions
diff --git a/net/802/tr.c b/net/802/tr.c index e7eb13084d71..e874447ad144 100644 --- a/net/802/tr.c +++ b/net/802/tr.c | |||
@@ -561,6 +561,9 @@ static int rif_seq_show(struct seq_file *seq, void *v) | |||
561 | } | 561 | } |
562 | seq_putc(seq, '\n'); | 562 | seq_putc(seq, '\n'); |
563 | } | 563 | } |
564 | |||
565 | if (dev) | ||
566 | dev_put(dev); | ||
564 | } | 567 | } |
565 | return 0; | 568 | return 0; |
566 | } | 569 | } |
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c index 654e45f5719d..c67fe6f75653 100644 --- a/net/8021q/vlan_core.c +++ b/net/8021q/vlan_core.c | |||
@@ -121,8 +121,10 @@ int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, | |||
121 | if (!skb) | 121 | if (!skb) |
122 | return NET_RX_DROP; | 122 | return NET_RX_DROP; |
123 | 123 | ||
124 | if (netpoll_rx_on(skb)) | 124 | if (netpoll_rx_on(skb)) { |
125 | skb->protocol = eth_type_trans(skb, skb->dev); | ||
125 | return vlan_hwaccel_receive_skb(skb, grp, vlan_tci); | 126 | return vlan_hwaccel_receive_skb(skb, grp, vlan_tci); |
127 | } | ||
126 | 128 | ||
127 | return napi_frags_finish(napi, skb, | 129 | return napi_frags_finish(napi, skb, |
128 | vlan_gro_common(napi, grp, vlan_tci, skb)); | 130 | vlan_gro_common(napi, grp, vlan_tci, skb)); |
diff --git a/net/core/dev.c b/net/core/dev.c index 91d792d17e09..343883f65ea7 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1430,7 +1430,7 @@ void netif_device_detach(struct net_device *dev) | |||
1430 | { | 1430 | { |
1431 | if (test_and_clear_bit(__LINK_STATE_PRESENT, &dev->state) && | 1431 | if (test_and_clear_bit(__LINK_STATE_PRESENT, &dev->state) && |
1432 | netif_running(dev)) { | 1432 | netif_running(dev)) { |
1433 | netif_stop_queue(dev); | 1433 | netif_tx_stop_all_queues(dev); |
1434 | } | 1434 | } |
1435 | } | 1435 | } |
1436 | EXPORT_SYMBOL(netif_device_detach); | 1436 | EXPORT_SYMBOL(netif_device_detach); |
@@ -1445,7 +1445,7 @@ void netif_device_attach(struct net_device *dev) | |||
1445 | { | 1445 | { |
1446 | if (!test_and_set_bit(__LINK_STATE_PRESENT, &dev->state) && | 1446 | if (!test_and_set_bit(__LINK_STATE_PRESENT, &dev->state) && |
1447 | netif_running(dev)) { | 1447 | netif_running(dev)) { |
1448 | netif_wake_queue(dev); | 1448 | netif_tx_wake_all_queues(dev); |
1449 | __netdev_watchdog_up(dev); | 1449 | __netdev_watchdog_up(dev); |
1450 | } | 1450 | } |
1451 | } | 1451 | } |
@@ -2328,8 +2328,10 @@ static int napi_gro_complete(struct sk_buff *skb) | |||
2328 | struct list_head *head = &ptype_base[ntohs(type) & PTYPE_HASH_MASK]; | 2328 | struct list_head *head = &ptype_base[ntohs(type) & PTYPE_HASH_MASK]; |
2329 | int err = -ENOENT; | 2329 | int err = -ENOENT; |
2330 | 2330 | ||
2331 | if (NAPI_GRO_CB(skb)->count == 1) | 2331 | if (NAPI_GRO_CB(skb)->count == 1) { |
2332 | skb_shinfo(skb)->gso_size = 0; | ||
2332 | goto out; | 2333 | goto out; |
2334 | } | ||
2333 | 2335 | ||
2334 | rcu_read_lock(); | 2336 | rcu_read_lock(); |
2335 | list_for_each_entry_rcu(ptype, head, list) { | 2337 | list_for_each_entry_rcu(ptype, head, list) { |
@@ -2348,7 +2350,6 @@ static int napi_gro_complete(struct sk_buff *skb) | |||
2348 | } | 2350 | } |
2349 | 2351 | ||
2350 | out: | 2352 | out: |
2351 | skb_shinfo(skb)->gso_size = 0; | ||
2352 | return netif_receive_skb(skb); | 2353 | return netif_receive_skb(skb); |
2353 | } | 2354 | } |
2354 | 2355 | ||
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 2bc8e27a163d..c96a6bb25430 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -928,6 +928,8 @@ static void tcp_init_metrics(struct sock *sk) | |||
928 | tcp_set_rto(sk); | 928 | tcp_set_rto(sk); |
929 | if (inet_csk(sk)->icsk_rto < TCP_TIMEOUT_INIT && !tp->rx_opt.saw_tstamp) | 929 | if (inet_csk(sk)->icsk_rto < TCP_TIMEOUT_INIT && !tp->rx_opt.saw_tstamp) |
930 | goto reset; | 930 | goto reset; |
931 | |||
932 | cwnd: | ||
931 | tp->snd_cwnd = tcp_init_cwnd(tp, dst); | 933 | tp->snd_cwnd = tcp_init_cwnd(tp, dst); |
932 | tp->snd_cwnd_stamp = tcp_time_stamp; | 934 | tp->snd_cwnd_stamp = tcp_time_stamp; |
933 | return; | 935 | return; |
@@ -942,6 +944,7 @@ reset: | |||
942 | tp->mdev = tp->mdev_max = tp->rttvar = TCP_TIMEOUT_INIT; | 944 | tp->mdev = tp->mdev_max = tp->rttvar = TCP_TIMEOUT_INIT; |
943 | inet_csk(sk)->icsk_rto = TCP_TIMEOUT_INIT; | 945 | inet_csk(sk)->icsk_rto = TCP_TIMEOUT_INIT; |
944 | } | 946 | } |
947 | goto cwnd; | ||
945 | } | 948 | } |
946 | 949 | ||
947 | static void tcp_update_reordering(struct sock *sk, const int metric, | 950 | static void tcp_update_reordering(struct sock *sk, const int metric, |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index bda08a09357d..7a1d1ce22e66 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -222,7 +222,7 @@ fail: | |||
222 | return error; | 222 | return error; |
223 | } | 223 | } |
224 | 224 | ||
225 | int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2) | 225 | static int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2) |
226 | { | 226 | { |
227 | struct inet_sock *inet1 = inet_sk(sk1), *inet2 = inet_sk(sk2); | 227 | struct inet_sock *inet1 = inet_sk(sk1), *inet2 = inet_sk(sk2); |
228 | 228 | ||
@@ -1823,7 +1823,6 @@ EXPORT_SYMBOL(udp_lib_getsockopt); | |||
1823 | EXPORT_SYMBOL(udp_lib_setsockopt); | 1823 | EXPORT_SYMBOL(udp_lib_setsockopt); |
1824 | EXPORT_SYMBOL(udp_poll); | 1824 | EXPORT_SYMBOL(udp_poll); |
1825 | EXPORT_SYMBOL(udp_lib_get_port); | 1825 | EXPORT_SYMBOL(udp_lib_get_port); |
1826 | EXPORT_SYMBOL(ipv4_rcv_saddr_equal); | ||
1827 | 1826 | ||
1828 | #ifdef CONFIG_PROC_FS | 1827 | #ifdef CONFIG_PROC_FS |
1829 | EXPORT_SYMBOL(udp_proc_register); | 1828 | EXPORT_SYMBOL(udp_proc_register); |
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index d31df0f4bc9a..a7fdf9a27f15 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
@@ -380,10 +380,6 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, | |||
380 | default: | 380 | default: |
381 | goto sticky_done; | 381 | goto sticky_done; |
382 | } | 382 | } |
383 | |||
384 | if ((rthdr->hdrlen & 1) || | ||
385 | (rthdr->hdrlen >> 1) != rthdr->segments_left) | ||
386 | goto sticky_done; | ||
387 | } | 383 | } |
388 | 384 | ||
389 | retv = 0; | 385 | retv = 0; |
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c index dfed176aed37..800ae8542471 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c | |||
@@ -1033,6 +1033,8 @@ static struct xt_counters *alloc_counters(struct xt_table *table) | |||
1033 | 1033 | ||
1034 | xt_free_table_info(info); | 1034 | xt_free_table_info(info); |
1035 | 1035 | ||
1036 | return counters; | ||
1037 | |||
1036 | free_counters: | 1038 | free_counters: |
1037 | vfree(counters); | 1039 | vfree(counters); |
1038 | nomem: | 1040 | nomem: |
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 6842dd2edd5b..8905712cfbb8 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c | |||
@@ -53,6 +53,8 @@ int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2) | |||
53 | { | 53 | { |
54 | const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr; | 54 | const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr; |
55 | const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2); | 55 | const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2); |
56 | __be32 sk_rcv_saddr = inet_sk(sk)->rcv_saddr; | ||
57 | __be32 sk2_rcv_saddr = inet_rcv_saddr(sk2); | ||
56 | int sk_ipv6only = ipv6_only_sock(sk); | 58 | int sk_ipv6only = ipv6_only_sock(sk); |
57 | int sk2_ipv6only = inet_v6_ipv6only(sk2); | 59 | int sk2_ipv6only = inet_v6_ipv6only(sk2); |
58 | int addr_type = ipv6_addr_type(sk_rcv_saddr6); | 60 | int addr_type = ipv6_addr_type(sk_rcv_saddr6); |
@@ -60,7 +62,9 @@ int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2) | |||
60 | 62 | ||
61 | /* if both are mapped, treat as IPv4 */ | 63 | /* if both are mapped, treat as IPv4 */ |
62 | if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED) | 64 | if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED) |
63 | return ipv4_rcv_saddr_equal(sk, sk2); | 65 | return (!sk2_ipv6only && |
66 | (!sk_rcv_saddr || !sk2_rcv_saddr || | ||
67 | sk_rcv_saddr == sk2_rcv_saddr)); | ||
64 | 68 | ||
65 | if (addr_type2 == IPV6_ADDR_ANY && | 69 | if (addr_type2 == IPV6_ADDR_ANY && |
66 | !(sk2_ipv6only && addr_type == IPV6_ADDR_MAPPED)) | 70 | !(sk2_ipv6only && addr_type == IPV6_ADDR_MAPPED)) |
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig index bb279bf59a1b..2329c5f50551 100644 --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig | |||
@@ -374,7 +374,7 @@ config NETFILTER_XT_TARGET_HL | |||
374 | 374 | ||
375 | config NETFILTER_XT_TARGET_LED | 375 | config NETFILTER_XT_TARGET_LED |
376 | tristate '"LED" target support' | 376 | tristate '"LED" target support' |
377 | depends on LEDS_CLASS && LED_TRIGGERS | 377 | depends on LEDS_CLASS && LEDS_TRIGGERS |
378 | depends on NETFILTER_ADVANCED | 378 | depends on NETFILTER_ADVANCED |
379 | help | 379 | help |
380 | This option adds a `LED' target, which allows you to blink LEDs in | 380 | This option adds a `LED' target, which allows you to blink LEDs in |
diff --git a/net/netfilter/nf_conntrack_expect.c b/net/netfilter/nf_conntrack_expect.c index 3940f996a2e4..afde8f991646 100644 --- a/net/netfilter/nf_conntrack_expect.c +++ b/net/netfilter/nf_conntrack_expect.c | |||
@@ -372,7 +372,7 @@ static inline int __nf_ct_expect_check(struct nf_conntrack_expect *expect) | |||
372 | struct net *net = nf_ct_exp_net(expect); | 372 | struct net *net = nf_ct_exp_net(expect); |
373 | struct hlist_node *n; | 373 | struct hlist_node *n; |
374 | unsigned int h; | 374 | unsigned int h; |
375 | int ret = 0; | 375 | int ret = 1; |
376 | 376 | ||
377 | if (!master_help->helper) { | 377 | if (!master_help->helper) { |
378 | ret = -ESHUTDOWN; | 378 | ret = -ESHUTDOWN; |
@@ -412,41 +412,23 @@ out: | |||
412 | return ret; | 412 | return ret; |
413 | } | 413 | } |
414 | 414 | ||
415 | int nf_ct_expect_related(struct nf_conntrack_expect *expect) | 415 | int nf_ct_expect_related_report(struct nf_conntrack_expect *expect, |
416 | u32 pid, int report) | ||
416 | { | 417 | { |
417 | int ret; | 418 | int ret; |
418 | 419 | ||
419 | spin_lock_bh(&nf_conntrack_lock); | 420 | spin_lock_bh(&nf_conntrack_lock); |
420 | ret = __nf_ct_expect_check(expect); | 421 | ret = __nf_ct_expect_check(expect); |
421 | if (ret < 0) | 422 | if (ret <= 0) |
422 | goto out; | 423 | goto out; |
423 | 424 | ||
425 | ret = 0; | ||
424 | nf_ct_expect_insert(expect); | 426 | nf_ct_expect_insert(expect); |
425 | atomic_inc(&expect->use); | ||
426 | spin_unlock_bh(&nf_conntrack_lock); | ||
427 | nf_ct_expect_event(IPEXP_NEW, expect); | ||
428 | nf_ct_expect_put(expect); | ||
429 | return ret; | ||
430 | out: | ||
431 | spin_unlock_bh(&nf_conntrack_lock); | 427 | spin_unlock_bh(&nf_conntrack_lock); |
428 | nf_ct_expect_event_report(IPEXP_NEW, expect, pid, report); | ||
432 | return ret; | 429 | return ret; |
433 | } | ||
434 | EXPORT_SYMBOL_GPL(nf_ct_expect_related); | ||
435 | |||
436 | int nf_ct_expect_related_report(struct nf_conntrack_expect *expect, | ||
437 | u32 pid, int report) | ||
438 | { | ||
439 | int ret; | ||
440 | |||
441 | spin_lock_bh(&nf_conntrack_lock); | ||
442 | ret = __nf_ct_expect_check(expect); | ||
443 | if (ret < 0) | ||
444 | goto out; | ||
445 | nf_ct_expect_insert(expect); | ||
446 | out: | 430 | out: |
447 | spin_unlock_bh(&nf_conntrack_lock); | 431 | spin_unlock_bh(&nf_conntrack_lock); |
448 | if (ret == 0) | ||
449 | nf_ct_expect_event_report(IPEXP_NEW, expect, pid, report); | ||
450 | return ret; | 432 | return ret; |
451 | } | 433 | } |
452 | EXPORT_SYMBOL_GPL(nf_ct_expect_related_report); | 434 | EXPORT_SYMBOL_GPL(nf_ct_expect_related_report); |
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 74776de523ec..f546e81acc45 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
@@ -1758,8 +1758,9 @@ static void free_pg_vec(char **pg_vec, unsigned int order, unsigned int len) | |||
1758 | 1758 | ||
1759 | static inline char *alloc_one_pg_vec_page(unsigned long order) | 1759 | static inline char *alloc_one_pg_vec_page(unsigned long order) |
1760 | { | 1760 | { |
1761 | return (char *) __get_free_pages(GFP_KERNEL | __GFP_COMP | __GFP_ZERO, | 1761 | gfp_t gfp_flags = GFP_KERNEL | __GFP_COMP | __GFP_ZERO | __GFP_NOWARN; |
1762 | order); | 1762 | |
1763 | return (char *) __get_free_pages(gfp_flags, order); | ||
1763 | } | 1764 | } |
1764 | 1765 | ||
1765 | static char **alloc_pg_vec(struct tpacket_req *req, int order) | 1766 | static char **alloc_pg_vec(struct tpacket_req *req, int order) |
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index 0f36e8d59b29..877a7f65f707 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c | |||
@@ -1072,10 +1072,6 @@ static int rose_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
1072 | unsigned char *asmptr; | 1072 | unsigned char *asmptr; |
1073 | int n, size, qbit = 0; | 1073 | int n, size, qbit = 0; |
1074 | 1074 | ||
1075 | /* ROSE empty frame has no meaning : don't send */ | ||
1076 | if (len == 0) | ||
1077 | return 0; | ||
1078 | |||
1079 | if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT)) | 1075 | if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT)) |
1080 | return -EINVAL; | 1076 | return -EINVAL; |
1081 | 1077 | ||
@@ -1273,12 +1269,6 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
1273 | skb_reset_transport_header(skb); | 1269 | skb_reset_transport_header(skb); |
1274 | copied = skb->len; | 1270 | copied = skb->len; |
1275 | 1271 | ||
1276 | /* ROSE empty frame has no meaning : ignore it */ | ||
1277 | if (copied == 0) { | ||
1278 | skb_free_datagram(sk, skb); | ||
1279 | return copied; | ||
1280 | } | ||
1281 | |||
1282 | if (copied > size) { | 1272 | if (copied > size) { |
1283 | copied = size; | 1273 | copied = size; |
1284 | msg->msg_flags |= MSG_TRUNC; | 1274 | msg->msg_flags |= MSG_TRUNC; |
diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c index 72cf86e3c090..fad596bf32d7 100644 --- a/net/sched/em_meta.c +++ b/net/sched/em_meta.c | |||
@@ -176,8 +176,10 @@ META_COLLECTOR(var_dev) | |||
176 | 176 | ||
177 | META_COLLECTOR(int_vlan_tag) | 177 | META_COLLECTOR(int_vlan_tag) |
178 | { | 178 | { |
179 | unsigned short uninitialized_var(tag); | 179 | unsigned short tag; |
180 | if (vlan_get_tag(skb, &tag) < 0) | 180 | |
181 | tag = vlan_tx_tag_get(skb); | ||
182 | if (!tag && __vlan_get_tag(skb, &tag)) | ||
181 | *err = -1; | 183 | *err = -1; |
182 | else | 184 | else |
183 | dst->value = tag; | 185 | dst->value = tag; |