vlib: fail in runtime if workers > nelts 89/42089/7
authorVladimir Smirnov <[email protected]>
Fri, 3 Jan 2025 20:47:56 +0000 (21:47 +0100)
committerDamjan Marion <[email protected]>
Mon, 20 Jan 2025 14:42:53 +0000 (14:42 +0000)
Type: fix

With a release build, if you configure more than 55 workers, vpp
will start, but will corrupt memory as a lot of internal datastrctures
are allocated with assumption that there will be not more than
FRAME_QUEUE_MAX_NELTS threads.

Add a warning if amount of configured workers more than MAX_NELTS.

Anticipate that next commit would add a compile-time configurable
variable and name it VPP_MAX_THREADS.

Change-Id: I015f4f9aa5e8b828c7d90c90142d7a7c1ce68f97
Signed-off-by: Vladimir Smirnov <[email protected]>
src/vlib/threads.c

index f3fcb40..fa8d949 100644 (file)
@@ -282,6 +282,11 @@ vlib_thread_init (vlib_main_t * vm)
       tr->first_index = first_index;
       first_index += tr->count;
       n_vlib_mains += (tr->no_data_structure_clone == 0) ? tr->count : 0;
+      if (n_vlib_mains >= FRAME_QUEUE_MAX_NELTS)
+       return clib_error_return (0,
+                                 "configured amount of workers %u is"
+                                 " greater than VPP_MAX_WORKERS (%u)",
+                                 n_vlib_mains, FRAME_QUEUE_MAX_NELTS);
 
       /* construct coremask */
       if (tr->use_pthreads || !tr->count)