Commit 6fd2e66a by Ilya Verbin Committed by Ilya Verbin

liboffloadmic: Add missed checks for malloc and strdup return values

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
parent bc8642d6
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> 2015-09-29 Ilya Verbin <ilya.verbin@intel.com>
* plugin/libgomp-plugin-intelmic.cpp (OFFLOAD_ACTIVE_WAIT_ENV): New * plugin/libgomp-plugin-intelmic.cpp (OFFLOAD_ACTIVE_WAIT_ENV): New
......
...@@ -362,7 +362,8 @@ SYMBOL_VERSION (COIProcessWaitForShutdown, 1) () ...@@ -362,7 +362,8 @@ SYMBOL_VERSION (COIProcessWaitForShutdown, 1) ()
case CMD_PIPELINE_CREATE: case CMD_PIPELINE_CREATE:
{ {
/* Receive data from host. */ /* 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)); READ (pipe_host2tgt, pipeline_num, sizeof (*pipeline_num));
/* Create a new thread for the pipeline. */ /* Create a new thread for the pipeline. */
......
...@@ -173,8 +173,9 @@ void Engine::init_process(void) ...@@ -173,8 +173,9 @@ void Engine::init_process(void)
// use putenv instead of setenv as Windows has no setenv. // use putenv instead of setenv as Windows has no setenv.
// Note: putenv requires its argument can't be freed or modified. // Note: putenv requires its argument can't be freed or modified.
// So no free after call to putenv or elsewhere. // So no free after call to putenv or elsewhere.
char * env_var = (char*) malloc(sizeof("COI_DMA_CHANNEL_COUNT=2")); char * env_var = strdup("COI_DMA_CHANNEL_COUNT=2");
sprintf(env_var, "COI_DMA_CHANNEL_COUNT=2"); if (env_var == NULL)
LIBOFFLOAD_ERROR(c_malloc);
putenv(env_var); putenv(env_var);
} }
} }
......
...@@ -212,10 +212,14 @@ MicEnvVarKind MicEnvVar::get_env_var_kind( ...@@ -212,10 +212,14 @@ MicEnvVarKind MicEnvVar::get_env_var_kind(
*env_var_name_length = 3; *env_var_name_length = 3;
*env_var_name = *env_var_def = c; *env_var_name = *env_var_def = c;
*env_var_def = strdup(*env_var_def); *env_var_def = strdup(*env_var_def);
if (*env_var_def == NULL)
LIBOFFLOAD_ERROR(c_malloc);
return c_mic_var; return c_mic_var;
} }
*env_var_def = c + strlen("ENV="); *env_var_def = c + strlen("ENV=");
*env_var_def = strdup(*env_var_def); *env_var_def = strdup(*env_var_def);
if (*env_var_def == NULL)
LIBOFFLOAD_ERROR(c_malloc);
return c_mic_card_env; return c_mic_card_env;
} }
if (isalpha(*c)) { if (isalpha(*c)) {
...@@ -229,6 +233,8 @@ MicEnvVarKind MicEnvVar::get_env_var_kind( ...@@ -229,6 +233,8 @@ MicEnvVarKind MicEnvVar::get_env_var_kind(
return c_no_mic; return c_no_mic;
} }
*env_var_def = strdup(*env_var_def); *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; return card_is_set? c_mic_card_var : c_mic_var;
} }
......
...@@ -5173,6 +5173,8 @@ static void __offload_init_library_once(void) ...@@ -5173,6 +5173,8 @@ static void __offload_init_library_once(void)
if (strcasecmp(env_var, "none") != 0) { if (strcasecmp(env_var, "none") != 0) {
// value is composed of comma separated physical device indexes // value is composed of comma separated physical device indexes
char *buf = strdup(env_var); char *buf = strdup(env_var);
if (buf == NULL)
LIBOFFLOAD_ERROR(c_malloc);
char *str, *ptr; char *str, *ptr;
for (str = strtok_r(buf, ",", &ptr); str != 0; for (str = strtok_r(buf, ",", &ptr); str != 0;
str = strtok_r(0, ",", &ptr)) { str = strtok_r(0, ",", &ptr)) {
...@@ -5245,7 +5247,9 @@ static void __offload_init_library_once(void) ...@@ -5245,7 +5247,9 @@ static void __offload_init_library_once(void)
if (env_var != 0) { if (env_var != 0) {
char * new_env_var = char * new_env_var =
(char*) malloc(sizeof("COI_HOST_THREAD_AFFINITY=") + (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); sprintf(new_env_var, "COI_HOST_THREAD_AFFINITY=%s", env_var);
putenv(new_env_var); putenv(new_env_var);
} }
...@@ -5254,6 +5258,8 @@ static void __offload_init_library_once(void) ...@@ -5254,6 +5258,8 @@ static void __offload_init_library_once(void)
env_var = getenv("MIC_LD_LIBRARY_PATH"); env_var = getenv("MIC_LD_LIBRARY_PATH");
if (env_var != 0) { if (env_var != 0) {
mic_library_path = strdup(env_var); 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) ...@@ -5262,6 +5268,8 @@ static void __offload_init_library_once(void)
const char *base_name = "offload_main"; const char *base_name = "offload_main";
if (mic_library_path != 0) { if (mic_library_path != 0) {
char *buf = strdup(mic_library_path); char *buf = strdup(mic_library_path);
if (buf == NULL)
LIBOFFLOAD_ERROR(c_malloc);
char *try_name = (char*) alloca(strlen(mic_library_path) + char *try_name = (char*) alloca(strlen(mic_library_path) +
strlen(base_name) + 2); strlen(base_name) + 2);
char *dir, *ptr; char *dir, *ptr;
...@@ -5275,6 +5283,8 @@ static void __offload_init_library_once(void) ...@@ -5275,6 +5283,8 @@ static void __offload_init_library_once(void)
struct stat st; struct stat st;
if (stat(try_name, &st) == 0 && S_ISREG(st.st_mode)) { if (stat(try_name, &st) == 0 && S_ISREG(st.st_mode)) {
mic_device_main = strdup(try_name); mic_device_main = strdup(try_name);
if (mic_device_main == NULL)
LIBOFFLOAD_ERROR(c_malloc);
break; break;
} }
} }
...@@ -5345,6 +5355,8 @@ static void __offload_init_library_once(void) ...@@ -5345,6 +5355,8 @@ static void __offload_init_library_once(void)
env_var = getenv("MIC_PROXY_FS_ROOT"); env_var = getenv("MIC_PROXY_FS_ROOT");
if (env_var != 0 && *env_var != '\0') { if (env_var != 0 && *env_var != '\0') {
mic_proxy_fs_root = strdup(env_var); 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 // Prepare environment for the target process using the following
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment