diff options
-rw-r--r-- | net/ipv4/ip_options.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c index a19d6471a31..1dc01f9793d 100644 --- a/net/ipv4/ip_options.c +++ b/net/ipv4/ip_options.c | |||
@@ -93,7 +93,6 @@ int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb) | |||
93 | unsigned char *sptr, *dptr; | 93 | unsigned char *sptr, *dptr; |
94 | int soffset, doffset; | 94 | int soffset, doffset; |
95 | int optlen; | 95 | int optlen; |
96 | __be32 daddr; | ||
97 | 96 | ||
98 | memset(dopt, 0, sizeof(struct ip_options)); | 97 | memset(dopt, 0, sizeof(struct ip_options)); |
99 | 98 | ||
@@ -105,8 +104,6 @@ int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb) | |||
105 | sptr = skb_network_header(skb); | 104 | sptr = skb_network_header(skb); |
106 | dptr = dopt->__data; | 105 | dptr = dopt->__data; |
107 | 106 | ||
108 | daddr = fib_compute_spec_dst(skb); | ||
109 | |||
110 | if (sopt->rr) { | 107 | if (sopt->rr) { |
111 | optlen = sptr[sopt->rr+1]; | 108 | optlen = sptr[sopt->rr+1]; |
112 | soffset = sptr[sopt->rr+2]; | 109 | soffset = sptr[sopt->rr+2]; |
@@ -180,6 +177,8 @@ int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb) | |||
180 | doffset -= 4; | 177 | doffset -= 4; |
181 | } | 178 | } |
182 | if (doffset > 3) { | 179 | if (doffset > 3) { |
180 | __be32 daddr = fib_compute_spec_dst(skb); | ||
181 | |||
183 | memcpy(&start[doffset-1], &daddr, 4); | 182 | memcpy(&start[doffset-1], &daddr, 4); |
184 | dopt->faddr = faddr; | 183 | dopt->faddr = faddr; |
185 | dptr[0] = start[0]; | 184 | dptr[0] = start[0]; |