This release brings critical security fixes as well as exciting new features, including Peregrine Fil-C - a release of Fil-C that can build actually portable executables. This brings Fil-C to Mac and Windows.
Security fixes (courtesy of Anthropic):
- Fix uninitialized memory when passing by-val arguments with clever pointer math. Impact: Fil-C fails to catch safety issues.
- Fix weird behavior impacting GC roots when using setjmps in loops, and longjmping "back in time". Impact: GC use-after-free in arguably correct code (live non-volatile variables across time-traveling setjmp).
- Fix missing GC root in memmove. Impact: GC use-after-free in otherwise arguably correct code (racing against memmove).
- Fix incorrect use of GC barrier in memmove. Impact: GC use-after-free in otherwise correct code.
- Eliminate more cases of UB in arithmetic. Impact: Fil-C's promise of "no UB" could be broken with sufficiently evil use of integers.
- Fix a GC root issue in fiber support (i.e. ucontext). Impact: certain uses of ucontext API could experience GC use-after-free.
- Fix an abstract interpretation bug in the compiler's optimizations for checking that objects aren't free. Impact: Fil-C fails to catch safety issues.
- Fix a race between GC sweep and libpas scavenger decommit. Impact: extremely rare GC use-after-free in otherwise correct code.
- Fix missing checks in the zunsafe OpenSSL port in /opt/fil. Impact: Fil-C fails to catch safety issues.
New features:
- Peregrine Fil-C: this release of Fil-C allows you to build executables that run on Linux/x86_64, Darwin/aarch64, and Windows/x86_64. Still experimental, but simple programs seem to work.
- statmount and listmount syscalls
SaRCAsm fixes:
- Reject passing stack pointer carriers as arguments.
- Expand .rept/.endr blocks.
/opt/fil improvements:
- OpenSSH -> 10.6p1
- pkgconf -> 3.0.10
- patchelf -> 0.19.2
- tmux -> 3.8
- mg -> 4.5
- git -> 2.56.0
- util-linux -> 2.42.4
- curl -> 8.23.0
- unistring -> 1.5
- brotli -> 1.2.1
- ICU -> 79.1
Thank you @mbrock for contributing to this release!
Guide to the available files:
filc-0.687-linux-x86_64.tar.xzandfilc-0.687-linux-aarch64.tar.xzare the traditional, self-contained "pizfix" distributions for X86_64 and ARM64, respectively. These only include the compiler, doesn't require root, and are based on the musl libc. These distributions are recommended for quickly trying out Fil-C.optfil-0.687-linux-x86_64.tar.xzandoptfil-0.687-linux-aarch64.tar.xzare the /opt/fil distributions. The X86_64 one is very well tested across many distributions, while the ARM64 one is new and still experimental. This distribution includes many useful programs like OpenSSH, sudo, tmux, and git. It's based on glibc 2.44, and requires root permissions. This is recommended for giving Fil-C deeper scrutiny.perefil-0.687-linux-x86_64.tar.xzis the Peregrine Fil-C distribution, which allows you to build actual portable memory safe executables that run on Linux, Darwin, and Windows. This is still experimental.