tilegx: remove implicit boolean conversion in strstr.

[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.
This commit is contained in:
Chris Metcalf 2014-12-22 14:50:26 -05:00
parent 929011700c
commit 0dacd7a3b9
3 changed files with 8 additions and 2 deletions

View File

@ -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

2
NEWS
View File

@ -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

View 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