vcl: validate ldp select bitmap only if bits set 79/43179/2
authorFlorin Coras <[email protected]>
Sat, 14 Jun 2025 22:19:14 +0000 (18:19 -0400)
committerDave Barach <[email protected]>
Mon, 16 Jun 2025 17:19:39 +0000 (17:19 +0000)
Type: fix

Change-Id: Ic873cb9511cf70619722e7b0f58211ad2a2a6772
Signed-off-by: Florin Coras <[email protected]>
src/vcl/ldp.c

index 7e4cddb..ffd7b04 100644 (file)
@@ -651,14 +651,15 @@ ldp_select_init_maps (fd_set * __restrict original,
   clib_memcpy_fast (*resultb, original, n_bytes);
   memset (original, 0, n_bytes);
 
-  clib_bitmap_foreach (fd, *resultb)  {
-    if (fd > nfds)
-      break;
-    vlsh = ldp_fd_to_vlsh (fd);
-    if (vlsh == VLS_INVALID_HANDLE)
-      clib_bitmap_set_no_check (*libcb, fd, 1);
-    else
-      {
+  clib_bitmap_foreach (fd, *resultb)
+    {
+      if (fd > nfds)
+       break;
+      vlsh = ldp_fd_to_vlsh (fd);
+      if (vlsh == VLS_INVALID_HANDLE)
+       clib_bitmap_set_no_check (*libcb, fd, 1);
+      else
+       {
          vlsh_to_session_and_worker_index (vlsh, &session_index, &wrk_index);
          if (wrk_index != vppcom_worker_index ())
            clib_warning (
@@ -666,12 +667,13 @@ ldp_select_init_maps (fd_set * __restrict original,
              wrk_index, vppcom_worker_index ());
          else
            *vclb = clib_bitmap_set (*vclb, session_index, 1);
-      }
-  }
+       }
+    }
 
   si_bits_set = clib_bitmap_last_set (*vclb) + 1;
   *si_bits = (si_bits_set > *si_bits) ? si_bits_set : *si_bits;
-  clib_bitmap_validate (*resultb, *si_bits);
+  if (*si_bits)
+    clib_bitmap_validate (*resultb, *si_bits);
 
   libc_bits_set = clib_bitmap_last_set (*libcb) + 1;
   *libc_bits = (libc_bits_set > *libc_bits) ? libc_bits_set : *libc_bits;