session: fix unlisten with invalid handles 78/17978/4
authorFlorin Coras <fcoras@cisco.com>
Sat, 2 Mar 2019 03:26:31 +0000 (19:26 -0800)
committerDave Barach <openvpp@barachs.net>
Sat, 2 Mar 2019 23:40:15 +0000 (23:40 +0000)
Change-Id: I6fbfa06e3df9988254561bf1a770084028117005
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vnet/session/application.c

index 09111e6..052a3e4 100644 (file)
@@ -47,6 +47,14 @@ app_listener_get (application_t * app, u32 app_listener_index)
   return pool_elt_at_index (app->listeners, app_listener_index);
 }
 
+static app_listener_t *
+app_listener_get_if_valid (application_t * app, u32 app_listener_index)
+{
+  if (pool_is_free_index (app->listeners, app_listener_index))
+    return 0;
+  return pool_elt_at_index (app->listeners, app_listener_index);
+}
+
 static void
 app_listener_free (application_t * app, app_listener_t * app_listener)
 {
@@ -94,7 +102,7 @@ app_listener_get_w_id (u32 listener_id)
   app = application_get_if_valid (app_index);
   if (!app)
     return 0;
-  return app_listener_get (app, app_listener_index);
+  return app_listener_get_if_valid (app, app_listener_index);
 }
 
 app_listener_t *
@@ -1060,7 +1068,9 @@ vnet_unlisten (vnet_unlisten_args_t * a)
   if (!(app = application_get_if_valid (a->app_index)))
     return VNET_API_ERROR_APPLICATION_NOT_ATTACHED;
 
-  al = app_listener_get_w_handle (a->handle);
+  if (!(al = app_listener_get_w_handle (a->handle)))
+    return -1;
+
   if (al->app_index != app->app_index)
     {
       clib_warning ("app doesn't own handle %llu!", a->handle);