aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/dpdk/ipsec/ipsec.c
diff options
context:
space:
mode:
authorMatthew Smith <mgsmith@netgate.com>2018-02-24 20:51:53 -0600
committerDamjan Marion <dmarion.lists@gmail.com>2018-02-25 22:04:27 +0000
commit3e57d78a9ad65c6b2a9b68e7bb52b6902f574152 (patch)
tree69e033832e06ed3f5757563c2e807812516b789b /src/plugins/dpdk/ipsec/ipsec.c
parent329a1c10b7120f0be75aa0e0187fbc9f87e760f9 (diff)
Fix bug in dpdk_crypto_session_disposal()
The expression to determine whether to delete a session from the disposal list only evaluates true if some, but not all, of the sessions in the list were freed. When all sessions in the list are freed, it evaluates false and the sessions are left in the list to be freed again later, which can result in a session pool element that was reallocated to a different SA being freed, breaking crypto for the newer SA. Add an 'else' that handles the case where all sessions were freed. Change-Id: I3ae54d5b3bfc3658bf406caa50646924baaae589 Signed-off-by: Matthew Smith <mgsmith@netgate.com>
Diffstat (limited to 'src/plugins/dpdk/ipsec/ipsec.c')
-rw-r--r--src/plugins/dpdk/ipsec/ipsec.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/plugins/dpdk/ipsec/ipsec.c b/src/plugins/dpdk/ipsec/ipsec.c
index dbb069c9e2e..9be7b3bf6a0 100644
--- a/src/plugins/dpdk/ipsec/ipsec.c
+++ b/src/plugins/dpdk/ipsec/ipsec.c
@@ -467,6 +467,8 @@ dpdk_crypto_session_disposal (crypto_session_disposal_t * v, u64 ts)
if (s < vec_end (v))
vec_delete (v, s - v, 0);
+ else
+ vec_reset_length (v);
return 0;
}