aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ipv4/ip_options.c5
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];