summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorFlorian Westphal2011-11-25 07:47:16 +0100
committerDavid S. Miller2011-11-26 21:57:36 +0100
commit71b1391a41289735676be02e35239e5aa9fe6ba6 (patch)
tree2651b2efbbdc39beb00bcf3e9cd45f949952c240 /net
parentdecnet: proper socket refcounting (diff)
downloadkernel-qcow2-linux-71b1391a41289735676be02e35239e5aa9fe6ba6.tar.gz
kernel-qcow2-linux-71b1391a41289735676be02e35239e5aa9fe6ba6.tar.xz
kernel-qcow2-linux-71b1391a41289735676be02e35239e5aa9fe6ba6.zip
l2tp: ensure sk->dst is still valid
When using l2tp over ipsec, the tunnel will hang when rekeying occurs. Reason is that the transformer bundle attached to the dst entry is now in STATE_DEAD and thus xfrm_output_one() drops all packets (XfrmOutStateExpired increases). Fix this by calling __sk_dst_check (which drops the stale dst if xfrm dst->check callback finds that the bundle is no longer valid). Cc: James Chapman <jchapman@katalix.com> Signed-off-by: Florian Westphal <fw@strlen.de> Acked-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/l2tp/l2tp_core.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
index cf0f308abf5e..89ff8c67943e 100644
--- a/net/l2tp/l2tp_core.c
+++ b/net/l2tp/l2tp_core.c
@@ -1072,7 +1072,7 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len
/* Get routing info from the tunnel socket */
skb_dst_drop(skb);
- skb_dst_set(skb, dst_clone(__sk_dst_get(sk)));
+ skb_dst_set(skb, dst_clone(__sk_dst_check(sk, 0)));
inet = inet_sk(sk);
fl = &inet->cork.fl;