Skip to content

fix(deps): akarin 1.5.0 — 1.4.1 segfaulted every job under SELinux (#101) - #110

Merged
StuartCameronCode merged 2 commits into
mainfrom
fix-101-akarin-selinux-execheap
Oct 5, 2026
Merged

StuartCameronCode merged 2 commits into
mainfrom
fix-101-akarin-selinux-execheap

Conversation

@StuartCameronCode

Copy link
Copy Markdown
Owner

Fixes #101.

Cause

Every job crashed in vspipe-bin with SIGSEGV on Fedora from app 0.9.12, the first release on deps 1.8.0, where akarin was added. The reporter's probe-plugin-compat run passed 22 plugins and crashed only libakarin.so.

The akarin 1.4.1 Linux wheel allocates JIT code with new[] and then mprotects it executable. A page-sized buffer comes off the brk heap, where SELinux denies PROT_EXEC (execheap, off by default on Fedora/RHEL). The result is only ASSERTed, so the release build jumps into non-executable memory. That matches the report's single frame at 0x55aa… with no module. Upstream: akarin #38, fixed in 1.5.0 by building with the anonymous-mmap allocator. macOS and Windows never took the heap path.

Changes

  • akarin 1.4.1 → 1.5.0 in all three download-deps-* scripts (wheel layouts are unchanged).
  • download-deps-linux.sh fails the build if libakarin.so lacks the akarin_jit mapping name. No hosted runner enforces SELinux, so CI cannot see a regression any other way.
  • NOTICES.txt: statically linked LLVM is now 22.1.8.
  • Write-up in docs/ENGINEERING_NOTES.md; version-history row in CLAUDE.md.

Verification

  • akarin_expr_parity_test.dart passes against 1.5.0 on macos-arm64 (local deps clone with the new dylib swapped in).
  • Static check: the 1.5.0 Linux wheels (x64 and arm64) contain akarin_jit; 1.4.1 does not.
  • Not tested on an SELinux-enforcing machine. The fix rests on upstream's report and the static check until the reporter confirms.

Deps

Needs deps 1.12.0. A follow-up commit on this branch points deps-version.json at it once the bundles are built.

🤖 Generated with Claude Code

https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN

StuartCameronCode and others added 2 commits October 4, 2026 23:11
The 1.4.1 Linux wheel allocated JIT code with new[] and mprotect()ed it
executable. A page-sized buffer lands on the brk heap, where SELinux denies
PROT_EXEC (execheap is off by default on Fedora/RHEL); the result was only
ASSERTed, so a release build jumped into non-executable memory and every
job died with SIGSEGV on the first akarin.Expr frame. Upstream fixed it in
1.5.0 by building with the anonymous-mmap allocator.

The pin moves on all three platforms so output stays identical per OS.
No hosted runner enforces SELinux, so download-deps-linux.sh now fails if
libakarin.so lacks the mmap allocator's mapping name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN
@StuartCameronCode
StuartCameronCode merged commit caf463f into main Oct 5, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

crashing in vspipe - last working version was VapourBox-0.9.8-linux-x64

1 participant