diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-15 10:33:07 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-15 10:33:07 -0500 |
commit | f6866fecd6fd8e44a6715da09844a4fd1b8484da (patch) | |
tree | a166c399ddb37a48035589ffda29ef05d236c4b4 /net/ipv6 | |
parent | 4ee29f6a52158cea526b16a44ae38643946103ec (diff) | |
parent | 997b37da1515c1620692521786a74af271664eb7 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (82 commits)
[NET]: Make sure sockets implement splice_read
netconsole: avoid null pointer dereference at show_local_mac()
[IPV6]: Fix reversed local_df test in ip6_fragment
[XFRM]: Avoid bogus BUG() when throwing new policy away.
[AF_KEY]: Fix bug in spdadd
[NETFILTER] nf_conntrack_proto_tcp.c: Mistyped state corrected.
net: xfrm statistics depend on INET
[NETFILTER]: make secmark_tg_destroy() static
[INET]: Unexport inet_listen_wlock
[INET]: Unexport __inet_hash_connect
[NET]: Improve cache line coherency of ingress qdisc
[NET]: Fix race in dev_close(). (Bug 9750)
[IPSEC]: Fix bogus usage of u64 on input sequence number
[RTNETLINK]: Send a single notification on device state changes.
[NETLABLE]: Hide netlbl_unlabel_audit_addr6 under ifdef CONFIG_IPV6.
[NETLABEL]: Don't produce unused variables when IPv6 is off.
[NETLABEL]: Compilation for CONFIG_AUDIT=n case.
[GENETLINK]: Relax dances with genl_lock.
[NETLABEL]: Fix lookup logic of netlbl_domhsh_search_def.
[IPV6]: remove unused method declaration (net/ndisc.h).
...
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/ah6.c | 2 | ||||
-rw-r--r-- | net/ipv6/esp6.c | 5 | ||||
-rw-r--r-- | net/ipv6/ip6_output.c | 6 | ||||
-rw-r--r-- | net/ipv6/xfrm6_output.c | 2 |
4 files changed, 10 insertions, 5 deletions
diff --git a/net/ipv6/ah6.c b/net/ipv6/ah6.c index 379c8e04c36c..2ff0c8233e47 100644 --- a/net/ipv6/ah6.c +++ b/net/ipv6/ah6.c | |||
@@ -283,7 +283,7 @@ static int ah6_output(struct xfrm_state *x, struct sk_buff *skb) | |||
283 | 283 | ||
284 | ah->reserved = 0; | 284 | ah->reserved = 0; |
285 | ah->spi = x->id.spi; | 285 | ah->spi = x->id.spi; |
286 | ah->seq_no = htonl(XFRM_SKB_CB(skb)->seq); | 286 | ah->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output); |
287 | 287 | ||
288 | spin_lock_bh(&x->lock); | 288 | spin_lock_bh(&x->lock); |
289 | err = ah_mac_digest(ahp, skb, ah->auth_data); | 289 | err = ah_mac_digest(ahp, skb, ah->auth_data); |
diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c index 8e0f1428c716..0ec1402320ea 100644 --- a/net/ipv6/esp6.c +++ b/net/ipv6/esp6.c | |||
@@ -188,7 +188,7 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) | |||
188 | *skb_mac_header(skb) = IPPROTO_ESP; | 188 | *skb_mac_header(skb) = IPPROTO_ESP; |
189 | 189 | ||
190 | esph->spi = x->id.spi; | 190 | esph->spi = x->id.spi; |
191 | esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq); | 191 | esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output); |
192 | 192 | ||
193 | sg_init_table(sg, nfrags); | 193 | sg_init_table(sg, nfrags); |
194 | skb_to_sgvec(skb, sg, | 194 | skb_to_sgvec(skb, sg, |
@@ -199,7 +199,8 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) | |||
199 | aead_givcrypt_set_callback(req, 0, esp_output_done, skb); | 199 | aead_givcrypt_set_callback(req, 0, esp_output_done, skb); |
200 | aead_givcrypt_set_crypt(req, sg, sg, clen, iv); | 200 | aead_givcrypt_set_crypt(req, sg, sg, clen, iv); |
201 | aead_givcrypt_set_assoc(req, asg, sizeof(*esph)); | 201 | aead_givcrypt_set_assoc(req, asg, sizeof(*esph)); |
202 | aead_givcrypt_set_giv(req, esph->enc_data, XFRM_SKB_CB(skb)->seq); | 202 | aead_givcrypt_set_giv(req, esph->enc_data, |
203 | XFRM_SKB_CB(skb)->seq.output); | ||
203 | 204 | ||
204 | ESP_SKB_CB(skb)->tmp = tmp; | 205 | ESP_SKB_CB(skb)->tmp = tmp; |
205 | err = crypto_aead_givencrypt(req); | 206 | err = crypto_aead_givencrypt(req); |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 9ac6ca2521c3..8b67ca07467d 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -621,7 +621,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
621 | * or if the skb it not generated by a local socket. (This last | 621 | * or if the skb it not generated by a local socket. (This last |
622 | * check should be redundant, but it's free.) | 622 | * check should be redundant, but it's free.) |
623 | */ | 623 | */ |
624 | if (!np || np->pmtudisc >= IPV6_PMTUDISC_DO) { | 624 | if (!skb->local_df) { |
625 | skb->dev = skb->dst->dev; | 625 | skb->dev = skb->dst->dev; |
626 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev); | 626 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev); |
627 | IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_FRAGFAILS); | 627 | IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_FRAGFAILS); |
@@ -1420,6 +1420,10 @@ int ip6_push_pending_frames(struct sock *sk) | |||
1420 | tmp_skb->sk = NULL; | 1420 | tmp_skb->sk = NULL; |
1421 | } | 1421 | } |
1422 | 1422 | ||
1423 | /* Allow local fragmentation. */ | ||
1424 | if (np->pmtudisc < IPV6_PMTUDISC_DO) | ||
1425 | skb->local_df = 1; | ||
1426 | |||
1423 | ipv6_addr_copy(final_dst, &fl->fl6_dst); | 1427 | ipv6_addr_copy(final_dst, &fl->fl6_dst); |
1424 | __skb_pull(skb, skb_network_header_len(skb)); | 1428 | __skb_pull(skb, skb_network_header_len(skb)); |
1425 | if (opt && opt->opt_flen) | 1429 | if (opt && opt->opt_flen) |
diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c index b34c58c65656..79ccfb080733 100644 --- a/net/ipv6/xfrm6_output.c +++ b/net/ipv6/xfrm6_output.c | |||
@@ -36,7 +36,7 @@ static int xfrm6_tunnel_check_size(struct sk_buff *skb) | |||
36 | if (mtu < IPV6_MIN_MTU) | 36 | if (mtu < IPV6_MIN_MTU) |
37 | mtu = IPV6_MIN_MTU; | 37 | mtu = IPV6_MIN_MTU; |
38 | 38 | ||
39 | if (skb->len > mtu) { | 39 | if (!skb->local_df && skb->len > mtu) { |
40 | skb->dev = dst->dev; | 40 | skb->dev = dst->dev; |
41 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev); | 41 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev); |
42 | ret = -EMSGSIZE; | 42 | ret = -EMSGSIZE; |