zig-window
zig-window copied to clipboard
segfault on nixos linux + glibc
this fails
https://github.com/andrewrk/zig-window/blob/313e3090b2eecdc5317291b5b13dc7871023d025/src/static-window.zig#L65-L67
wget https://andrewkelley.me/temp/static-window9
chmod +x static-window9
strace ./static-window9 # kids, dont do this at home. running untrusted binaries is bad
execve("./static-window9", ["./static-window9"], 0x7ffdbf62c110 /* 139 vars */) = 0
rt_sigaction(SIGSEGV, {sa_handler=0x25d130, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_RESETHAND|SA_SIGINFO, sa_restorer=0x234940}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGILL, {sa_handler=0x25d130, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_RESETHAND|SA_SIGINFO, sa_restorer=0x234940}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGBUS, {sa_handler=0x25d130, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_RESETHAND|SA_SIGINFO, sa_restorer=0x234940}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
write(2, "debug: detecting whether we are "..., 62debug: detecting whether we are running in the dynamic linker
) = 62
write(2, "debug: we're not. detecting the "..., 52debug: we're not. detecting the dynamic linker path
) = 52
uname({sysname="Linux", nodename="laptop1", ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb8510c000
mmap(0x7fbb8510d000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb8510d000
mmap(0x7fbb8510e000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb8510e000
mmap(0x7fbb8510f000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb8510f000
openat(AT_FDCWD, "/usr/bin/env", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 3
pread64(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\2\0>\0\1\0\0\0 \210@\0\0\0\0\0"..., 64, 0) = 64
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0@\0\0\0\0\0@\0@\0\0\0\0\0"..., 872, 64) = 872
pread64(3, "/nix/store/ayrsyv7npr0lcbann4k9l"..., 84, 792) = 84
pread64(3, "\1\0\0\0\0\0\0\0\34\r\0\0\0\0\0\0\1\0\0\0\0\0\0\0(\r\0\0\0\0\0\0"..., 248, 1680064) = 248
pread64(3, "\21\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0U\364\33\0\0\0\0\0"..., 1024, 1834296) = 64
pread64(3, "\0.symtab\0.strtab\0.shstrtab\0.inte"..., 4096, 1832021) = 2339
pread64(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1000, 1832312) = 1000
pread64(3, "\0__gmon_start__\0acl_get_fd\0acl_g"..., 4096, 11944) = 4096
openat(AT_FDCWD, "/nix/store/5h6q8cmqjd8iqpd99566hrg2a56pwdkc-acl-2.3.1/lib", O_RDONLY|O_CLOEXEC|O_PATH|O_DIRECTORY) = 4
readlinkat(4, "libc.so.6", 0x7ffc8f49ac40, 4096) = -1 ENOENT (No such file or directory)
close(4) = 0
openat(AT_FDCWD, "/nix/store/n239ln3v669s5fkir2fd8niqawyg6qrv-attr-2.5.1/lib", O_RDONLY|O_CLOEXEC|O_PATH|O_DIRECTORY) = 4
readlinkat(4, "libc.so.6", 0x7ffc8f49ac40, 4096) = -1 ENOENT (No such file or directory)
close(4) = 0
openat(AT_FDCWD, "/nix/store/ayrsyv7npr0lcbann4k9lxr19x813f0z-glibc-2.34-115/lib", O_RDONLY|O_CLOEXEC|O_PATH|O_DIRECTORY) = 4
readlinkat(4, "libc.so.6", 0x7ffc8f49ac40, 4096) = -1 EINVAL (Invalid argument)
rt_sigaction(SIGSEGV, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x234940}, {sa_handler=0x25d130, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_RESETHAND|SA_SIGINFO, sa_restorer=0x234940}, 8) = 0
rt_sigaction(SIGILL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x234940}, {sa_handler=0x25d130, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_RESETHAND|SA_SIGINFO, sa_restorer=0x234940}, 8) = 0
rt_sigaction(SIGBUS, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x234940}, {sa_handler=0x25d130, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_RESETHAND|SA_SIGINFO, sa_restorer=0x234940}, 8) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)
looks like it expects libc.so.6
to be a symlink?
stat /nix/store/ayrsyv7npr0lcbann4k9lxr19x813f0z-glibc-2.34-115/lib/libc.so.6 | head -n4
File: /nix/store/ayrsyv7npr0lcbann4k9lxr19x813f0z-glibc-2.34-115/lib/libc.so.6
Size: 2353088 Blocks: 4600 IO Block: 4096 regular file
Device: 8,1 Inode: 29624799 Links: 1
Access: (0555/-r-xr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
readlink /nix/store/ayrsyv7npr0lcbann4k9lxr19x813f0z-glibc-2.34-115/lib/libc.so.6 || echo fail
fail
ldd /usr/bin/env | grep libc.so.6
libc.so.6 => /nix/store/ayrsyv7npr0lcbann4k9lxr19x813f0z-glibc-2.34-115/lib/libc.so.6 (0x00007fa60e96d000)
Can confirm I have the same issue on NixOS 22.05pre (glibc). I suspect this is just the out of date standard library used for the proof of concept, since the detection does work correctly on x86_64-0.10.0-dev.2351+b64a1d5ab
(latest at the time of posting).
const std = @import("std");
pub fn main() anyerror!void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const info = try std.zig.system.NativeTargetInfo.detect(gpa.allocator(), .{});
std.debug.print("found: {s}\n", .{info.dynamic_linker.buffer});
}
[viri@nixos:~/dev/tmp]$ zig run nativeinfo.zig
found: /nix/store/bvy2z17rzlvkx2sj7fy99ajm853yv898-glibc-2.34-210/lib/ld-linux-x86-64.so.2