[Beignet] [PATCH 04/12] utest: error handling to avoid null pointer dereference.

xionghu.luo at intel.com xionghu.luo at intel.com
Thu May 5 16:11:47 UTC 2016


From: Luo Xionghu <xionghu.luo at intel.com>

Signed-off-by: Luo Xionghu <xionghu.luo at intel.com>
---
 benchmark/benchmark_copy_buf.cpp      |  2 ++
 utests/compiler_box_blur_float.cpp    |  3 +++
 utests/get_cl_info.cpp                |  6 ++++++
 utests/image_from_buffer.cpp          |  5 +++++
 utests/load_program_from_bin_file.cpp |  4 ++++
 utests/load_program_from_gen_bin.cpp  |  4 ++++
 utests/load_program_from_spir.cpp     |  4 ++++
 utests/runtime_compile_link.cpp       | 17 ++++++++++++-----
 utests/runtime_flat_address_space.cpp |  2 +-
 utests/sub_buffer.cpp                 |  2 +-
 utests/utest_helper.cpp               | 12 ++++++++++++
 11 files changed, 54 insertions(+), 7 deletions(-)

diff --git a/benchmark/benchmark_copy_buf.cpp b/benchmark/benchmark_copy_buf.cpp
index 92abf54..a85af8c 100644
--- a/benchmark/benchmark_copy_buf.cpp
+++ b/benchmark/benchmark_copy_buf.cpp
@@ -16,6 +16,8 @@ double benchmark_copy_buf(void)
 
   buf0 = (cl_char *)clEnqueueMapBuffer(queue, buf[0], CL_TRUE, CL_MAP_WRITE, 0, sizeof(char), 0, NULL, NULL, NULL);
 
+  OCL_ASSERT(buf0 != NULL);
+
   for (i=0; i < sz; i++) {
     buf0[i]=(rand() & 0xFF);
   }
diff --git a/utests/compiler_box_blur_float.cpp b/utests/compiler_box_blur_float.cpp
index 8a75a25..8d500fc 100644
--- a/utests/compiler_box_blur_float.cpp
+++ b/utests/compiler_box_blur_float.cpp
@@ -14,6 +14,9 @@ static void compiler_box_blur_float()
 
   /* Load the picture */
   tmp = cl_read_bmp("sample.bmp", &w, &h);
+  if(tmp == NULL)
+    return;
+
   sz = w * h * sizeof(float[4]);
   src = (float4*)malloc(sz);
 
diff --git a/utests/get_cl_info.cpp b/utests/get_cl_info.cpp
index 2536690..bdd7e0c 100644
--- a/utests/get_cl_info.cpp
+++ b/utests/get_cl_info.cpp
@@ -181,9 +181,15 @@ void get_program_info(void)
     int sz;
     char *ker_path = (char *)malloc(4096 * sizeof(char));
     const char *kiss_path = getenv("OCL_KERNEL_PATH");
+    if(!kiss_path)
+      return;
+
     string line;
     string source_code;
 
+    if(strlen(kiss_path) > 4000)
+      return;
+
     sprintf(ker_path, "%s/%s", kiss_path, "compiler_if_else.cl");
 
     ifstream in(ker_path);
diff --git a/utests/image_from_buffer.cpp b/utests/image_from_buffer.cpp
index b1171d1..0084f50 100644
--- a/utests/image_from_buffer.cpp
+++ b/utests/image_from_buffer.cpp
@@ -34,6 +34,11 @@ static void image_from_buffer(void)
   size_t buffer_sz = sizeof(uint32_t) * w * h;
   uint32_t* src_data;
   src_data = (uint32_t*)memalign(base_address_alignment, buffer_sz);
+  if(!src_data) {
+    fprintf(stderr, "run out of memory\n");
+    return;
+  }
+
   for (uint32_t j = 0; j < h; ++j)
     for (uint32_t i = 0; i < w; i++)
       src_data[j * w + i] = j * w + i;
diff --git a/utests/load_program_from_bin_file.cpp b/utests/load_program_from_bin_file.cpp
index feefacc..117e15a 100644
--- a/utests/load_program_from_bin_file.cpp
+++ b/utests/load_program_from_bin_file.cpp
@@ -18,6 +18,10 @@ static void test_load_program_from_bin_file(void)
     char *ker_path = NULL;
 
     cl_file_map_t *fm = cl_file_map_new();
+    if(!fm) {
+      fprintf(stderr, "run out of memory\n");
+      return;
+    }
     ker_path = cl_do_kiss_path("compiler_ceil.bin", device);
     OCL_ASSERT (cl_file_map_open(fm, ker_path) == CL_FILE_MAP_SUCCESS);
 
diff --git a/utests/load_program_from_gen_bin.cpp b/utests/load_program_from_gen_bin.cpp
index 3db13b2..26c9485 100644
--- a/utests/load_program_from_gen_bin.cpp
+++ b/utests/load_program_from_gen_bin.cpp
@@ -18,6 +18,10 @@ static void test_load_program_from_gen_bin(void)
     char *ker_path = NULL;
 
     cl_file_map_t *fm = cl_file_map_new();
+    if(!fm) {
+      fprintf(stderr, "run out of memory\n");
+      return;
+    }
     ker_path = cl_do_kiss_path("compiler_ceil.cl", device);
     OCL_ASSERT (cl_file_map_open(fm, ker_path) == CL_FILE_MAP_SUCCESS);
 
diff --git a/utests/load_program_from_spir.cpp b/utests/load_program_from_spir.cpp
index 8ea1cd4..9fc28e2 100644
--- a/utests/load_program_from_spir.cpp
+++ b/utests/load_program_from_spir.cpp
@@ -31,6 +31,10 @@ static void test_load_program_from_spir(void)
     char *ker_path = NULL;
 
     cl_file_map_t *fm = cl_file_map_new();
+    if(!fm) {
+      fprintf(stderr, "run out of memory\n");
+      return;
+    }
     ker_path = cl_do_kiss_path("compiler_ceil32.spir", device);
     OCL_ASSERT (cl_file_map_open(fm, ker_path) == CL_FILE_MAP_SUCCESS);
 
diff --git a/utests/runtime_compile_link.cpp b/utests/runtime_compile_link.cpp
index 4a39b6a..48439d2 100644
--- a/utests/runtime_compile_link.cpp
+++ b/utests/runtime_compile_link.cpp
@@ -12,6 +12,9 @@ int init_program(const char* name, cl_context ctx, cl_program *pg )
   char* ker_path = cl_do_kiss_path(name, device);
 
   cl_file_map_t *fm = cl_file_map_new();
+  if(!fm)
+    return CL_FALSE;
+
   err = cl_file_map_open(fm, ker_path);
   if(err != CL_FILE_MAP_SUCCESS)
     OCL_ASSERT(0);
@@ -20,7 +23,7 @@ int init_program(const char* name, cl_context ctx, cl_program *pg )
   *pg = clCreateProgramWithSource(ctx, 1, &src, NULL, &err);
   free(ker_path);
   cl_file_map_delete(fm);
-  return 0;
+  return CL_SUCCESS;
 
 }
 
@@ -31,15 +34,18 @@ void runtime_compile_link(void)
 
   const char* header_file_name="runtime_compile_link.h";
   cl_program foo_pg;
-  init_program(header_file_name, ctx, &foo_pg);
+  err = init_program(header_file_name, ctx, &foo_pg);
+  OCL_ASSERT(err==CL_SUCCESS);
 
   const char* myinc_file_name="include/runtime_compile_link_inc.h";
   cl_program myinc_pg;
-  init_program(myinc_file_name, ctx, &myinc_pg);
+  err = init_program(myinc_file_name, ctx, &myinc_pg);
+  OCL_ASSERT(err==CL_SUCCESS);
 
   const char* file_name_A="runtime_compile_link_a.cl";
   cl_program program_A;
-  init_program(file_name_A, ctx, &program_A);
+  err = init_program(file_name_A, ctx, &program_A);
+  OCL_ASSERT(err==CL_SUCCESS);
 
   cl_program input_headers[2] = { foo_pg, myinc_pg};
   const char * input_header_names[2] = {header_file_name, myinc_file_name}; 
@@ -55,7 +61,8 @@ void runtime_compile_link(void)
   OCL_ASSERT(err==CL_SUCCESS);
   const char* file_name_B="runtime_compile_link_b.cl";
   cl_program program_B;
-  init_program(file_name_B, ctx, &program_B);
+  err = init_program(file_name_B, ctx, &program_B);
+  OCL_ASSERT(err==CL_SUCCESS);
 
   err = clCompileProgram(program_B,
                                 0, NULL, // num_devices & device_list
diff --git a/utests/runtime_flat_address_space.cpp b/utests/runtime_flat_address_space.cpp
index 6430edb..cf94cf5 100644
--- a/utests/runtime_flat_address_space.cpp
+++ b/utests/runtime_flat_address_space.cpp
@@ -56,7 +56,7 @@ main(int argc, char *argv[])
     dst_buffer = (int *)clEnqueueMapBuffer(queue, dst[j], CL_TRUE, CL_MAP_READ, 0, sizeof(int)*n, 0, NULL, NULL, &status);
     if (status != CL_SUCCESS)
       goto error;
-    for (uint32_t i = 0; i < n; ++i)
+    for (uint32_t i = 0; dst_buffer && i < n; ++i)
       if (dst_buffer[i] != int(i)) {
         fprintf(stderr, "run-time flat address space failed\n");
         exit(-1);
diff --git a/utests/sub_buffer.cpp b/utests/sub_buffer.cpp
index 6228034..04cfee7 100644
--- a/utests/sub_buffer.cpp
+++ b/utests/sub_buffer.cpp
@@ -116,7 +116,7 @@ void sub_buffer_check(void)
 #endif
             for (int i = 0; i < 32; i++) {
 
-                if (((char *)mapped_ptr)[i] != sub_buf_content[i]) {
+                if (mapped_ptr && ((char *)mapped_ptr)[i] != sub_buf_content[i]) {
                     printf ("different index is %d\n", i);
                     OCL_ASSERT(0);
                 }
diff --git a/utests/utest_helper.cpp b/utests/utest_helper.cpp
index 9696dac..86d604c 100644
--- a/utests/utest_helper.cpp
+++ b/utests/utest_helper.cpp
@@ -241,6 +241,10 @@ cl_kernel_init(const char *file_name, const char *kernel_name, int format, const
       assert(0);
     } else if (format == SOURCE) {
       cl_file_map_t *fm = cl_file_map_new();
+      if(!fm) {
+        fprintf(stderr, "run out of memory\n");
+        goto error;
+      }
       FATAL_IF (cl_file_map_open(fm, ker_path) != CL_FILE_MAP_SUCCESS,
                 "Failed to open file \"%s\" with kernel \"%s\". Did you properly set OCL_KERNEL_PATH variable?",
                 file_name, kernel_name);
@@ -292,6 +296,10 @@ cl_kernel_compile(const char *file_name, const char *kernel_name, const char * c
     if (program) clReleaseProgram(program);
     ker_path = cl_do_kiss_path(file_name, device);
     cl_file_map_t *fm = cl_file_map_new();
+    if(!fm) {
+      fprintf(stderr, "run out of memory\n");
+      goto error;
+    }
     FATAL_IF (cl_file_map_open(fm, ker_path) != CL_FILE_MAP_SUCCESS,
                 "Failed to open file \"%s\" with kernel \"%s\". Did you properly set OCL_KERNEL_PATH variable?",
                 file_name, kernel_name);
@@ -339,6 +347,10 @@ cl_kernel_link(const char *file_name, const char *kernel_name, const char * link
     if (program) clReleaseProgram(program);
     ker_path = cl_do_kiss_path(file_name, device);
     cl_file_map_t *fm = cl_file_map_new();
+    if(!fm) {
+      fprintf(stderr, "run out of memory\n");
+      goto error;
+    }
     FATAL_IF (cl_file_map_open(fm, ker_path) != CL_FILE_MAP_SUCCESS,
                 "Failed to open file \"%s\" with kernel \"%s\". Did you properly set OCL_KERNEL_PATH variable?",
                 file_name, kernel_name);
-- 
2.1.4



More information about the Beignet mailing list