liboffloadmic: Add missed checks for malloc and strdup return values
authorIlya Verbin <ilya.verbin@intel.com>
Thu, 8 Oct 2015 19:04:43 +0000 (19:04 +0000)
committerIlya Verbin <iverbin@gcc.gnu.org>
Thu, 8 Oct 2015 19:04:43 +0000 (19:04 +0000)
liboffloadmic/
* runtime/offload_engine.cpp (Engine::init_process): Use strdup instead
of sizeof+malloc+sprintf, check for return value.
* runtime/offload_env.cpp (MicEnvVar::get_env_var_kind): Check for
strdup return value.
* runtime/offload_host.cpp (__offload_init_library_once): Check for
strdup return value.  Fix size calculation of COI_HOST_THREAD_AFFINITY.
* runtime/emulator/coi_device.cpp (COIProcessWaitForShutdown): Check for
malloc return value.

From-SVN: r228622

liboffloadmic/ChangeLog
liboffloadmic/runtime/emulator/coi_device.cpp
liboffloadmic/runtime/offload_engine.cpp
liboffloadmic/runtime/offload_env.cpp
liboffloadmic/runtime/offload_host.cpp

index d974aa3098470f81f6c089cbd652248b9f17820e..d25d41841210f91d0181fc413af086c9c2976998 100644 (file)
@@ -1,3 +1,14 @@
+2015-10-08  Ilya Verbin  <ilya.verbin@intel.com>
+
+       * runtime/offload_engine.cpp (Engine::init_process): Use strdup instead
+       of sizeof+malloc+sprintf, check for return value.
+       * runtime/offload_env.cpp (MicEnvVar::get_env_var_kind): Check for
+       strdup return value.
+       * runtime/offload_host.cpp (__offload_init_library_once): Check for
+       strdup return value.  Fix size calculation of COI_HOST_THREAD_AFFINITY.
+       * runtime/emulator/coi_device.cpp (COIProcessWaitForShutdown): Check for
+       malloc return value.
+
 2015-09-29  Ilya Verbin  <ilya.verbin@intel.com>
 
        * plugin/libgomp-plugin-intelmic.cpp (OFFLOAD_ACTIVE_WAIT_ENV): New
index f9dd2cde888546ede029bebce3dce96bbf673eb5..983fec05b29f899cc0788b9e75519d11a95a1067 100644 (file)
@@ -362,7 +362,8 @@ SYMBOL_VERSION (COIProcessWaitForShutdown, 1) ()
        case CMD_PIPELINE_CREATE:
          {
            /* Receive data from host.  */
-           uint32_t *pipeline_num = (uint32_t *) malloc (sizeof (uint32_t));
+           uint32_t *pipeline_num;
+           MALLOC (uint32_t *, pipeline_num, sizeof (uint32_t));
            READ (pipe_host2tgt, pipeline_num, sizeof (*pipeline_num));
 
            /* Create a new thread for the pipeline.  */
index 00b673aebcb1777b4e632b920229dece862518bc..4a88546877de3191fe921a28e5d9b6a577ae4218 100644 (file)
@@ -173,8 +173,9 @@ void Engine::init_process(void)
             // use putenv instead of setenv as Windows has no setenv.
             // Note: putenv requires its argument can't be freed or modified.
             // So no free after call to putenv or elsewhere.
-            char * env_var = (char*) malloc(sizeof("COI_DMA_CHANNEL_COUNT=2"));
-            sprintf(env_var, "COI_DMA_CHANNEL_COUNT=2");
+            char * env_var = strdup("COI_DMA_CHANNEL_COUNT=2");
+           if (env_var == NULL)
+             LIBOFFLOAD_ERROR(c_malloc);
             putenv(env_var);  
         }
     }
index 79f5f3667547c2c77801e6b36e5e02b718a3840f..ac33b67894220549e61f647b0bc2b4debdec3c28 100644 (file)
@@ -212,10 +212,14 @@ MicEnvVarKind MicEnvVar::get_env_var_kind(
             *env_var_name_length = 3;
             *env_var_name = *env_var_def = c;
             *env_var_def = strdup(*env_var_def);
+           if (*env_var_def == NULL)
+             LIBOFFLOAD_ERROR(c_malloc);
             return  c_mic_var;
         }
         *env_var_def = c + strlen("ENV=");
         *env_var_def = strdup(*env_var_def);
+       if (*env_var_def == NULL)
+         LIBOFFLOAD_ERROR(c_malloc);
         return c_mic_card_env;
     }
     if (isalpha(*c)) {
@@ -229,6 +233,8 @@ MicEnvVarKind MicEnvVar::get_env_var_kind(
         return c_no_mic;
     }
     *env_var_def = strdup(*env_var_def);
+    if (*env_var_def == NULL)
+      LIBOFFLOAD_ERROR(c_malloc);
     return card_is_set? c_mic_card_var : c_mic_var;
 }
 
index 08f626f457e5834b3b2cd02b4be5d7e7042618b5..eec457d386a8023bce909d02d781f58697da780e 100644 (file)
@@ -5173,6 +5173,8 @@ static void __offload_init_library_once(void)
         if (strcasecmp(env_var, "none") != 0) {
             // value is composed of comma separated physical device indexes
             char *buf = strdup(env_var);
+           if (buf == NULL)
+             LIBOFFLOAD_ERROR(c_malloc);
             char *str, *ptr;
             for (str = strtok_r(buf, ",", &ptr); str != 0;
                  str = strtok_r(0, ",", &ptr)) {
@@ -5245,7 +5247,9 @@ static void __offload_init_library_once(void)
     if (env_var != 0) {
         char * new_env_var =
                    (char*) malloc(sizeof("COI_HOST_THREAD_AFFINITY=") +
-                                  sizeof(env_var) + 1);
+                                  strlen(env_var));
+       if (new_env_var == NULL)
+         LIBOFFLOAD_ERROR(c_malloc);
         sprintf(new_env_var, "COI_HOST_THREAD_AFFINITY=%s", env_var);
         putenv(new_env_var);
     }
@@ -5254,6 +5258,8 @@ static void __offload_init_library_once(void)
     env_var = getenv("MIC_LD_LIBRARY_PATH");
     if (env_var != 0) {
         mic_library_path = strdup(env_var);
+       if (mic_library_path == NULL)
+         LIBOFFLOAD_ERROR(c_malloc);
     }
 
 
@@ -5262,6 +5268,8 @@ static void __offload_init_library_once(void)
     const char *base_name = "offload_main";
     if (mic_library_path != 0) {
         char *buf = strdup(mic_library_path);
+       if (buf == NULL)
+         LIBOFFLOAD_ERROR(c_malloc);
         char *try_name = (char*) alloca(strlen(mic_library_path) +
                 strlen(base_name) + 2);
         char *dir, *ptr;
@@ -5275,6 +5283,8 @@ static void __offload_init_library_once(void)
             struct stat st;
             if (stat(try_name, &st) == 0 && S_ISREG(st.st_mode)) {
                 mic_device_main = strdup(try_name);
+               if (mic_device_main == NULL)
+                 LIBOFFLOAD_ERROR(c_malloc);
                 break;
             }
         }
@@ -5345,6 +5355,8 @@ static void __offload_init_library_once(void)
     env_var = getenv("MIC_PROXY_FS_ROOT");
     if (env_var != 0 && *env_var != '\0') {
         mic_proxy_fs_root = strdup(env_var);
+       if (mic_proxy_fs_root == NULL)
+         LIBOFFLOAD_ERROR(c_malloc);
     }
 
     // Prepare environment for the target process using the following