[Bug 1027977] [NEW] strstr() function produces wrong results under valgrind callgrind

Launchpad Bug Tracker 1027977 at bugs.launchpad.net
Wed Oct 10 18:33:08 UTC 2012


You have been subscribed to a public bug by Julian Taylor (jtaylor):

EDIT: adapted description according to SRU Bug Template

[IMPACT]

 * impact on users:
Profiling an application with callgrind produces false results: The application silently changes behavior because of false strstr() results in certain cases.

 * justification for backporting the fix to the stable release:
- 12.04 is a LTS release. Lots of people installed it for that very reason and intend to stick with it until the next LTS release. Especially as this bug affects mainly software developers and in professional environments the upgrade cycles are longer.
Those people will not benefit from a fix in the upcoming release.
- The patch is very small and local.
- There is no danger in backporting it (see Regression Potential below).
- The fix is already in 12.10 and could be taken directly from there without any hassle.

 * The emulation of a certain SSE4-instruction in the valgrind package
in 12.04 is flawed. This bug is fixed by a patch made by the upstream
author.

[TESTCASE]

When an application that uses the strstr() function from the C standard library is profiled with valgrind --tool=callgrind, the strstr() function produces false results (at least) under the following conditions:
* the string s1 to search in and the string s2 to search for are exact duplicates, that is strcmp(s1,s2)==0. s1 and s2 don't need to be pointing to the same memory object.
* the string length (excluding terminating zero) is a multiple of 16

Expected result: strstr(s1,s2) returns s1, indicating a match at the first charactor of s1
What happens: strstr(s1,s2) returns NULL, indicating no matching substring was found.

See attached minimal testcase for an example. Reproduce under Ubuntu 12.04 with the following steps:
$gcc strstrtest.c -o strstrtest
$./ strstrtest    # <-- should report no errors
$valgrind --tool=callgrind ./ strstrtest  # <-- should report errors for lengths multiple of 16

- The Problem does not show up under valgrind-3.6.0.SVN-Debian from Ubuntu 10.04 Lucid Lynx
- The Problem does not show up under tool=memcheck.


[Regression Potential] 

 * I don't see any danger of regressions. There is no change in behavior other than correcting false behavior in one place. No other applications depend on valgrind/callgrind, especially nothing that a normal user or server administrator ever uses.
* I've been using the patched version for 2 months now without any problems.
* If this should introduce any sort of regression, it will only affect valgrind/callgrind itself and no other parts of the system.


---
Old description:

$valgrind --version
valgrind-3.7.0

When an application that uses the strstr() function from the C standard library is profiled with valgrind --tool=callgrind, the strstr() function produces false results (at least) under the following conditions:
* the string s1 to search in and the string s2 to search for are exact duplicates, that is strcmp(s1,s2)==0. s1 and s2 don't need to be pointing to the same memory object.
* the string length (excluding terminating zero) is a multiple of 16

Expected result: strstr(s1,s2) returns s1, indicating a match at the first charactor of s1
What happens: strstr(s1,s2) returns NULL, indicating no matching substring was found.

See attached minimal testcase for an example. Reproduce under Ubuntu 12.04 with the following steps:
$gcc strstrtest.c -o strstrtest
$./ strstrtest    # <-- should report no errors
$valgrind --tool=callgrind ./ strstrtest  # <-- should report errors for lengths multiple of 16

- The Problem does not show up under valgrind-3.6.0.SVN-Debian from Ubuntu 10.04 Lucid Lynx
- The Problem does not show up under tool=memcheck.

Some more info:
OS: Ubuntu 12.04 Precise Pangolin
$uname -a
Linux mhassert 3.2.0-26-generic #41-Ubuntu SMP Thu Jun 14 17:49:24 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

** Affects: valgrind
     Importance: Medium
         Status: Fix Released

** Affects: valgrind (Ubuntu)
     Importance: Undecided
         Status: Fix Released


** Tags: patch
-- 
strstr() function produces wrong results under valgrind callgrind
https://bugs.launchpad.net/bugs/1027977
You received this bug notification because you are a member of Ubuntu Sponsors Team, which is subscribed to the bug report.



More information about the Ubuntu-sponsors mailing list