From 30ddf76a9a8a850b0f806df10fde22422f62f7af Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Wed, 4 Jul 2012 16:13:17 -0700 Subject: [PATCH] --- yaml --- r: 314961 b: refs/heads/master c: 11604721a3c4bea60e2ddd9e4e30d741ecdba7b0 h: refs/heads/master i: 314959: 44524ec5c02eb5188c06185848dad08793dbbad9 v: v3 --- [refs] | 2 +- trunk/net/ipv4/ip_options.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index baf68f18cfba..6ab12082719a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e87183c2b5ab1f55ebad2f260a7eb4d31549ce25 +refs/heads/master: 11604721a3c4bea60e2ddd9e4e30d741ecdba7b0 diff --git a/trunk/net/ipv4/ip_options.c b/trunk/net/ipv4/ip_options.c index 766dfe56885a..1f022510abe3 100644 --- a/trunk/net/ipv4/ip_options.c +++ b/trunk/net/ipv4/ip_options.c @@ -253,12 +253,15 @@ int ip_options_compile(struct net *net, { __be32 spec_dst = (__force __be32) 0; unsigned char *pp_ptr = NULL; + struct rtable *rt = NULL; unsigned char *optptr; unsigned char *iph; int optlen, l; if (skb != NULL) { - spec_dst = fib_compute_spec_dst(skb); + rt = skb_rtable(skb); + if (rt) + spec_dst = fib_compute_spec_dst(skb); optptr = (unsigned char *)&(ip_hdr(skb)[1]); } else optptr = opt->__data; @@ -330,7 +333,7 @@ int ip_options_compile(struct net *net, pp_ptr = optptr + 2; goto error; } - if (skb) { + if (rt) { memcpy(&optptr[optptr[2]-1], &spec_dst, 4); opt->is_changed = 1; } @@ -372,7 +375,7 @@ int ip_options_compile(struct net *net, goto error; } opt->ts = optptr - iph; - if (skb) { + if (rt) { memcpy(&optptr[optptr[2]-1], &spec_dst, 4); timeptr = &optptr[optptr[2]+3]; }