diff options
author | Srikanth Akula <srakula@cisco.com> | 2019-11-18 11:49:58 -0800 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2019-11-18 23:48:00 +0000 |
commit | e140d5d0255b80f8dda945daf7202b5698d81d9b (patch) | |
tree | a49fd80aee3b5d844712f89f04cdf6a5ed9a853c /src/vnet/session/session.c | |
parent | c17fc44735b509b22476e8663e33be62678837a2 (diff) |
session: extra checks in session validation
Type: fix
Adding few extra checks while doign session validationwq!
Signed-off-by: Srikanth Akula <srakula@cisco.com>
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I4d18b5ad97d1802ce38a07aeb56b5f35939c1187
Diffstat (limited to 'src/vnet/session/session.c')
-rw-r--r-- | src/vnet/session/session.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index 163f4d2a6a6..0751739732f 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -205,6 +205,32 @@ session_free (session_t * s) pool_put (session_main.wrk[s->thread_index].sessions, s); } +u8 +session_is_valid (u32 si, u8 thread_index) +{ + session_t *s; + transport_connection_t *tc; + + s = pool_elt_at_index (session_main.wrk[thread_index].sessions, si); + + if (!s) + return 1; + + if (s->thread_index != thread_index || s->session_index != si) + return 0; + + if (s->session_state == SESSION_STATE_TRANSPORT_DELETED + || s->session_state <= SESSION_STATE_LISTENING) + return 1; + + tc = session_get_transport (s); + if (s->connection_index != tc->c_index + || s->thread_index != tc->thread_index || tc->s_index != si) + return 0; + + return 1; +} + static void session_cleanup_notify (session_t * s, session_cleanup_ntf_t ntf) { |