vlibapi: validate private segment rotor prior to use 99/14299/2
authorFlorin Coras <fcoras@cisco.com>
Thu, 16 Aug 2018 22:45:34 +0000 (15:45 -0700)
committerDave Barach <openvpp@barachs.net>
Fri, 17 Aug 2018 14:47:24 +0000 (14:47 +0000)
If the dead client scan removes the rotor position we're about to check
next, we end up outside the private registration pool's bounds.

Change-Id: If4e715593deeac4c06ae6b3fededc1965b042094
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vlibmemory/vlib_api.c

index 35a8686..65fa34b 100644 (file)
@@ -387,9 +387,9 @@ vl_api_clnt_process (vlib_main_t * vm, vlib_node_runtime_t * node,
        */
       if (PREDICT_FALSE (vec_len (am->vlib_private_rps)))
        {
-         vl_mem_api_handle_msg_private (vm, node, private_segment_rotor++);
          if (private_segment_rotor >= vec_len (am->vlib_private_rps))
            private_segment_rotor = 0;
+         vl_mem_api_handle_msg_private (vm, node, private_segment_rotor++);
        }
 
       vlib_process_wait_for_event_or_clock (vm, sleep_time);