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

[20.0.0]: Backport fixes from main to the release branch #8331

Merged
merged 4 commits into from
Apr 11, 2024

Commits on Apr 11, 2024

  1. cranelift: Include clobbers and outgoing args in stack limit (bytecod…

    …ealliance#8301)
    
    When we compute the amount of space that we need in a stack frame for
    the stack limit check, we were only counting spill-slots and explicit
    stack-slots. However, we need to account for all uses of the stack which
    occur before the next stack limit check. That includes clobbers and any
    stack arguments we want to pass to callees.
    
    The maximum amount that we could have missed by is essentially bounded
    by the number of arguments which could be passed to a function. In
    Wasmtime, that is limited by `MAX_WASM_FUNCTION_PARAMS` in
    `wasmparser::limits`, which is set to 1,000, and the largest arguments
    are 16-byte vectors, so this could undercount by about 16kB.
    
    This is not a security issue according to Wasmtime's security policy
    (https://docs.wasmtime.dev/security-what-is-considered-a-security-vulnerability.html)
    because it's the embedder's responsibility to ensure that the stack
    where Wasmtime is running has enough extra space on top of the
    configured `max_wasm_stack` size, and getting within 16kB of the host
    stack size is too small to be safe even with this fixed.
    
    However, this was definitely not the intended behavior when stack limit
    checks or stack probes are enabled, and anyone with non-default
    configurations or non-Wasmtime uses of Cranelift should evaluate whether
    this bug impacts your use case.
    
    (For reference: When Wasmtime is used in async mode or on Linux, the
    default stack size is 1.5MB larger than the default WebAssembly stack
    limit, so such configurations are typically safe regardless. On the
    other hand, on macOS the default non-async stack size for threads other
    than the main thread is the same size as the default for
    `max_wasm_stack`, so that is too small with or without this bug fix.)
    jameysharp authored and alexcrichton committed Apr 11, 2024
    Configuration menu
    Copy the full SHA
    967139d View commit details
    Browse the repository at this point in the history
  2. fix: bindgen trappable_errors using unversion/versioned packages (byt…

    …ecodealliance#8305)
    
    Signed-off-by: Brian H <brian.hardock@fermyon.com>
    fibonacci1729 authored and alexcrichton committed Apr 11, 2024
    Configuration menu
    Copy the full SHA
    a5f7bbb View commit details
    Browse the repository at this point in the history
  3. Cranelift: Do not dedupe/GVN bitcasts from reference values (bytecode…

    …alliance#8317)
    
    * Cranelift: Do not dedupe/GVN bitcasts from reference values
    
    Deduping bitcasts to integers from references can make the references no long
    longer live across safepoints, and instead only the bitcasted integer results
    would be. Because the reference is no longer live after the safepoint, the
    safepoint's stack map would not have an entry for the reference, which could
    result in the collector reclaiming an object too early, which is basically a
    use-after-free bug. Luckily, we sandbox the GC heap now, so such UAF bugs aren't
    memory unsafe, but they could potentially result in denial of service
    attacks. Either way, we don't want those bugs!
    
    On the other hand, it is technically fine to dedupe bitcasts *to* reference
    types. Doing so extends, rather than shortens, the live range of the GC
    reference. This potentially adds it to more stack maps than it otherwise would
    have been in, which means it might unnecessarily survive a GC it otherwise
    wouldn't have. But that is fine. Shrinking live ranges of GC references, and
    removing them from stack maps they otherwise should have been in, is the
    problematic transformation.
    
    * Add additional logging and debug asserts for GC stuff
    fitzgen authored and alexcrichton committed Apr 11, 2024
    Configuration menu
    Copy the full SHA
    bc8b93f View commit details
    Browse the repository at this point in the history
  4. Handle out-of-bounds component sections (bytecodealliance#8323)

    * Handle out-of-bounds component sections
    
    Fixes bytecodealliance#8322
    
    * Add a test that trancated component binaries don't cause panics
    fitzgen authored and alexcrichton committed Apr 11, 2024
    Configuration menu
    Copy the full SHA
    d599c26 View commit details
    Browse the repository at this point in the history