[Coverity] Resolve newly reported coverity issues
authorDongju Chae <dongju.chae@samsung.com>
Thu, 26 Aug 2021 07:18:14 +0000 (16:18 +0900)
committer채동주/On-Device Lab(SR)/Staff Engineer/삼성전자 <dongju.chae@samsung.com>
Fri, 27 Aug 2021 00:19:09 +0000 (09:19 +0900)
This patch resolves newly reported coverity issues.
It seems that the latest version of coverity detects more
conservatively.

Signed-off-by: Dongju Chae <dongju.chae@samsung.com>
src/core/utils/ne-conf.cc
tests/apptests/tvn_triv2_aging.cc
tests/apptests/tvn_triv2_interleave.cc
tests/unittests/ne_core_handler_test.cc
tests/unittests/ne_core_model_test.cc
tests/unittests/ne_core_sched_test.cc
tests/unittests/ne_core_segment_table_test.cc
tests/unittests/ne_libnpuhost_test.cc
utils/trinity_cuse/trinity-cuse-triv2.cc

index d80bf77c3fcae4a1dcc28b6fcf8b5b5f1f08164a..7f5b6452f849ca5e06a8ad0f93b17958db54845e 100644 (file)
@@ -116,6 +116,12 @@ error_callback (const char *, ...) {
  * @note this cannot be called explicitly.
  */
 Conf::Conf () {
+  /* the below initializations may redundant but let's keep for coverity */
+  num_threads_ = default_num_threads;
+  reserved_mem_size_ = default_resv_mem_size;
+  log_level_ = default_log_level;
+  mute_stdout_ = default_mute_stdout;
+
   reset ();
 }
 
index 9907756a04de9988919b886b519d534464eb1eaa..c934e869376692766855e09f18a75277c703aeba 100644 (file)
@@ -25,6 +25,8 @@ typedef enum {
 } AGING_TEST_MODE;
 
 #define NPU_TIMEOUT_MS 5000
+#define MAX_ITERATIONS 100000
+
 #define PRINT_STATUS_UNIT 100
 #define PRINT_STATUS_ITERS(iter, max)                                       \
   if (((iter) % PRINT_STATUS_UNIT) == 0) {                                  \
@@ -71,8 +73,10 @@ class Tester : public UtilTRIV2 {
 
     errno = 0;
     num_iter_ = strtoul (num_iter.c_str (), NULL, 10);
-    if (errno != 0)
-      return -errno;
+    if (errno != 0 || num_iter_ > MAX_ITERATIONS) {
+      cerr << "Need a positive number of iterations <= " << MAX_ITERATIONS << "\n";
+      return -EINVAL;
+    }
 
     errno = 0;
     mode_ = strtoul (mode.c_str (), NULL, 10);
index 86a20983fee8b82164f0e9acd000aee5cabaa315..6b66204aee62a313cf774e3cc0228ef10aca679d 100644 (file)
@@ -17,6 +17,7 @@
 #include <sstream>
 
 #define NPU_TIMEOUT_MS 5000
+#define MAX_ITERATIONS 100000
 
 using namespace std;
 
@@ -34,7 +35,7 @@ main (int argc, char **argv) {
   unique_ptr<UtilTRIV2[]> testers;
   unique_ptr<uint32_t[]> model_ids;
   unique_ptr<int[]> req_ids;
-  int num_models, num_iters;
+  uint32_t num_models, num_iters;
 
   if (argc < 3) {
     print_help ();
@@ -43,7 +44,14 @@ main (int argc, char **argv) {
   }
 
   /* number of iterations*/
-  num_iters = atoi (argv[1]);
+  errno = 0;
+  num_iters = strtoul (argv[1], NULL, 10);
+  if (errno != 0 || num_iters > MAX_ITERATIONS) {
+    cerr << "Need a positive number of iterations <= " << MAX_ITERATIONS << "\n";
+    print_help ();
+    cerr << "[APPTEST] " << argv[0] << ": SKIPPED\n";
+    return 0;
+  }
 
   /* number of model paths (comma-seperated) */
   vector<string> model_paths;
index c7b41b95ade181e65318cdc769ce4060f7cc3b99..90bc137583cf45335e108f76ffee6a001d3aa078 100644 (file)
@@ -662,7 +662,7 @@ TEST (ne_core_handler_test, handler_set_constraint) {
 
   EXPECT_EQ (handler->registerModel (&model_buf, &modelid), 0);
 
-  npuConstraint constraint;
+  npuConstraint constraint = {0};
   constraint.priority = NPU_PRIORITY_MID;
   constraint.timeout_ms = 10;
 
@@ -692,7 +692,7 @@ TEST (ne_core_handler_test, handler_set_constraint_invalid_args_n) {
   generic_buffer model_buf = {0};
   create_model_buffer (model_buf);
 
-  npuConstraint constraint;
+  npuConstraint constraint = {0};
 
   EXPECT_NE (handler->setConstraint (0, constraint), 0);
   EXPECT_NE (handler->setConstraint (1, constraint), 0);
index 372bdb33e76a8221b03e0381765e794a7a73b2ed..dca708f2825b26779aad019a29437e527fbd338a 100644 (file)
@@ -117,7 +117,7 @@ TEST (ne_core_model_test, model_primitives_invalid_args_n) {
   ASSERT_EQ (model->setMetadata (&data), 0);
 
   /** data info */
-  tensors_data_info info;
+  tensors_data_info info = {0};
   EXPECT_NE (model->setDataInfo (nullptr, nullptr), 0);
   EXPECT_NE (model->setDataInfo (&info, nullptr), 0);
   EXPECT_NE (model->setDataInfo (nullptr, &info), 0);
index d774b0b0b32b12cdfe29c474160502fe326a2d46..c3ea6212b126e501be7cb5ba5c7b6f9fe95a7bca 100644 (file)
@@ -32,7 +32,7 @@ TEST (ne_core_sched_test, request_set_get_primitives) {
   auto callback = std::bind (test_callback, &num_called, &m, &cv);
   bool force_stop = true;
 
-  Scheduler *sched = new Scheduler (api.get ());
+  std::unique_ptr<Scheduler> sched (new Scheduler (api.get ()));
   Request *req = sched->createRequest ();
   ASSERT_NE (req, nullptr);
   EXPECT_EQ (req->getOpmode (), NPUINPUT_HOST);
@@ -55,8 +55,6 @@ TEST (ne_core_sched_test, request_set_get_primitives) {
   EXPECT_EQ (req->getForceStop (), force_stop);
 
   sched->removeRequest (req);
-
-  delete sched;
 }
 
 /**
@@ -69,7 +67,7 @@ TEST (ne_core_sched_test, request_set_get_args_n) {
 
   bool force_stop = false;
   std::string hwDevice = "";
-  Scheduler *sched = new Scheduler (api.get ());
+  std::unique_ptr<Scheduler> sched (new Scheduler (api.get ()));
   Request *req = sched->createRequest ();
   ASSERT_NE (req, nullptr);
   req->setOpmode (NPUINPUT_HOST);
@@ -90,7 +88,6 @@ TEST (ne_core_sched_test, request_set_get_args_n) {
   EXPECT_EQ (req->isStopped (), true);
 
   sched->removeRequest (req);
-  delete sched;
 }
 /**
  * @brief test submitRequest()
@@ -110,7 +107,7 @@ TEST (ne_core_sched_test, submit_request) {
   std::mutex m;
   auto callback = std::bind (test_callback, &num_called, &m, &cv);
 
-  Scheduler *sched = new Scheduler (api.get ());
+  std::unique_ptr<Scheduler> sched (new Scheduler (api.get ()));
 
   Request *req = sched->createRequest ();
   ASSERT_NE (req, nullptr);
@@ -155,8 +152,6 @@ TEST (ne_core_sched_test, submit_request) {
   /** requests are automatically destroyed */
   wait_callbacks (num_called, 2, m, cv);
   EXPECT_EQ (num_called, 2);
-
-  delete sched;
 }
 
 /**
@@ -191,7 +186,7 @@ TEST (ne_core_sched_test, submit_request_args_n) {
   auto callback = std::bind (test_callback, &num_called, &m, &cv);
 
   /** no request provided */
-  Scheduler *sched = new Scheduler (api.get ());
+  std::unique_ptr<Scheduler> sched (new Scheduler (api.get ()));
   Request *req = sched->createRequest ();
   ASSERT_NE (req, nullptr);
   req->setOpmode (NPUINPUT_HOST);
@@ -208,7 +203,6 @@ TEST (ne_core_sched_test, submit_request_args_n) {
   EXPECT_EQ (sched->submitRequest (req), 0);
 
   /** it waits until all requests are finished */
-  delete sched;
 }
 
 /**
@@ -225,7 +219,7 @@ TEST (ne_core_sched_test, submit_request_opmode_n) {
   model->setDriverAPI (api.get ());
   model->alloc (4096);
 
-  Scheduler *sched = new Scheduler (api.get ());
+  std::unique_ptr<Scheduler> sched (new Scheduler (api.get ()));
   Request *req;
 
   /** requests with not-supported opmode */
@@ -256,8 +250,6 @@ TEST (ne_core_sched_test, submit_request_opmode_n) {
 
   EXPECT_NE (sched->submitRequest (req), 0);
   sched->removeRequest (req);
-
-  delete sched;
 }
 
 /**
@@ -268,14 +260,12 @@ TEST (ne_core_sched_test, submit_request_empty_n) {
   api = DriverAPI::createDriverAPI (NPUCOND_TRIV2_CONN_SOCIP, 0);
   ASSERT_NE (api.get (), nullptr);
 
-  Scheduler *sched = new Scheduler (api.get ());
+  std::unique_ptr<Scheduler> sched (new Scheduler (api.get ()));
   Request *req = sched->createRequest ();
   ASSERT_NE (req, nullptr);
   req->setOpmode (NPUINPUT_HOST);
   EXPECT_NE (sched->submitRequest (req), 0);
   sched->removeRequest (req);
-
-  delete sched;
 }
 
 /**
index a395d56908f575b2a20f6e951d31d878957cd00a..6b42ae7ee669b6d3be8913a92bcb59a7e4927cfd 100644 (file)
@@ -55,12 +55,14 @@ create_metadata_v3 (npubin_meta &meta) {
 
 /** @brief set dummy input buffer info */
 static void
-set_input_buffers (input_buffers &input) {
-  input.num_buffers = 2;
-  input.bufs[0].type = BUFFER_MAPPED;
-  input.bufs[0].size = 0x1000;
-  input.bufs[1].type = BUFFER_MAPPED;
-  input.bufs[1].size = 0x1000;
+set_input_buffers (input_buffers *input) {
+  memset (input, '\x00', sizeof (input_buffers));
+
+  input->num_buffers = 2;
+  input->bufs[0].type = BUFFER_MAPPED;
+  input->bufs[0].size = 0x1000;
+  input->bufs[1].type = BUFFER_MAPPED;
+  input->bufs[1].size = 0x1000;
 }
 /**
  * @brief test createSegments() of SegmentTable
@@ -82,7 +84,7 @@ TEST (ne_core_segment_table_test, create_segments) {
   table->setDriverAPI (api.get ());
 
   input_buffers input;
-  set_input_buffers (input);
+  set_input_buffers (&input);
 
   EXPECT_EQ (table->alloc (), 0);
   EXPECT_EQ (table->createSegments (model.get (), &input), 0);
@@ -119,7 +121,7 @@ TEST (ne_core_segment_table_test, primitives_n) {
   table->setDriverAPI (api.get ());
 
   input_buffers input;
-  set_input_buffers (input);
+  set_input_buffers (&input);
 
   ASSERT_EQ (table->alloc (), 0);
   ASSERT_EQ (table->createSegments (model.get (), &input), 0);
@@ -149,7 +151,7 @@ TEST (ne_core_segment_table_test, create_segments_n) {
   std::unique_ptr<SegmentTable> table (new SegmentTable (new HWmemDevice));
 
   input_buffers input;
-  set_input_buffers (input);
+  set_input_buffers (&input);
 
   /** without model or input */
   EXPECT_NE (table->createSegments (nullptr, nullptr), 0);
index 4d8bd85af73e754b5d013671dbdf478a52f452c3..25de62129ffac118b05187fa32d38a89f49eed43 100644 (file)
@@ -831,7 +831,7 @@ TEST (ne_libnpuhost_test, request_decoupled_apis_invalid_n) {
   generic_buffer model;
   std::string model_dir (BASIC_TEST_MODEL);
   std::string model_path = model_dir + "/model.tvn";
-  npu_constraint constraint;
+  npu_constraint constraint = {0};
   int req_id;
 
   /* skip if the test model is not available */
index d446ee702b10f712982e5965654504f58365ca44..9d8d58e500c00d398e83cdd23a37a130712ee2c6 100644 (file)
@@ -114,7 +114,7 @@ class EmulModel {
  public:
   EmulModel (const trinity_cuse_model *m) {
     id_ = global_id_.fetch_add (1);
-    id_ |= (m->dbuf_fd << TRINITY_SHIFT_MODEL_ID);
+    id_ |= ((uint64_t) m->dbuf_fd) << TRINITY_SHIFT_MODEL_ID;
 
     ref_count_ = 1;
     deleted_ = false;