From: Eric Dumazet Date: Tue, 1 Jun 2010 10:04:49 +0000 (+0000) Subject: xfrm: force a dst reference in __xfrm_route_forward() X-Git-Tag: v3.12-rc1~9544^2~158 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fafeeb6c80e3842c6dc19d05de09a23f23eef0d8;p=kernel%2Fkernel-generic.git xfrm: force a dst reference in __xfrm_route_forward() Packets going through __xfrm_route_forward() have a not refcounted dst entry, since we enabled a noref forwarding path. xfrm_lookup() might incorrectly release this dst entry. It's a bit late to make invasive changes in xfrm_lookup(), so lets force a refcount in this path. Signed-off-by: Eric Dumazet Signed-off-by: David S. Miller --- diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index d965a2b..4bf27d9 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -2153,6 +2153,7 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family) return 0; } + skb_dst_force(skb); dst = skb_dst(skb); res = xfrm_lookup(net, &dst, &fl, NULL, 0) == 0;