diff options
Diffstat (limited to 'net/ipv4/ip_options.c')
| -rw-r--r-- | net/ipv4/ip_options.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c index 05d20cca9d6..1e60f767907 100644 --- a/net/ipv4/ip_options.c +++ b/net/ipv4/ip_options.c @@ -568,12 +568,13 @@ void ip_forward_options(struct sk_buff *skb)  		     ) {  			if (srrptr + 3 > srrspace)  				break; -			if (memcmp(&ip_hdr(skb)->daddr, &optptr[srrptr-1], 4) == 0) +			if (memcmp(&opt->nexthop, &optptr[srrptr-1], 4) == 0)  				break;  		}  		if (srrptr + 3 <= srrspace) {  			opt->is_changed = 1;  			ip_rt_get_source(&optptr[srrptr-1], skb, rt); +			ip_hdr(skb)->daddr = opt->nexthop;  			optptr[2] = srrptr+4;  		} else if (net_ratelimit())  			printk(KERN_CRIT "ip_forward(): Argh! Destination lost!\n"); @@ -640,7 +641,7 @@ int ip_options_rcv_srr(struct sk_buff *skb)  	}  	if (srrptr <= srrspace) {  		opt->srr_is_hit = 1; -		iph->daddr = nexthop; +		opt->nexthop = nexthop;  		opt->is_changed = 1;  	}  	return 0;  |