vcl/session/svm: fix coverity warnings 57/14657/3
authorFlorin Coras <fcoras@cisco.com>
Wed, 5 Sep 2018 02:47:52 +0000 (19:47 -0700)
committerMarco Varlese <marco.varlese@suse.de>
Thu, 6 Sep 2018 08:37:20 +0000 (08:37 +0000)
Change-Id: I27532b3ab244dc95955e836a42b229a6e4e32818
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/svm/queue.c
src/vcl/vppcom.c
src/vnet/session/session_api.c

index 771033d..6a578fb 100644 (file)
@@ -122,7 +122,7 @@ svm_queue_send_signal (svm_queue_t * q, u8 is_prod)
     {
       int __clib_unused rv, fd;
       u64 data = 1;
-      ASSERT (q->consumer_evtfd != -1);
+      ASSERT (q->consumer_evtfd > 0 && q->producer_evtfd > 0);
       fd = is_prod ? q->producer_evtfd : q->consumer_evtfd;
       rv = write (fd, &data, sizeof (data));
     }
index 60d5eb3..1991e3e 100644 (file)
@@ -1635,6 +1635,8 @@ vcl_select_handle_mq (vcl_worker_t * wrk, svm_msg_q_t * mq,
        case FIFO_EVENT_APP_RX:
          sid = e->fifo->client_session_index;
          session = vcl_session_get (wrk, sid);
+         if (!session)
+           break;
          if (sid < n_bits && read_map)
            {
              clib_bitmap_set_no_check (read_map, sid, 1);
@@ -1660,6 +1662,8 @@ vcl_select_handle_mq (vcl_worker_t * wrk, svm_msg_q_t * mq,
                break;
            }
          session = vcl_ct_session_get_from_fifo (wrk, e->fifo, 0);
+         if (!session)
+           break;
          sid = session->session_index;
          if (sid < n_bits && read_map)
            {
@@ -1669,9 +1673,9 @@ vcl_select_handle_mq (vcl_worker_t * wrk, svm_msg_q_t * mq,
          break;
        case SESSION_IO_EVT_CT_RX:
          session = vcl_ct_session_get_from_fifo (wrk, e->fifo, 1);
-         sid = session->session_index;
          if (!session)
            break;
+         sid = session->session_index;
          if (sid < n_bits && write_map)
            {
              clib_bitmap_set_no_check (write_map, sid, 1);
@@ -2417,6 +2421,9 @@ vppcom_epoll_wait (uint32_t vep_handle, struct epoll_event *events,
     }
 
   vep_session = vcl_session_get_w_handle (wrk, vep_handle);
+  if (!vep_session)
+    return VPPCOM_EBADFD;
+
   if (PREDICT_FALSE (!vep_session->is_vep))
     {
       clib_warning ("VCL<%d>: ERROR: vep_idx (%u) is not a vep!",
index aa29090..d8531a4 100755 (executable)
@@ -1354,8 +1354,8 @@ vl_api_app_worker_add_del_t_handler (vl_api_app_worker_add_del_t * mp)
       goto done;
     }
 
-  /* Make coverity happy */
-  ASSERT (args.evt_q && args.segment);
+  if (!mp->is_add)
+    goto done;
 
   /* Send fifo segment fd if needed */
   if (ssvm_type (args.segment) == SSVM_SEGMENT_MEMFD)
@@ -1375,7 +1375,7 @@ vl_api_app_worker_add_del_t_handler (vl_api_app_worker_add_del_t * mp)
 done:
   REPLY_MACRO2 (VL_API_APP_WORKER_ADD_DEL_REPLY, ({
     rmp->is_add = mp->is_add;
-    if (!rv)
+    if (!rv && mp->is_add)
       {
        rmp->wrk_index = clib_host_to_net_u32 (args.wrk_index);
        if (vec_len (args.segment->name))