Skip to content

Stack corruption on AArch64 #106868

@bjorn3

Description

@bjorn3

I tried this code:

echo 'pub fn main() { std::fs::read_dir("foo").unwrap(); }' | rustc +nightly - -g -Cpanic=abort && RUST_BACKTRACE=1 ./rust_out

I expected to see this happen: Panics normally.

Instead, this happened: Backtrace lists thousands of duplicate unwrap calls and GDB reports a stack corruption.

Meta

rustc --version --verbose:

rustc 1.68.0-nightly (0b90256ad 2023-01-13)
binary: rustc
commit-hash: 0b90256ada21c6a81b4c18f2c7a23151ab5fc232
commit-date: 2023-01-13
host: aarch64-unknown-linux-gnu
release: 1.68.0-nightly
LLVM version: 15.0.6

but happened at least as early as nightly-2022-12-13. Doesn't happen on x86_64 or without -Cpanic=abort.

Backtrace

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', <anon>:1:42
stack backtrace:
   0: rust_begin_unwind
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/std/src/panicking.rs:575:5
   1: core::panicking::panic_fmt
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/panicking.rs:64:14
   2: core::result::unwrap_failed
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1790:5
   3: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
   4: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
   5: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
   6: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
   7: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
   8: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
   9: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  10: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  11: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  12: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  13: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  14: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  15: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  16: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  17: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  18: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  19: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  20: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  21: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  22: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  23: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  24: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  25: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  26: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  27: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  28: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  29: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  30: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  31: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  32: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  33: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  34: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  35: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  36: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  37: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  38: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  39: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  40: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  41: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  42: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  43: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  44: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  45: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  46: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  47: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  48: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  49: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  50: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  51: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  52: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  53: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  54: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  55: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  56: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  57: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  58: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  59: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  60: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  61: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  62: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  63: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  64: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  65: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  66: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  67: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  68: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  69: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  70: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  71: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  72: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  73: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  74: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  75: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  76: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  77: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  78: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  79: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  80: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  81: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  82: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  83: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  84: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  85: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  86: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  87: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  88: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  89: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  90: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
  91: core::result::Result<T,E>::unwrap
             at /rustc/0b90256ada21c6a81b4c18f2c7a23151ab5fc232/library/core/src/result.rs:1112:23
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Aborted (core dumped)

GDB shows

#0  __pthread_kill_implementation (threadid=281474842419232, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
#1  0x0000fffff7e5f254 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#2  0x0000fffff7e1a67c in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3  0x0000fffff7e07130 in __GI_abort () at ./stdlib/abort.c:79
#4  0x0000aaaaaaac5624 in panic_abort::__rust_start_panic::abort () at library/panic_abort/src/lib.rs:42
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.E-needs-bisectionCall for participation: This issue needs bisection: https://github.com/rust-lang/cargo-bisect-rustcO-AArch64Armv8-A or later processors in AArch64 modeS-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issue

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions