]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
tilegx: remove implicit boolean conversion in strstr.
authorChris Metcalf <cmetcalf@ezchip.com>
Mon, 22 Dec 2014 19:50:26 +0000 (14:50 -0500)
committerChris Metcalf <cmetcalf@ezchip.com>
Mon, 22 Dec 2014 19:50:26 +0000 (14:50 -0500)
[BZ #17746]
The __builtin_expect() truncated a uint64_t to a 32-bit long
in ILP32 mode, discarding the high 32 bits, and potentially
missing the NUL terminator that we were searching for with SIMD
operations.  Explicitly compare to zero to fix the problem.

ChangeLog
NEWS
sysdeps/tile/tilegx/strstr.c

index 4ad8b90161cfa1cb4c72b2115073e633d6afc772..77abebf47806b85a2b5bba76d7dadd1241dc32cf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-12-22  Chris Metcalf  <cmetcalf@ezchip.com>
+
+       [BZ #17746]
+       * sysdeps/tile/tilegx/strstr.c (STRSTR2): Remove implicit boolean
+       conversion.
+
 2014-12-22  Steve Ellcey  <sellcey@imgtec.com>
 
        * sysdeps/unix/mips/sysdep.h (__mips_isa_rev): Set
diff --git a/NEWS b/NEWS
index cf0756b2e04bf374dca8cd2e4f0cfe298f73d194..56dfff03bf32b2a3ecdef6efa426d64bfb4d3859 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -15,7 +15,7 @@ Version 2.21
   17522, 17555, 17570, 17571, 17572, 17573, 17574, 17581, 17582, 17583,
   17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17630, 17633,
   17634, 17647, 17653, 17657, 17664, 17665, 17668, 17682, 17717, 17719,
-  17722, 17724, 17725, 17733, 17744, 17745.
+  17722, 17724, 17725, 17733, 17744, 17745, 17746.
 
 * CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
   under certain input conditions resulting in the execution of a shell for
index d04f12910db2b44ca178896fe9839fb00ce25e5d..de5adaff91c7c813b91a8a471252b399c5ae7afa 100644 (file)
@@ -154,7 +154,7 @@ STRSTR2 (const char *haystack_start, const char *needle)
       /* Look for a terminating '\0'.  */
       zero_matches = __insn_v1cmpeqi (v, 0);
       uint64_t byte1_matches = __insn_v1cmpeq (v, byte1);
-      if (__builtin_expect (zero_matches, 0))
+      if (__builtin_expect (zero_matches != 0, 0))
        {
          /* This is the last vector.  Don't worry about matches
             crossing into the next vector.  Shift the second byte