[all-commits] [llvm/llvm-project] b40f07: [msan] Add stat-family interceptors on Linux

Vitaly Buka via All-commits all-commits at lists.llvm.org
Tue Dec 21 10:19:22 PST 2021

  Branch: refs/heads/release/13.x
  Home:   https://github.com/llvm/llvm-project
  Commit: b40f07b048c40b340e4bf87e53dc134847b78205
  Author: Nikita Malyavin <nikitamalyavin at gmail.com>
  Date:   2021-12-21 (Tue, 21 Dec 2021)

  Changed paths:
    M compiler-rt/lib/msan/msan_interceptors.cpp
    M compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h

  Log Message:
  [msan] Add stat-family interceptors on Linux

Add following interceptors on Linux: stat, lstat, fstat, fstatat.

This fixes use-of-uninitialized value on platforms with GLIBC 2.33+.
In particular: Arch Linux, Ubuntu hirsute/impish.

The tests should have also been failing during the release on the mentioned platforms, but I cannot find any related discussion.

Most likely, the regression was introduced by glibc commit [[ https://github.com/bminor/glibc/commit/8ed005daf0ab03e142500324a34087ce179ae78e | 8ed005daf0ab03e14250032 ]]:
all stat-family functions are now exported as shared functions.

Before, some of them (namely stat, lstat, fstat, fstatat) were provided as a part of libc_noshared.a and called their __xstat dopplegangers. This is still true for Debian Sid and earlier Ubuntu's. stat interceptors may be safely provided for them, no problem with that.

Closes https://github.com/google/sanitizers/issues/1452.
See also https://jira.mariadb.org/browse/MDEV-24841

Reviewed By: eugenis

Differential Revision: https://reviews.llvm.org/D111984

(cherry picked from commit 4e1a6c07052b466a2a1cd0c3ff150e4e89a6d87a)

  Commit: abc0cf92bb14e1cf5a7f682dc5d3179e168ac145
  Author: Vitaly Buka <vitalybuka at google.com>
  Date:   2021-12-21 (Tue, 21 Dec 2021)

  Changed paths:
    M compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h

  Log Message:
  [sanitizer] Intercept lstat on Linux

It's availible from GLIBC 2.33
Fixes use-of-uninitialized-value llvm/lib/Support/Unix/Path.inc:467:29 in llvm::sys::fs::remove(llvm::Twine const&, bool)

(cherry picked from commit 39ead64e3f73045c7e0c72aed08c14b277828fb4)

Compare: https://github.com/llvm/llvm-project/compare/59289a837b00...abc0cf92bb14

More information about the All-commits mailing list