Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ASan][libc++] Turn on ASan annotations for short strings #79049

Merged
merged 2 commits into from
Jan 23, 2024

Commits on Jan 22, 2024

  1. [ASan][libc++] Turn on ASan annotations for short strings

    This commit turns on ASan annotations in `std::basic_string` for short
    stings (SSO case).
    
    Originally suggested here: https://reviews.llvm.org/D147680
    
    String annotations added here:
    llvm#72677
    
    Requires to pass CI without fails:
    - llvm#75845
    - llvm#75858
    
    Annotating `std::basic_string` with default allocator is implemented in
    llvm#72677 but annotations for
    short strings (SSO - Short String Optimization) are turned off there.
    This commit turns them on. This also removes
    `_LIBCPP_SHORT_STRING_ANNOTATIONS_ALLOWED`, because we do not plan to
    support turning on and off short string annotations.
    
    Support in ASan API exists since
    llvm@dd1b7b7.
    You can turn off annotations for a specific allocator based on changes
    from
    llvm@2fa1bec.
    
    This PR is a part of a series of patches extending AddressSanitizer C++
    container overflow detection capabilities by adding annotations, similar
    to those existing in `std::vector` and `std::deque` collections. These
    enhancements empower ASan to effectively detect instances where the
    instrumented program attempts to access memory within a collection's
    internal allocation that remains unused. This includes cases where
    access occurs before or after the stored elements in `std::deque`, or
    between the `std::basic_string`'s size (including the null terminator)
    and capacity bounds.
    
    The introduction of these annotations was spurred by a real-world
    software bug discovered by Trail of Bits, involving an out-of-bounds
    memory access during the comparison of two strings using the
    `std::equals` function. This function was taking iterators
    (`iter1_begin`, `iter1_end`, `iter2_begin`) to perform the comparison,
    using a custom comparison function. When the `iter1` object exceeded the
    length of `iter2`, an out-of-bounds read could occur on the `iter2`
    object. Container sanitization, upon enabling these annotations, would
    effectively identify and flag this potential vulnerability.
    
    If you have any questions, please email:
    
        [email protected]
        [email protected]
    Tacet committed Jan 22, 2024
    Configuration menu
    Copy the full SHA
    615b747 View commit details
    Browse the repository at this point in the history
  2. Speed up ASan tests

    This commit lowers values in `std::vector` integration tests to as good as previous ones, but faster.
    One test caused a problem with buildbots: https://lab.llvm.org/buildbot/#/builders/168/builds/18126/steps/11/logs/stdio
    Advenam Tacet committed Jan 22, 2024
    Configuration menu
    Copy the full SHA
    fa3b7dc View commit details
    Browse the repository at this point in the history