diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-27 12:26:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-27 12:26:46 -0400 |
commit | 15c54033964a943de7b0763efd3bd0ede7326395 (patch) | |
tree | 840b292612d1b5396d5bab5bde537a9013db3ceb /net/ipv4/xfrm4_input.c | |
parent | ad5da3cf39a5b11a198929be1f2644e17ecd767e (diff) | |
parent | 912a41a4ab935ce8c4308428ec13fc7f8b1f18f4 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (448 commits)
[IPV4] nl_fib_lookup: Initialise res.r before fib_res_put(&res)
[IPV6]: Fix thinko in ipv6_rthdr_rcv() changes.
[IPV4]: Add multipath cached to feature-removal-schedule.txt
[WIRELESS] cfg80211: Clarify locking comment.
[WIRELESS] cfg80211: Fix locking in wiphy_new.
[WEXT] net_device: Don't include wext bits if not required.
[WEXT]: Misc code cleanups.
[WEXT]: Reduce inline abuse.
[WEXT]: Move EXPORT_SYMBOL statements where they belong.
[WEXT]: Cleanup early ioctl call path.
[WEXT]: Remove options.
[WEXT]: Remove dead debug code.
[WEXT]: Clean up how wext is called.
[WEXT]: Move to net/wireless
[AFS]: Eliminate cmpxchg() usage in vlocation code.
[RXRPC]: Fix pointers passed to bitops.
[RXRPC]: Remove bogus atomic_* overrides.
[AFS]: Fix u64 printing in debug logging.
[AFS]: Add "directory write" support.
[AFS]: Implement the CB.InitCallBackState3 operation.
...
Diffstat (limited to 'net/ipv4/xfrm4_input.c')
-rw-r--r-- | net/ipv4/xfrm4_input.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c index 78e80deb7e89..5ceca951d73f 100644 --- a/net/ipv4/xfrm4_input.c +++ b/net/ipv4/xfrm4_input.c | |||
@@ -28,7 +28,7 @@ static int xfrm4_parse_spi(struct sk_buff *skb, u8 nexthdr, __be32 *spi, __be32 | |||
28 | switch (nexthdr) { | 28 | switch (nexthdr) { |
29 | case IPPROTO_IPIP: | 29 | case IPPROTO_IPIP: |
30 | case IPPROTO_IPV6: | 30 | case IPPROTO_IPV6: |
31 | *spi = skb->nh.iph->saddr; | 31 | *spi = ip_hdr(skb)->saddr; |
32 | *seq = 0; | 32 | *seq = 0; |
33 | return 0; | 33 | return 0; |
34 | } | 34 | } |
@@ -39,9 +39,9 @@ static int xfrm4_parse_spi(struct sk_buff *skb, u8 nexthdr, __be32 *spi, __be32 | |||
39 | #ifdef CONFIG_NETFILTER | 39 | #ifdef CONFIG_NETFILTER |
40 | static inline int xfrm4_rcv_encap_finish(struct sk_buff *skb) | 40 | static inline int xfrm4_rcv_encap_finish(struct sk_buff *skb) |
41 | { | 41 | { |
42 | struct iphdr *iph = skb->nh.iph; | ||
43 | |||
44 | if (skb->dst == NULL) { | 42 | if (skb->dst == NULL) { |
43 | const struct iphdr *iph = ip_hdr(skb); | ||
44 | |||
45 | if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, | 45 | if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, |
46 | skb->dev)) | 46 | skb->dev)) |
47 | goto drop; | 47 | goto drop; |
@@ -55,18 +55,18 @@ drop: | |||
55 | 55 | ||
56 | int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) | 56 | int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) |
57 | { | 57 | { |
58 | int err; | ||
59 | __be32 spi, seq; | 58 | __be32 spi, seq; |
60 | struct xfrm_state *xfrm_vec[XFRM_MAX_DEPTH]; | 59 | struct xfrm_state *xfrm_vec[XFRM_MAX_DEPTH]; |
61 | struct xfrm_state *x; | 60 | struct xfrm_state *x; |
62 | int xfrm_nr = 0; | 61 | int xfrm_nr = 0; |
63 | int decaps = 0; | 62 | int decaps = 0; |
63 | int err = xfrm4_parse_spi(skb, ip_hdr(skb)->protocol, &spi, &seq); | ||
64 | 64 | ||
65 | if ((err = xfrm4_parse_spi(skb, skb->nh.iph->protocol, &spi, &seq)) != 0) | 65 | if (err != 0) |
66 | goto drop; | 66 | goto drop; |
67 | 67 | ||
68 | do { | 68 | do { |
69 | struct iphdr *iph = skb->nh.iph; | 69 | const struct iphdr *iph = ip_hdr(skb); |
70 | 70 | ||
71 | if (xfrm_nr == XFRM_MAX_DEPTH) | 71 | if (xfrm_nr == XFRM_MAX_DEPTH) |
72 | goto drop; | 72 | goto drop; |
@@ -113,7 +113,8 @@ int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) | |||
113 | break; | 113 | break; |
114 | } | 114 | } |
115 | 115 | ||
116 | if ((err = xfrm_parse_spi(skb, skb->nh.iph->protocol, &spi, &seq)) < 0) | 116 | err = xfrm_parse_spi(skb, ip_hdr(skb)->protocol, &spi, &seq); |
117 | if (err < 0) | ||
117 | goto drop; | 118 | goto drop; |
118 | } while (!err); | 119 | } while (!err); |
119 | 120 | ||
@@ -146,15 +147,15 @@ int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) | |||
146 | return 0; | 147 | return 0; |
147 | } else { | 148 | } else { |
148 | #ifdef CONFIG_NETFILTER | 149 | #ifdef CONFIG_NETFILTER |
149 | __skb_push(skb, skb->data - skb->nh.raw); | 150 | __skb_push(skb, skb->data - skb_network_header(skb)); |
150 | skb->nh.iph->tot_len = htons(skb->len); | 151 | ip_hdr(skb)->tot_len = htons(skb->len); |
151 | ip_send_check(skb->nh.iph); | 152 | ip_send_check(ip_hdr(skb)); |
152 | 153 | ||
153 | NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, skb->dev, NULL, | 154 | NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, skb->dev, NULL, |
154 | xfrm4_rcv_encap_finish); | 155 | xfrm4_rcv_encap_finish); |
155 | return 0; | 156 | return 0; |
156 | #else | 157 | #else |
157 | return -skb->nh.iph->protocol; | 158 | return -ip_hdr(skb)->protocol; |
158 | #endif | 159 | #endif |
159 | } | 160 | } |
160 | 161 | ||