diff options
author | Timo Teräs <timo.teras@iki.fi> | 2013-05-27 16:46:31 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-03 03:07:42 -0400 |
commit | 387aa65a89434abe3128d36d1a6fc3842c94905d (patch) | |
tree | 65ca8ab0c6224eb39941455b1eb0abd2fa410035 /net/ipv4/esp4.c | |
parent | 829a5071ccf040b78bd93286a218580c66833b00 (diff) |
ipv4: properly refresh rtable entries on pmtu/redirect events
This reverts commit 05ab86c5 (xfrm4: Invalidate all ipv4 routes on
IPsec pmtu events). Flushing all cached entries is not needed.
Instead, invalidate only the related next hop dsts to recheck for
the added next hop exception where needed. This also fixes a subtle
race due to bumping generation id's before updating the pmtu.
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/esp4.c')
-rw-r--r-- | net/ipv4/esp4.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c index 4cfe34d4cc96..ab3d814bc80a 100644 --- a/net/ipv4/esp4.c +++ b/net/ipv4/esp4.c | |||
@@ -502,12 +502,9 @@ static void esp4_err(struct sk_buff *skb, u32 info) | |||
502 | if (!x) | 502 | if (!x) |
503 | return; | 503 | return; |
504 | 504 | ||
505 | if (icmp_hdr(skb)->type == ICMP_DEST_UNREACH) { | 505 | if (icmp_hdr(skb)->type == ICMP_DEST_UNREACH) |
506 | atomic_inc(&flow_cache_genid); | ||
507 | rt_genid_bump(net); | ||
508 | |||
509 | ipv4_update_pmtu(skb, net, info, 0, 0, IPPROTO_ESP, 0); | 506 | ipv4_update_pmtu(skb, net, info, 0, 0, IPPROTO_ESP, 0); |
510 | } else | 507 | else |
511 | ipv4_redirect(skb, net, 0, 0, IPPROTO_ESP, 0); | 508 | ipv4_redirect(skb, net, 0, 0, IPPROTO_ESP, 0); |
512 | xfrm_state_put(x); | 509 | xfrm_state_put(x); |
513 | } | 510 | } |