Work around Valgrind hooking into _exit()

When running tests that use mbedtls_test_fork_run_child() under Valgrind,
bad things happen. Specifically:

* Valgrind reports leaks in the child. Those leaks do exist, but they're
  deliberate since we avoid cleaning up in the child (because we want to
  do as little as possible in the child, and because cleanups such as
  destroying PSA persistent keys would have undesirable effects outside
  the child process).
* Valgrind's overridden `_exit()` doesn't just perform checks, but also for
  some reason it causes the file description on the .datax file to seek
  backwards, causing tests to run again in a loop.

Avoid this by calling `execve()` (via `execlp()`) rather than `_exit()` if
it looks like the test is run under Valgrind. This is safe as long as
Valgrind isn't run with `--trace-children=yes`.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
1 file changed
tree: b3302e98b7c3c6d68c9e8e83b8175bb2078f2bcc
  1. .github/
  2. data_files/
  3. docs/
  4. history/
  5. psasim/
  6. scripts/
  7. tests/
  8. util/
  9. .gitignore
  10. CMakeLists.txt
  11. CONTRIBUTING.md
  12. dco.txt
  13. exported.make
  14. LICENSE
  15. README.md
README.md

Mbed TLS framework

This repository contains a version-independent build and test framework for TF-PSA-Crypto and Mbed TLS.

You need this repository as a Git submodule in a branch of one of the above repositories if:

  • You want to build, test or contribute to Mbed TLS 3.6.0 or above, and you are working from a snapshot of a Git commit on a development branch.
  • You want to build, test or contribute to TF-PSA-Crypto, and you are working from a snapshot of a Git commit on a development branch.

You do not need this repository if:

  • You are working with Mbed TLS 2.28.
  • You want to build a release of Mbed TLS and run its unit tests.

Contributing

We gratefully accept bug reports and contributions from the community. Please see the contributing guidelines for details on how to do this.

License

Unless specifically indicated otherwise in a file, Mbed TLS framework files are provided under a dual Apache-2.0 OR GPL-2.0-or-later license. See the LICENSE file for the full text of these licenses, and the ‘License and Copyright’ section in the contributing guidelines for more information.