linux-cp: fix issue of possibly closing negative fd 47/35547/3
authorAlexander Chernavin <[email protected]>
Fri, 4 Mar 2022 13:18:15 +0000 (13:18 +0000)
committerMatthew Smith <[email protected]>
Fri, 4 Mar 2022 22:30:21 +0000 (22:30 +0000)
Type: fix

Primarily fix an issue reported by Coverity in
lcp_nl_open_sync_socket() that close() could possibly be run with
negative fd. Also, add more checks and error logging there.

Signed-off-by: Alexander Chernavin <[email protected]>
Change-Id: I9a88520d068392977a6eba0766451e5652fe512c

src/plugins/linux-cp/lcp_nl.c

index 43f5319..176d85d 100644 (file)
@@ -940,18 +940,27 @@ lcp_nl_open_sync_socket (nl_sock_type_t sock_type)
   nm->sk_route_sync[sock_type] = sk_route = nl_socket_alloc ();
 
   dest_ns_fd = lcp_get_default_ns_fd ();
-  if (dest_ns_fd)
+  if (dest_ns_fd > 0)
     {
       curr_ns_fd = clib_netns_open (NULL /* self */);
-      clib_setns (dest_ns_fd);
+      if (clib_setns (dest_ns_fd) == -1)
+       NL_ERROR ("Cannot set destination ns");
     }
 
   nl_connect (sk_route, NETLINK_ROUTE);
 
-  if (dest_ns_fd)
+  if (dest_ns_fd > 0)
     {
-      clib_setns (curr_ns_fd);
-      close (curr_ns_fd);
+      if (curr_ns_fd == -1)
+       {
+         NL_ERROR ("No previous ns to set");
+       }
+      else
+       {
+         if (clib_setns (curr_ns_fd) == -1)
+           NL_ERROR ("Cannot set previous ns");
+         close (curr_ns_fd);
+       }
     }
 
   NL_INFO ("Opened netlink synchronization socket %d of type %d",