mpx_wrappers.c (__mpx_wrapper_memmove): Add zero length check.
authorIlya Enkovich <ilya.enkovich@intel.com>
Thu, 9 Apr 2015 10:11:30 +0000 (10:11 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Thu, 9 Apr 2015 10:11:30 +0000 (10:11 +0000)
libmpx/

* mpxwrap/mpx_wrappers.c (__mpx_wrapper_memmove): Add
zero length check.

gcc/testsuite/

* gcc.target/i386/mpx/memmove-zero-length.c: New.

From-SVN: r221944

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/mpx/memmove-zero-length.c [new file with mode: 0644]
libmpx/ChangeLog
libmpx/mpxwrap/mpx_wrappers.c

index 1cd869a0fb58c49ac034f3c8c92133466715f016..90e467abb41cdea6e99529e031aff25d6054f82a 100644 (file)
@@ -1,3 +1,7 @@
+2015-04-09  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       * gcc.target/i386/mpx/memmove-zero-length.c: New.
+
 2015-04-09  Kirill Yukhin  <kirill.yukhin@intel.com>
 
        PR target/65676
diff --git a/gcc/testsuite/gcc.target/i386/mpx/memmove-zero-length.c b/gcc/testsuite/gcc.target/i386/mpx/memmove-zero-length.c
new file mode 100644 (file)
index 0000000..78bfdeb
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do run } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx" } */
+
+
+#include "mpx-check.h"
+#include "string.h"
+
+int mpx_test (int argc, const char **argv)
+{
+  int *buf = (int *)malloc (100 * sizeof(int));
+
+  memmove (buf, NULL, 0);
+  memmove (NULL, buf, 0);
+
+  free (buf);
+
+  return 0;
+}
index 6b05278b0d05f495afa1c53dca83dc0f4c68152e..56c3c5f1b2b688a659ee03c0c426a370f10e7216 100644 (file)
@@ -1,3 +1,8 @@
+2015-04-09  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       * mpxwrap/mpx_wrappers.c (__mpx_wrapper_memmove): Add
+       zero length check.
+
 2015-04-02  Ilya Enkovich  <ilya.enkovich@intel.com>
 
        PR driver/65444
index ef4be8d0a3902f53ad7d0c473148814ec93613d6..58670aae4819e21027dfda5fee9c601ddb611af9 100644 (file)
@@ -97,6 +97,9 @@ __mpx_wrapper_memmove (void *dst, const void *src, size_t n)
   size_t offset_src = ((size_t) s) & (sizeof (void *) - 1);
   size_t offset_dst = ((size_t) d) & (sizeof (void *) - 1);
 
+  if (n == 0)
+    return ret;
+
   __bnd_chk_ptr_bounds (dst, n);
   __bnd_chk_ptr_bounds (src, n);