Project

General

Profile

Actions

Feature #19125

open

Support SafeStack

Added by steakknife (Barry Allard) over 1 year ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:110715]

Description

LLVM's current SafeStack support limitations

  • ucontext.h not yet supported (needs LLVM enhancement or workarounds)
  • sigaltstack() cannot use the unsafe stack
  • Mark-and-sweep GC's that modify live pointers must look in both unsafe and safe stacks

Environment

  • CentOS 9 Stream x86_64
  • 96 threads
  • 96 GiB RAM
  • 140 GiB SSD storage

Reproduction

sudo dnf install -y yum-utils
sudo yum-config-manager --enable crb
sudo dnf install -y \
  make bc binutils-gold mold patch git bison xz autoconf automake m4 libtool pkg-config perl-interpreter \
  gmp-devel openssl-devel readline-devel libyaml-devel gdbm-devel zlib-devel libffi-devel \
  ncurses-devel readline-devel glibc-static glibc-devel llvm-toolset

LINKER=mold
FLAGS='-fsanitize=safe-stack'
LINKFLAGS='-fuse-ld=$LINKER -fsanitize=safe-stack'

export \
  CC=clang \
  CXX=clang++ \
  LD=$LINKER \
  CPPFLAGS="$FLAGS" \
  CFLAGS="$FLAGS" \
  CXXFLAGS="$FLAGS" \
  DCFLAGS="$FLAGS" \
  XCFLAGS="$FLAGS" \
  MJIT_CFLAGS="$FLAGS" \
  DLDFLAGS="$FLAGS $LINKFLAGS" \
  LDFLAGS="$FLAGS $LINKFLAGS" \
  XLDFLAGS="$FLAGS $LINKFLAGS $EXE_LINKFLAGS"

./configure --disable-install-doc --enable-shared && \
  make -j && \
  make test && \
  sudo make install

Output

assembling coroutine/amd64/Context.S
compiling enc/ascii.c
compiling enc/us_ascii.c
compiling enc/unicode.c
compiling enc/utf_8.c
compiling enc/trans/newline.c
./revision.h unchanged
compiling version.c
linking miniruby
generating encdb.h
./miniruby: [BUG] Segmentation fault at 0x00000000029bb878
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0001 p:0000 s:0003 E:001b00 (none) [FINISH]


-- Machine register context ------------------------------------------------
 RIP: 0x00007fdf8090163d RBP: 0x00007fdf8084c6a8 RSP: 0x00007fffbb98d178
 RAX: 0x00000000015329a0 RBX: 0x0000000001488ed0 RCX: 0x0000000000000000
 RDX: 0x00000000015329b0 RDI: 0x0000000001488ed0 RSI: 0x000000000000148a
  R8: 0x0000000000000010  R9: 0x0000000000000038 R10: 0x0000000000000000
 R11: 0x0000000000000032 R12: 0x20bb8da71463ef00 R13: 0x00007fdf8084c6b0
 R14: 0x0000000001442800 R15: 0xffffffffffffffe8 EFL: 0x0000000000010246

-- C level backtrace information -------------------------------------------
malloc(): unaligned tcache chunk detected
./miniruby: invalid symbol in encoding UTF-8 :"\\xA1E\\x9B\\u0001\\u0000\\u0000\\u0000\\u0000\\u0016\\x90" (EncodingError)
make: *** [uncommon.mk:841: .rbconfig.time] Error 1
make: *** Waiting for unfinished jobs....
./miniruby: [BUG] Segmentation fault at 0x0000000000000000
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0001 p:0000 s:0003 E:001e70 (none) [FINISH]


-- Machine register context ------------------------------------------------
 RIP: 0x0000000000493e61 RBP: 0x00000000005b3d1b RSP: 0x00007ffd03d522e0
 RAX: 0xabb58d6d7c82b2a0 RBX: 0x00000000019b4a30 RCX: 0x0000000000000312
 RDX: 0x00007fcd5cb0bfb8 RDI: 0x00000000019b4a30 RSI: 0x0000000000003d1b
  R8: 0x0000000000000000  R9: 0x0000000000000038 R10: 0x0000000000000000
 R11: 0x0000000000000032 R12: 0x0000000000000044 R13: 0x0000000000000065
 R14: 0x00007fcd5cb0bfb8 R15: 0x00000000019ada90 EFL: 0x0000000000010206

-- C level backtrace information -------------------------------------------
corrupted size vs. prev_size
make: *** [uncommon.mk:1129: encdb.h] Aborted (core dumped)
make: *** [uncommon.mk:1178: builtin_binary.inc] Aborted (core dumped)

No data to display

Actions

Also available in: Atom PDF

Like0