aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2021-02-10 15:26:37 -0800
committerFlorin Coras <florin.coras@gmail.com>2021-02-10 23:22:22 +0000
commit1bb74944a385ea1b8f50b975359cb1c7ca94afb4 (patch)
treea56e4bf910d32ef08654c436f41e6baf8406b2b1
parent130680b21ea4977ef50d45c9f17c8e70a8a64f54 (diff)
vcl: validate seg handle on migrate only if needed
Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I3c15a465f84f2ceb6bd5f1c459899824d4bc1c90
-rw-r--r--src/vcl/vppcom.c15
-rw-r--r--src/vnet/session/session_api.c2
2 files changed, 11 insertions, 6 deletions
diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c
index bc83b55d5d0..80f0ad7b202 100644
--- a/src/vcl/vppcom.c
+++ b/src/vcl/vppcom.c
@@ -636,12 +636,17 @@ vcl_session_migrated_handler (vcl_worker_t * wrk, void *data)
return;
}
- fs_index = vcl_segment_table_lookup (mp->segment_handle);
- if (fs_index == VCL_INVALID_SEGMENT_INDEX)
+ /* Only validate if a value is provided */
+ if (mp->segment_handle != SESSION_INVALID_HANDLE)
{
- VDBG (0, "segment for session %u is not mounted!", s->session_index);
- s->session_state = VCL_STATE_DETACHED;
- return;
+ fs_index = vcl_segment_table_lookup (mp->segment_handle);
+ if (fs_index == VCL_INVALID_SEGMENT_INDEX)
+ {
+ VDBG (0, "segment %lx for session %u is not mounted!",
+ mp->segment_handle, s->session_index);
+ s->session_state = VCL_STATE_DETACHED;
+ return;
+ }
}
s->vpp_handle = mp->new_handle;
diff --git a/src/vnet/session/session_api.c b/src/vnet/session/session_api.c
index 0116a7ece66..e5021d4507c 100644
--- a/src/vnet/session/session_api.c
+++ b/src/vnet/session/session_api.c
@@ -454,7 +454,7 @@ mq_send_session_migrate_cb (session_t * s, session_handle_t new_sh)
mp->new_handle = new_sh;
mp->vpp_thread_index = thread_index;
mp->vpp_evt_q = fifo_segment_msg_q_offset (eq_seg, thread_index);
- mp->segment_handle = session_segment_handle (s);
+ mp->segment_handle = SESSION_INVALID_HANDLE;
svm_msg_q_add_and_unlock (app_mq, msg);
}