aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Yourtchenko <ayourtch@gmail.com>2018-09-05 12:30:35 +0200
committerNeale Ranns <nranns@cisco.com>2018-09-06 11:08:30 +0000
commitf74b4d2b559b1d5697fd625d9c8e0f76ba5a4463 (patch)
tree7f30ce42aac8d01ca65054e4da1118c0c1e8d058
parenteabe79ca28d3ed78d082bf0a5266dbc5289c3e8d (diff)
acl-plugin: VPP-1400: fix crash when removing a session entry
bihash deletion operation may in turn do underlying memory operations, so ensure it is using the correct (private) heap. Change-Id: Ibef7ad7f9db6fa83da02316bf7509072ce579bc0 Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
-rw-r--r--src/plugins/acl/session_inlines.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/plugins/acl/session_inlines.h b/src/plugins/acl/session_inlines.h
index 0d7c1e4ace7..93683c4c4a1 100644
--- a/src/plugins/acl/session_inlines.h
+++ b/src/plugins/acl/session_inlines.h
@@ -394,6 +394,7 @@ acl_fa_deactivate_session (acl_main_t * am, u32 sw_if_index,
fa_session_t *sess =
get_session_ptr (am, sess_id.thread_index, sess_id.session_index);
ASSERT (sess->thread_index == os_get_thread_index ());
+ void *oldheap = clib_mem_set_heap (am->acl_mheap);
if (sess->is_ip6)
{
clib_bihash_add_del_40_8 (&am->fa_ip6_sessions_hash,
@@ -409,6 +410,7 @@ acl_fa_deactivate_session (acl_main_t * am, u32 sw_if_index,
sess->deleted = 1;
clib_smp_atomic_add (&am->fa_session_total_deactivations, 1);
+ clib_mem_set_heap (oldheap);
}
always_inline void