vapi: memset allocated messages to zero 72/27472/3
authorKlement Sekera <ksekera@cisco.com>
Tue, 9 Jun 2020 14:17:45 +0000 (14:17 +0000)
committerDave Barach <openvpp@barachs.net>
Wed, 10 Jun 2020 11:11:07 +0000 (11:11 +0000)
This avoids using dirty data from shared memory by client.

Type: fix
Signed-off-by: Klement Sekera <ksekera@cisco.com>
Change-Id: I96eecf655bf344ec29609cedbd8dc891b572e207

src/vpp-api/vapi/vapi.c
test/ext/vapi_c_test.c
test/ext/vapi_cpp_test.cpp

index 8a9c8e3..ec87e7b 100644 (file)
@@ -221,6 +221,10 @@ vapi_msg_alloc (vapi_ctx_t ctx, size_t size)
       return NULL;
     }
   void *rv = vl_msg_api_alloc_or_null (size);
+  if (rv)
+    {
+      clib_memset (rv, 0, size);
+    }
   return rv;
 }
 
index b5075e9..0247933 100644 (file)
@@ -526,9 +526,6 @@ START_TEST (test_loopbacks_1)
       dctx.last_called = false;
       clib_memset (&seen, 0, sizeof (seen));
       dump = vapi_alloc_sw_interface_dump (ctx);
-      dump->payload.name_filter_valid = 0;
-      clib_memset (dump->payload.name_filter.buf, 0,
-                  dump->payload.name_filter.length);
       while (VAPI_EAGAIN ==
             (rv =
              vapi_sw_interface_dump (ctx, dump, sw_interface_dump_cb,
@@ -558,9 +555,6 @@ START_TEST (test_loopbacks_1)
   dctx.last_called = false;
   clib_memset (&seen, 0, sizeof (seen));
   dump = vapi_alloc_sw_interface_dump (ctx);
-  dump->payload.name_filter_valid = 0;
-  clib_memset (dump->payload.name_filter.buf, 0,
-              dump->payload.name_filter.length);
   while (VAPI_EAGAIN ==
         (rv =
          vapi_sw_interface_dump (ctx, dump, sw_interface_dump_cb, &dctx)))
@@ -683,9 +677,6 @@ START_TEST (test_loopbacks_2)
   clib_memset (&seen, 0, sizeof (seen));
   sw_interface_dump_ctx dctx = { false, num_ifs, sw_if_indexes, seen, 0 };
   vapi_msg_sw_interface_dump *dump = vapi_alloc_sw_interface_dump (ctx);
-  dump->payload.name_filter_valid = 0;
-  clib_memset (dump->payload.name_filter.buf, 0,
-              dump->payload.name_filter.length);
   while (VAPI_EAGAIN ==
         (rv =
          vapi_sw_interface_dump (ctx, dump, sw_interface_dump_cb, &dctx)))
@@ -724,9 +715,6 @@ START_TEST (test_loopbacks_2)
   clib_memset (&seen, 0, sizeof (seen));
   dctx.last_called = false;
   dump = vapi_alloc_sw_interface_dump (ctx);
-  dump->payload.name_filter_valid = 0;
-  clib_memset (dump->payload.name_filter.buf, 0,
-              dump->payload.name_filter.length);
   while (VAPI_EAGAIN ==
         (rv =
          vapi_sw_interface_dump (ctx, dump, sw_interface_dump_cb, &dctx)))
index 284b211..ee0a9f3 100644 (file)
@@ -147,8 +147,6 @@ START_TEST (test_loopbacks_1)
     bool seen[num_ifs] = {0};
     Sw_interface_dump d (con);
     auto &p = d.get_request ().get_payload ();
-    p.name_filter_valid = 0;
-    memset (p.name_filter.buf, 0, p.name_filter.length);
     auto rv = d.execute ();
     ck_assert_int_eq (VAPI_OK, rv);
     WAIT_FOR_RESPONSE (d, rv);
@@ -189,8 +187,6 @@ START_TEST (test_loopbacks_1)
   { // new context
     Sw_interface_dump d (con);
     auto &p = d.get_request ().get_payload ();
-    p.name_filter_valid = 0;
-    memset (p.name_filter.buf, 0, p.name_filter.length);
     auto rv = d.execute ();
     ck_assert_int_eq (VAPI_OK, rv);
     WAIT_FOR_RESPONSE (d, rv);
@@ -307,8 +303,6 @@ START_TEST (test_loopbacks_2)
   Sw_interface_dump_cb<num_ifs> swdcb (ccbs);
   Sw_interface_dump d (con, std::ref (swdcb));
   auto &p = d.get_request ().get_payload ();
-  p.name_filter_valid = 0;
-  memset (p.name_filter.buf, 0, p.name_filter.length);
   auto rv = d.execute ();
   ck_assert_int_eq (VAPI_OK, rv);
   WAIT_FOR_RESPONSE (d, rv);
@@ -336,8 +330,6 @@ START_TEST (test_loopbacks_2)
   { // new context
     Sw_interface_dump d (con);
     auto &p = d.get_request ().get_payload ();
-    p.name_filter_valid = 0;
-    memset (p.name_filter.buf, 0, p.name_filter.length);
     auto rv = d.execute ();
     ck_assert_int_eq (VAPI_OK, rv);
     WAIT_FOR_RESPONSE (d, rv);