From 96291d1de4952aecbab590566236436eaf6c017a Mon Sep 17 00:00:00 2001 From: Hendrik van Wyk Date: Wed, 31 Jul 2019 11:17:37 +0200 Subject: [PATCH] Do not do ipsec.InitSARemote on a stopped fastDatapathForwarder. Fixes 3675 It is possible for ipsec.InitSARemote to be called after ipsec.Destroy. If an xfrm policy for that source/destination pair exists it will be updated to the SPI from the Destroyed connection causing IPSEC to stop working. --- router/fastdp.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/router/fastdp.go b/router/fastdp.go index 4ecefee9..606a00d4 100644 --- a/router/fastdp.go +++ b/router/fastdp.go @@ -881,6 +881,11 @@ func (fwd *fastDatapathForwarder) handleHeartbeatAck() { } func (fwd *fastDatapathForwarder) handleCryptoInitSARemote(msg []byte) { + if fwd.stopped { + log.Info(fwd.logPrefix(), "IPSec init SA remote failed: forwarder has already been stopped") + return + } + log.Info(fwd.logPrefix(), "IPSec init SA remote") err := fwd.fastdp.ipsec.InitSARemote( msg,