session: fix a crash when using unregistered transport proto 68/36768/2
authorFilip Tehlar <ftehlar@cisco.com>
Thu, 28 Jul 2022 08:39:13 +0000 (08:39 +0000)
committerFilip Tehlar <ftehlar@cisco.com>
Thu, 28 Jul 2022 15:38:18 +0000 (15:38 +0000)
Type: improvement

Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Change-Id: I39e3e007da2b99321bebf3e1c1ebb1d87547f532

src/vnet/session/session_types.h
src/vnet/session/transport.c

index 7cfa671..95a88c5 100644 (file)
@@ -505,7 +505,8 @@ STATIC_ASSERT (sizeof (session_dgram_hdr_t) == (SESSION_CONN_ID_LEN + 8),
   _ (NOEXTCFG, "no extended transport config")                                \
   _ (NOCRYPTOENG, "no crypto engine")                                         \
   _ (NOCRYPTOCKP, "cert key pair not found ")                                 \
-  _ (LOCAL_CONNECT, "could not connect with local scope")
+  _ (LOCAL_CONNECT, "could not connect with local scope")                     \
+  _ (TRANSPORT_NO_REG, "transport was not registered")
 
 typedef enum session_error_p_
 {
index 54ce917..192a201 100644 (file)
@@ -314,6 +314,8 @@ transport_cleanup_half_open (transport_proto_t tp, u32 conn_index)
 int
 transport_connect (transport_proto_t tp, transport_endpoint_cfg_t * tep)
 {
+  if (PREDICT_FALSE (!tp_vfts[tp].connect))
+    return SESSION_E_TRANSPORT_NO_REG;
   return tp_vfts[tp].connect (tep);
 }
 
@@ -343,6 +345,8 @@ u32
 transport_start_listen (transport_proto_t tp, u32 session_index,
                        transport_endpoint_cfg_t *tep)
 {
+  if (PREDICT_FALSE (!tp_vfts[tp].start_listen))
+    return SESSION_E_TRANSPORT_NO_REG;
   return tp_vfts[tp].start_listen (session_index, tep);
 }