diff options
| author | Adrian Bunk <bunk@r063144.stusta.swh.mhn.de> | 2006-03-20 12:30:36 -0500 |
|---|---|---|
| committer | Adrian Bunk <bunk@r063144.stusta.swh.mhn.de> | 2006-03-20 12:30:36 -0500 |
| commit | 0f76ee451484d02c7405d92e7bceb39b415abb01 (patch) | |
| tree | 9722f84281f786ba48971dde057f5171a49969e4 /net/ipv6 | |
| parent | 01d206a7c1167639f6ca6dac22140fbdca017558 (diff) | |
| parent | 7705a8792b0fc82fd7d4dd923724606bbfd9fb20 (diff) | |
Merge with git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Diffstat (limited to 'net/ipv6')
| -rw-r--r-- | net/ipv6/addrconf.c | 5 | ||||
| -rw-r--r-- | net/ipv6/ah6.c | 2 | ||||
| -rw-r--r-- | net/ipv6/icmp.c | 6 | ||||
| -rw-r--r-- | net/ipv6/inet6_hashtables.c | 6 | ||||
| -rw-r--r-- | net/ipv6/ip6_output.c | 22 | ||||
| -rw-r--r-- | net/ipv6/ip6_tunnel.c | 3 | ||||
| -rw-r--r-- | net/ipv6/mcast.c | 2 | ||||
| -rw-r--r-- | net/ipv6/netfilter/ip6_queue.c | 2 | ||||
| -rw-r--r-- | net/ipv6/netfilter/ip6_tables.c | 7 | ||||
| -rw-r--r-- | net/ipv6/netfilter/ip6t_LOG.c | 7 | ||||
| -rw-r--r-- | net/ipv6/netfilter/ip6t_REJECT.c | 2 | ||||
| -rw-r--r-- | net/ipv6/netfilter/ip6t_policy.c | 7 | ||||
| -rw-r--r-- | net/ipv6/proc.c | 2 | ||||
| -rw-r--r-- | net/ipv6/raw.c | 6 | ||||
| -rw-r--r-- | net/ipv6/xfrm6_policy.c | 1 |
15 files changed, 58 insertions, 22 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 1db50487916b..19727d941962 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
| @@ -822,7 +822,7 @@ struct ipv6_saddr_score { | |||
| 822 | int addr_type; | 822 | int addr_type; |
| 823 | unsigned int attrs; | 823 | unsigned int attrs; |
| 824 | int matchlen; | 824 | int matchlen; |
| 825 | unsigned int scope; | 825 | int scope; |
| 826 | unsigned int rule; | 826 | unsigned int rule; |
| 827 | }; | 827 | }; |
| 828 | 828 | ||
| @@ -2165,6 +2165,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, | |||
| 2165 | dev->name); | 2165 | dev->name); |
| 2166 | break; | 2166 | break; |
| 2167 | } | 2167 | } |
| 2168 | |||
| 2169 | if (idev) | ||
| 2170 | idev->if_flags |= IF_READY; | ||
| 2168 | } else { | 2171 | } else { |
| 2169 | if (!netif_carrier_ok(dev)) { | 2172 | if (!netif_carrier_ok(dev)) { |
| 2170 | /* device is still not ready. */ | 2173 | /* device is still not ready. */ |
diff --git a/net/ipv6/ah6.c b/net/ipv6/ah6.c index c7932cb420a5..84963749ab77 100644 --- a/net/ipv6/ah6.c +++ b/net/ipv6/ah6.c | |||
| @@ -279,7 +279,7 @@ static int ah6_input(struct xfrm_state *x, struct xfrm_decap_state *decap, struc | |||
| 279 | goto out; | 279 | goto out; |
| 280 | memcpy(tmp_hdr, skb->nh.raw, hdr_len); | 280 | memcpy(tmp_hdr, skb->nh.raw, hdr_len); |
| 281 | if (ipv6_clear_mutable_options(skb->nh.ipv6h, hdr_len)) | 281 | if (ipv6_clear_mutable_options(skb->nh.ipv6h, hdr_len)) |
| 282 | goto out; | 282 | goto free_out; |
| 283 | skb->nh.ipv6h->priority = 0; | 283 | skb->nh.ipv6h->priority = 0; |
| 284 | skb->nh.ipv6h->flow_lbl[0] = 0; | 284 | skb->nh.ipv6h->flow_lbl[0] = 0; |
| 285 | skb->nh.ipv6h->flow_lbl[1] = 0; | 285 | skb->nh.ipv6h->flow_lbl[1] = 0; |
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index fcf883183cef..21eb725e885f 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c | |||
| @@ -42,6 +42,7 @@ | |||
| 42 | #include <linux/net.h> | 42 | #include <linux/net.h> |
| 43 | #include <linux/skbuff.h> | 43 | #include <linux/skbuff.h> |
| 44 | #include <linux/init.h> | 44 | #include <linux/init.h> |
| 45 | #include <linux/netfilter.h> | ||
| 45 | 46 | ||
| 46 | #ifdef CONFIG_SYSCTL | 47 | #ifdef CONFIG_SYSCTL |
| 47 | #include <linux/sysctl.h> | 48 | #include <linux/sysctl.h> |
| @@ -255,6 +256,7 @@ out: | |||
| 255 | struct icmpv6_msg { | 256 | struct icmpv6_msg { |
| 256 | struct sk_buff *skb; | 257 | struct sk_buff *skb; |
| 257 | int offset; | 258 | int offset; |
| 259 | uint8_t type; | ||
| 258 | }; | 260 | }; |
| 259 | 261 | ||
| 260 | static int icmpv6_getfrag(void *from, char *to, int offset, int len, int odd, struct sk_buff *skb) | 262 | static int icmpv6_getfrag(void *from, char *to, int offset, int len, int odd, struct sk_buff *skb) |
| @@ -266,6 +268,8 @@ static int icmpv6_getfrag(void *from, char *to, int offset, int len, int odd, st | |||
| 266 | csum = skb_copy_and_csum_bits(org_skb, msg->offset + offset, | 268 | csum = skb_copy_and_csum_bits(org_skb, msg->offset + offset, |
| 267 | to, len, csum); | 269 | to, len, csum); |
| 268 | skb->csum = csum_block_add(skb->csum, csum, odd); | 270 | skb->csum = csum_block_add(skb->csum, csum, odd); |
| 271 | if (!(msg->type & ICMPV6_INFOMSG_MASK)) | ||
| 272 | nf_ct_attach(skb, org_skb); | ||
| 269 | return 0; | 273 | return 0; |
| 270 | } | 274 | } |
| 271 | 275 | ||
| @@ -403,6 +407,7 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info, | |||
| 403 | 407 | ||
| 404 | msg.skb = skb; | 408 | msg.skb = skb; |
| 405 | msg.offset = skb->nh.raw - skb->data; | 409 | msg.offset = skb->nh.raw - skb->data; |
| 410 | msg.type = type; | ||
| 406 | 411 | ||
| 407 | len = skb->len - msg.offset; | 412 | len = skb->len - msg.offset; |
| 408 | len = min_t(unsigned int, len, IPV6_MIN_MTU - sizeof(struct ipv6hdr) -sizeof(struct icmp6hdr)); | 413 | len = min_t(unsigned int, len, IPV6_MIN_MTU - sizeof(struct ipv6hdr) -sizeof(struct icmp6hdr)); |
| @@ -500,6 +505,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb) | |||
| 500 | 505 | ||
| 501 | msg.skb = skb; | 506 | msg.skb = skb; |
| 502 | msg.offset = 0; | 507 | msg.offset = 0; |
| 508 | msg.type = ICMPV6_ECHO_REPLY; | ||
| 503 | 509 | ||
| 504 | err = ip6_append_data(sk, icmpv6_getfrag, &msg, skb->len + sizeof(struct icmp6hdr), | 510 | err = ip6_append_data(sk, icmpv6_getfrag, &msg, skb->len + sizeof(struct icmp6hdr), |
| 505 | sizeof(struct icmp6hdr), hlimit, tclass, NULL, &fl, | 511 | sizeof(struct icmp6hdr), hlimit, tclass, NULL, &fl, |
diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c index 4154f3a8b6cf..bb8ffb8a14c5 100644 --- a/net/ipv6/inet6_hashtables.c +++ b/net/ipv6/inet6_hashtables.c | |||
| @@ -87,7 +87,7 @@ static int __inet6_check_established(struct inet_timewait_death_row *death_row, | |||
| 87 | struct inet_timewait_sock **twp) | 87 | struct inet_timewait_sock **twp) |
| 88 | { | 88 | { |
| 89 | struct inet_hashinfo *hinfo = death_row->hashinfo; | 89 | struct inet_hashinfo *hinfo = death_row->hashinfo; |
| 90 | const struct inet_sock *inet = inet_sk(sk); | 90 | struct inet_sock *inet = inet_sk(sk); |
| 91 | const struct ipv6_pinfo *np = inet6_sk(sk); | 91 | const struct ipv6_pinfo *np = inet6_sk(sk); |
| 92 | const struct in6_addr *daddr = &np->rcv_saddr; | 92 | const struct in6_addr *daddr = &np->rcv_saddr; |
| 93 | const struct in6_addr *saddr = &np->daddr; | 93 | const struct in6_addr *saddr = &np->daddr; |
| @@ -129,6 +129,10 @@ static int __inet6_check_established(struct inet_timewait_death_row *death_row, | |||
| 129 | } | 129 | } |
| 130 | 130 | ||
| 131 | unique: | 131 | unique: |
| 132 | /* Must record num and sport now. Otherwise we will see | ||
| 133 | * in hash table socket with a funny identity. */ | ||
| 134 | inet->num = lport; | ||
| 135 | inet->sport = htons(lport); | ||
| 132 | BUG_TRAP(sk_unhashed(sk)); | 136 | BUG_TRAP(sk_unhashed(sk)); |
| 133 | __sk_add_node(sk, &head->chain); | 137 | __sk_add_node(sk, &head->chain); |
| 134 | sk->sk_hash = hash; | 138 | sk->sk_hash = hash; |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index efa3e72cfcfa..5bf70b1442ea 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
| @@ -494,6 +494,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
| 494 | struct net_device *dev; | 494 | struct net_device *dev; |
| 495 | struct sk_buff *frag; | 495 | struct sk_buff *frag; |
| 496 | struct rt6_info *rt = (struct rt6_info*)skb->dst; | 496 | struct rt6_info *rt = (struct rt6_info*)skb->dst; |
| 497 | struct ipv6_pinfo *np = skb->sk ? inet6_sk(skb->sk) : NULL; | ||
| 497 | struct ipv6hdr *tmp_hdr; | 498 | struct ipv6hdr *tmp_hdr; |
| 498 | struct frag_hdr *fh; | 499 | struct frag_hdr *fh; |
| 499 | unsigned int mtu, hlen, left, len; | 500 | unsigned int mtu, hlen, left, len; |
| @@ -505,7 +506,12 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
| 505 | hlen = ip6_find_1stfragopt(skb, &prevhdr); | 506 | hlen = ip6_find_1stfragopt(skb, &prevhdr); |
| 506 | nexthdr = *prevhdr; | 507 | nexthdr = *prevhdr; |
| 507 | 508 | ||
| 508 | mtu = dst_mtu(&rt->u.dst) - hlen - sizeof(struct frag_hdr); | 509 | mtu = dst_mtu(&rt->u.dst); |
| 510 | if (np && np->frag_size < mtu) { | ||
| 511 | if (np->frag_size) | ||
| 512 | mtu = np->frag_size; | ||
| 513 | } | ||
| 514 | mtu -= hlen + sizeof(struct frag_hdr); | ||
| 509 | 515 | ||
| 510 | if (skb_shinfo(skb)->frag_list) { | 516 | if (skb_shinfo(skb)->frag_list) { |
| 511 | int first_len = skb_pagelen(skb); | 517 | int first_len = skb_pagelen(skb); |
| @@ -882,7 +888,12 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to, | |||
| 882 | inet->cork.fl = *fl; | 888 | inet->cork.fl = *fl; |
| 883 | np->cork.hop_limit = hlimit; | 889 | np->cork.hop_limit = hlimit; |
| 884 | np->cork.tclass = tclass; | 890 | np->cork.tclass = tclass; |
| 885 | inet->cork.fragsize = mtu = dst_mtu(rt->u.dst.path); | 891 | mtu = dst_mtu(rt->u.dst.path); |
| 892 | if (np && np->frag_size < mtu) { | ||
| 893 | if (np->frag_size) | ||
| 894 | mtu = np->frag_size; | ||
| 895 | } | ||
| 896 | inet->cork.fragsize = mtu; | ||
| 886 | if (dst_allfrag(rt->u.dst.path)) | 897 | if (dst_allfrag(rt->u.dst.path)) |
| 887 | inet->cork.flags |= IPCORK_ALLFRAG; | 898 | inet->cork.flags |= IPCORK_ALLFRAG; |
| 888 | inet->cork.length = 0; | 899 | inet->cork.length = 0; |
| @@ -933,10 +944,11 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to, | |||
| 933 | if (((length > mtu) && (sk->sk_protocol == IPPROTO_UDP)) && | 944 | if (((length > mtu) && (sk->sk_protocol == IPPROTO_UDP)) && |
| 934 | (rt->u.dst.dev->features & NETIF_F_UFO)) { | 945 | (rt->u.dst.dev->features & NETIF_F_UFO)) { |
| 935 | 946 | ||
| 936 | if(ip6_ufo_append_data(sk, getfrag, from, length, hh_len, | 947 | err = ip6_ufo_append_data(sk, getfrag, from, length, hh_len, |
| 937 | fragheaderlen, transhdrlen, mtu, flags)) | 948 | fragheaderlen, transhdrlen, mtu, |
| 949 | flags); | ||
| 950 | if (err) | ||
| 938 | goto error; | 951 | goto error; |
| 939 | |||
| 940 | return 0; | 952 | return 0; |
| 941 | } | 953 | } |
| 942 | 954 | ||
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index 92ead3cf956b..48597538db3f 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c | |||
| @@ -458,7 +458,7 @@ ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
| 458 | mtu = IPV6_MIN_MTU; | 458 | mtu = IPV6_MIN_MTU; |
| 459 | t->dev->mtu = mtu; | 459 | t->dev->mtu = mtu; |
| 460 | 460 | ||
| 461 | if ((len = sizeof (*ipv6h) + ipv6h->payload_len) > mtu) { | 461 | if ((len = sizeof (*ipv6h) + ntohs(ipv6h->payload_len)) > mtu) { |
| 462 | rel_type = ICMPV6_PKT_TOOBIG; | 462 | rel_type = ICMPV6_PKT_TOOBIG; |
| 463 | rel_code = 0; | 463 | rel_code = 0; |
| 464 | rel_info = mtu; | 464 | rel_info = mtu; |
| @@ -884,6 +884,7 @@ ip6ip6_tnl_change(struct ip6_tnl *t, struct ip6_tnl_parm *p) | |||
| 884 | t->parms.encap_limit = p->encap_limit; | 884 | t->parms.encap_limit = p->encap_limit; |
| 885 | t->parms.flowinfo = p->flowinfo; | 885 | t->parms.flowinfo = p->flowinfo; |
| 886 | t->parms.link = p->link; | 886 | t->parms.link = p->link; |
| 887 | ip6_tnl_dst_reset(t); | ||
| 887 | ip6ip6_tnl_link_config(t); | 888 | ip6ip6_tnl_link_config(t); |
| 888 | return 0; | 889 | return 0; |
| 889 | } | 890 | } |
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 4420948a1bfe..807c021d64a2 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
| @@ -1978,7 +1978,7 @@ static int sf_setstate(struct ifmcaddr6 *pmc) | |||
| 1978 | new_in = psf->sf_count[MCAST_INCLUDE] != 0; | 1978 | new_in = psf->sf_count[MCAST_INCLUDE] != 0; |
| 1979 | if (new_in) { | 1979 | if (new_in) { |
| 1980 | if (!psf->sf_oldin) { | 1980 | if (!psf->sf_oldin) { |
| 1981 | struct ip6_sf_list *prev = 0; | 1981 | struct ip6_sf_list *prev = NULL; |
| 1982 | 1982 | ||
| 1983 | for (dpsf=pmc->mca_tomb; dpsf; | 1983 | for (dpsf=pmc->mca_tomb; dpsf; |
| 1984 | dpsf=dpsf->sf_next) { | 1984 | dpsf=dpsf->sf_next) { |
diff --git a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c index 5027bbe6415e..af0635084df8 100644 --- a/net/ipv6/netfilter/ip6_queue.c +++ b/net/ipv6/netfilter/ip6_queue.c | |||
| @@ -522,7 +522,7 @@ ipq_rcv_skb(struct sk_buff *skb) | |||
| 522 | write_unlock_bh(&queue_lock); | 522 | write_unlock_bh(&queue_lock); |
| 523 | 523 | ||
| 524 | status = ipq_receive_peer(NLMSG_DATA(nlh), type, | 524 | status = ipq_receive_peer(NLMSG_DATA(nlh), type, |
| 525 | skblen - NLMSG_LENGTH(0)); | 525 | nlmsglen - NLMSG_LENGTH(0)); |
| 526 | if (status < 0) | 526 | if (status < 0) |
| 527 | RCV_SKB_FAIL(status); | 527 | RCV_SKB_FAIL(status); |
| 528 | 528 | ||
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c index 847068fd3367..74ff56c322f4 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c | |||
| @@ -978,6 +978,13 @@ do_replace(void __user *user, unsigned int len) | |||
| 978 | if (copy_from_user(&tmp, user, sizeof(tmp)) != 0) | 978 | if (copy_from_user(&tmp, user, sizeof(tmp)) != 0) |
| 979 | return -EFAULT; | 979 | return -EFAULT; |
| 980 | 980 | ||
| 981 | /* overflow check */ | ||
| 982 | if (tmp.size >= (INT_MAX - sizeof(struct xt_table_info)) / NR_CPUS - | ||
| 983 | SMP_CACHE_BYTES) | ||
| 984 | return -ENOMEM; | ||
| 985 | if (tmp.num_counters >= INT_MAX / sizeof(struct xt_counters)) | ||
| 986 | return -ENOMEM; | ||
| 987 | |||
| 981 | newinfo = xt_alloc_table_info(tmp.size); | 988 | newinfo = xt_alloc_table_info(tmp.size); |
| 982 | if (!newinfo) | 989 | if (!newinfo) |
| 983 | return -ENOMEM; | 990 | return -ENOMEM; |
diff --git a/net/ipv6/netfilter/ip6t_LOG.c b/net/ipv6/netfilter/ip6t_LOG.c index 77c725832dec..6b930efa9fb9 100644 --- a/net/ipv6/netfilter/ip6t_LOG.c +++ b/net/ipv6/netfilter/ip6t_LOG.c | |||
| @@ -436,7 +436,12 @@ ip6t_log_target(struct sk_buff **pskb, | |||
| 436 | li.u.log.level = loginfo->level; | 436 | li.u.log.level = loginfo->level; |
| 437 | li.u.log.logflags = loginfo->logflags; | 437 | li.u.log.logflags = loginfo->logflags; |
| 438 | 438 | ||
| 439 | nf_log_packet(PF_INET6, hooknum, *pskb, in, out, &li, loginfo->prefix); | 439 | if (loginfo->logflags & IP6T_LOG_NFLOG) |
| 440 | nf_log_packet(PF_INET6, hooknum, *pskb, in, out, &li, | ||
| 441 | loginfo->prefix); | ||
| 442 | else | ||
| 443 | ip6t_log_packet(PF_INET6, hooknum, *pskb, in, out, &li, | ||
| 444 | loginfo->prefix); | ||
| 440 | 445 | ||
| 441 | return IP6T_CONTINUE; | 446 | return IP6T_CONTINUE; |
| 442 | } | 447 | } |
diff --git a/net/ipv6/netfilter/ip6t_REJECT.c b/net/ipv6/netfilter/ip6t_REJECT.c index c745717b4ce2..0e6d1d4bbd5c 100644 --- a/net/ipv6/netfilter/ip6t_REJECT.c +++ b/net/ipv6/netfilter/ip6t_REJECT.c | |||
| @@ -160,6 +160,8 @@ static void send_reset(struct sk_buff *oldskb) | |||
| 160 | csum_partial((char *)tcph, | 160 | csum_partial((char *)tcph, |
| 161 | sizeof(struct tcphdr), 0)); | 161 | sizeof(struct tcphdr), 0)); |
| 162 | 162 | ||
| 163 | nf_ct_attach(nskb, oldskb); | ||
| 164 | |||
| 163 | NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, nskb, NULL, nskb->dst->dev, | 165 | NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, nskb, NULL, nskb->dst->dev, |
| 164 | dst_output); | 166 | dst_output); |
| 165 | } | 167 | } |
diff --git a/net/ipv6/netfilter/ip6t_policy.c b/net/ipv6/netfilter/ip6t_policy.c index afe1cc4c18a5..3d39ec924041 100644 --- a/net/ipv6/netfilter/ip6t_policy.c +++ b/net/ipv6/netfilter/ip6t_policy.c | |||
| @@ -26,8 +26,9 @@ MODULE_LICENSE("GPL"); | |||
| 26 | static inline int | 26 | static inline int |
| 27 | match_xfrm_state(struct xfrm_state *x, const struct ip6t_policy_elem *e) | 27 | match_xfrm_state(struct xfrm_state *x, const struct ip6t_policy_elem *e) |
| 28 | { | 28 | { |
| 29 | #define MATCH_ADDR(x,y,z) (!e->match.x || \ | 29 | #define MATCH_ADDR(x,y,z) (!e->match.x || \ |
| 30 | ((ip6_masked_addrcmp((z), &e->x, &e->y)) == 0) ^ e->invert.x) | 30 | ((!ip6_masked_addrcmp(&e->x.a6, &e->y.a6, z)) \ |
| 31 | ^ e->invert.x)) | ||
| 31 | #define MATCH(x,y) (!e->match.x || ((e->x == (y)) ^ e->invert.x)) | 32 | #define MATCH(x,y) (!e->match.x || ((e->x == (y)) ^ e->invert.x)) |
| 32 | 33 | ||
| 33 | return MATCH_ADDR(saddr, smask, (struct in6_addr *)&x->props.saddr.a6) && | 34 | return MATCH_ADDR(saddr, smask, (struct in6_addr *)&x->props.saddr.a6) && |
| @@ -91,7 +92,7 @@ match_policy_out(const struct sk_buff *skb, const struct ip6t_policy_info *info) | |||
| 91 | return 0; | 92 | return 0; |
| 92 | } | 93 | } |
| 93 | 94 | ||
| 94 | return strict ? 1 : 0; | 95 | return strict ? i == info->len : 0; |
| 95 | } | 96 | } |
| 96 | 97 | ||
| 97 | static int match(const struct sk_buff *skb, | 98 | static int match(const struct sk_buff *skb, |
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c index 50a13e75d70e..4238b1ed8860 100644 --- a/net/ipv6/proc.c +++ b/net/ipv6/proc.c | |||
| @@ -38,7 +38,7 @@ static int fold_prot_inuse(struct proto *proto) | |||
| 38 | int res = 0; | 38 | int res = 0; |
| 39 | int cpu; | 39 | int cpu; |
| 40 | 40 | ||
| 41 | for (cpu=0; cpu<NR_CPUS; cpu++) | 41 | for_each_cpu(cpu) |
| 42 | res += proto->stats[cpu].inuse; | 42 | res += proto->stats[cpu].inuse; |
| 43 | 43 | ||
| 44 | return res; | 44 | return res; |
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 66f1d12ea578..ae20a0ec9bd8 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
| @@ -35,7 +35,6 @@ | |||
| 35 | #include <linux/skbuff.h> | 35 | #include <linux/skbuff.h> |
| 36 | #include <asm/uaccess.h> | 36 | #include <asm/uaccess.h> |
| 37 | #include <asm/ioctls.h> | 37 | #include <asm/ioctls.h> |
| 38 | #include <asm/bug.h> | ||
| 39 | 38 | ||
| 40 | #include <net/ip.h> | 39 | #include <net/ip.h> |
| 41 | #include <net/sock.h> | 40 | #include <net/sock.h> |
| @@ -804,10 +803,7 @@ back_from_confirm: | |||
| 804 | err = rawv6_push_pending_frames(sk, &fl, rp); | 803 | err = rawv6_push_pending_frames(sk, &fl, rp); |
| 805 | } | 804 | } |
| 806 | done: | 805 | done: |
| 807 | ip6_dst_store(sk, dst, | 806 | dst_release(dst); |
| 808 | ipv6_addr_equal(&fl.fl6_dst, &np->daddr) ? | ||
| 809 | &np->daddr : NULL); | ||
| 810 | |||
| 811 | release_sock(sk); | 807 | release_sock(sk); |
| 812 | out: | 808 | out: |
| 813 | fl6_sock_release(flowlabel); | 809 | fl6_sock_release(flowlabel); |
diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c index 69bd957380e7..91cce8b2d7a5 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c | |||
| @@ -11,7 +11,6 @@ | |||
| 11 | * | 11 | * |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <asm/bug.h> | ||
| 15 | #include <linux/compiler.h> | 14 | #include <linux/compiler.h> |
| 16 | #include <linux/config.h> | 15 | #include <linux/config.h> |
| 17 | #include <linux/netdevice.h> | 16 | #include <linux/netdevice.h> |
