diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2005-12-19 17:23:23 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2005-12-19 17:23:23 -0500 |
commit | 399c180ac5f0cb66ef9479358e0b8b6bafcbeafe (patch) | |
tree | 4014154b7800e96058d94f78dc34a53681e8d5e5 /net/xfrm/xfrm_state.c | |
parent | 9e999993c71e1506378d26d81f842277aff8a250 (diff) |
[IPSEC]: Perform SA switchover immediately.
When we insert a new xfrm_state which potentially
subsumes an existing one, make sure all cached
bundles are flushed so that the new SA is used
immediately.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/xfrm/xfrm_state.c')
-rw-r--r-- | net/xfrm/xfrm_state.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 7cf48aa6c95b..479effc97666 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c | |||
@@ -431,6 +431,8 @@ void xfrm_state_insert(struct xfrm_state *x) | |||
431 | spin_lock_bh(&xfrm_state_lock); | 431 | spin_lock_bh(&xfrm_state_lock); |
432 | __xfrm_state_insert(x); | 432 | __xfrm_state_insert(x); |
433 | spin_unlock_bh(&xfrm_state_lock); | 433 | spin_unlock_bh(&xfrm_state_lock); |
434 | |||
435 | xfrm_flush_all_bundles(); | ||
434 | } | 436 | } |
435 | EXPORT_SYMBOL(xfrm_state_insert); | 437 | EXPORT_SYMBOL(xfrm_state_insert); |
436 | 438 | ||
@@ -478,6 +480,9 @@ out: | |||
478 | spin_unlock_bh(&xfrm_state_lock); | 480 | spin_unlock_bh(&xfrm_state_lock); |
479 | xfrm_state_put_afinfo(afinfo); | 481 | xfrm_state_put_afinfo(afinfo); |
480 | 482 | ||
483 | if (!err) | ||
484 | xfrm_flush_all_bundles(); | ||
485 | |||
481 | if (x1) { | 486 | if (x1) { |
482 | xfrm_state_delete(x1); | 487 | xfrm_state_delete(x1); |
483 | xfrm_state_put(x1); | 488 | xfrm_state_put(x1); |