Skip to content

Fix debug runtime overflow and unaligned unwind metadata access#1184

Open
DanielZ224 wants to merge 5 commits into
mainfrom
fix-debug-misaligned-pointer
Open

Fix debug runtime overflow and unaligned unwind metadata access#1184
DanielZ224 wants to merge 5 commits into
mainfrom
fix-debug-misaligned-pointer

Conversation

@DanielZ224

Copy link
Copy Markdown
Contributor

Summary

This PR fixes debug-build runtime failures exposed by grate tests involving fork/thread execution.

The failures appeared in debug lind-boot runs as:

  • misaligned pointer dereference in lind-multi-process/src/lib.rs
  • attempt to add with overflow in wasmtime/src/runtime/instance.rs
  • Grate test timeouts after the initial panic was avoided

The root cause was that debug builds enforce stricter runtime checks than release builds. Some asyncify unwind metadata was accessed through direct u64 pointer dereferences, even though the unwind data address may not always be 8-byte aligned. In addition, GOT memory relocation used checked debug addition, which can panic on overflow even though release builds effectively use wrapping arithmetic.

Changes

  • Replaced direct u64 pointer reads/writes on asyncify unwind metadata with:

    • std::ptr::read_unaligned
    • std::ptr::write_unaligned
  • Updated GOT memory relocation arithmetic from:

let val = raw as u32 + memory_base;

to

let val = (raw as u32).wrapping_add(memory_base);

This makes debug behavior consistent with release behavior and prevents debug-only overflow panics during GOT relocation.

Validation

Built debug lind-boot:

cargo build --manifest-path src/lind-boot/Cargo.toml \
  --no-default-features --features fdtables-dashmaparray

cp src/lind-boot/target/debug/lind-boot build/lind-boot

Ran the failing grate tests with debug lind-boot:

RUST_BACKTRACE=1 python3 scripts/harnesses/gratetestreport.py \
  --testfiles \
  tests/grate-tests/concurrent-request/race-test_grate.c \
  tests/grate-tests/concurrent-request/thread_race_grate.c \
  --timeout 600 \
  --debug \
  --generate-html

Result:

[INFO] [1/2] concurrent-request/race-test_grate.c
[INFO] SUCCESS
[INFO] [2/2] concurrent-request/thread_race_grate.c
[INFO] SUCCESS

Also verified a reduced temporary reproduction case with debug lind-boot:

tmp-debug-939/race-test-small_grate.c: SUCCESS

Notes

The temporary reduced test files and generated reports were not included in this PR.

Related Issue

Related to #939.

@github-actions

Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

grate harness

Grate Test Report

MetricValue
Total14
Success14
Failures0
Compile Failures0
Runtime Failures0
Timeout Failures0
Missing Pair Failures0

Cases

TestStatusError TypeOutput
concurrent-request/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

concurrent-request/race-test_grate.cSuccess
STDOUT:
pass

STDERR:

concurrent-request/thread_race_grate.cSuccess
STDOUT:
[thread_race] Registering handler for cage 2 in grate 1 with fn ptr addr: 3
[thread_race] PASS: 20 threads x 100000 calls returned 10
[thread_race] PASS

STDERR:

copy-data-between-cages/cp-stncpy_grate.cSuccess
STDOUT:
[cage] pathname addr=0xfffb6ff9
[cage] pathname='random'
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

copy-data-between-cages/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

interposing-calls/fork-with-newret_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Cage] Forked process with PID: 10
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-exec_grate.cSuccess
STDOUT:
[Grate|interpose-exec] Registering exec handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
Exec successful, argv[1]: --execd
[Grate|interpose-exec] PASS

STDERR:

interposing-calls/interpose-exit_grate.cSuccess
STDOUT:
[Grate|interpose-exit] Registering exit handler for cage 2 in grate 1 with fn ptr addr: 3
Exiting...

[Grate|interpose-exit] PASS

STDERR:

interposing-calls/interpose-fork_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-mmap_grate.cSuccess
STDOUT:
[Grate|interpose-mmap] Registering mmap handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
mmap test: PASS
[Grate|interpose-mmap] PASS

STDERR:

interposing-calls/interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 4
[cage] registering 107. grateid: 2 cageid: 3
[Grate|interpose-register] Handling function ptr: 4 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 1 with fn ptr addr: 3
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|interpose-register] PASS

STDERR:

multi-register_grate.cSuccess
STDOUT:
[Grate|multi-register_grate] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|multi-register_grate] Handling function ptr: 4 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Cage | multi-register] PASS: geteuid=10, getuid=20
[Grate|multi-register] PASS

STDERR:

simple-tests/diff-cage-args_grate.cSuccess
STDOUT:
[Grate|diff-cage-args] Handling function ptr: 3 from cage: 1
[Grate|diff-cage-args] In open_grate 1 handler for cage: 1
Hello world. FD=-1
[Grate|diff-cage-args] Handling function ptr: 4 from cage: 1
Goodbye world! ret=4321 buf=helloworld
[Grate|diff-cage-args] PASS

STDERR:

simple-tests/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|geteuid] Handling function ptr: 3 from cage: 1
[Grate|geteuid] In geteuid_grate 1 handler for cage: 1
[Cage | geteuid] PASS: geteuid ret = 10
[Grate|geteuid] PASS

STDERR:

static harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Static Tests
fork_simple.cSuccessNone0.057122s4.423848s
Success
thread.cSuccessNone0.050583s4.445093s
Success
tls_test.cSuccessNone0.061390s4.439597s
Success
Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

wasm harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases218
Number of Successes218
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.050603s0.153659s
Success
chdir_getcwd.cSuccessNone0.051744s0.115263s
Success
chmod.cSuccessNone0.057090s0.125466s
Success
clock_gettime_highlevel.cSuccessNone0.123245s0.171071s
Success
clock_gettime_simple.cSuccessNone0.047055s0.108263s
Success
cloexec.cSuccessNone0.056080s0.132510s
Success
close.cSuccessNone0.063436s0.137767s
Success
creat_access.cSuccessNone0.054337s0.116622s
Success
doubleclose.cSuccessNone0.047152s0.100139s
Success
dup.cSuccessNone0.048160s0.116664s
Success
dup2.cSuccessNone0.052760s0.114469s
Success
dup3.cSuccessNone0.051515s0.114932s
Success
dupwrite.cSuccessNone0.054042s0.112667s
Success
etc_conf.cSuccessNone0.049365s0.117275s
Success
faccessat.cSuccessNone0.050626s0.116910s
Success
fchdir.cSuccessNone0.056413s0.127512s
Success
fchmod.cSuccessNone0.055592s0.126012s
Success
fchmodat.cSuccessNone0.050101s0.115528s
Success
fcntl.cSuccessNone0.053740s0.131391s
Success
fdatasync.cSuccessNone0.053845s0.110530s
Success
filetest.cSuccessNone0.053941s0.112142s
Success
filetest1000.cSuccessNone0.063076s0.126277s
Success
flock.cSuccessNone0.061897s0.150704s
Success
fstat.cSuccessNone0.055974s0.126619s
Success
fstatfs.cSuccessNone0.049454s0.108862s
Success
fsync.cSuccessNone0.053352s0.111937s
Success
ftruncate.cSuccessNone0.058608s0.218250s
Success
getcwd.cSuccessNone0.050624s0.107001s
Success
getcwd_null.cSuccessNone0.055226s0.119640s
Success
getpgid.cSuccessNone0.048773s0.105693s
Success
getrandom.cSuccessNone0.053827s0.130082s
Success
ioctl.cSuccessNone0.055795s0.118337s
Success
link.cSuccessNone0.057602s0.157565s
Success
locale_test.cSuccessNone0.065291s0.317945s
Success
lseek.cSuccessNone0.058861s0.190312s
Success
lstat.cSuccessNone0.058373s0.134766s
Success
mkdir_rmdir.cSuccessNone0.054703s0.118415s
Success
mkfifo_test.cSuccessNone0.059765s0.156812s
Success
mknod.cSuccessNone0.053105s0.124584s
Success
nocancel_io.cSuccessNone0.058079s0.142516s
Success
open.cSuccessNone0.049001s0.104632s
Success
openat.cSuccessNone0.050262s0.113478s
Success
path_conversion_safety.cSuccessNone0.058259s0.134612s
Success
ppoll.cSuccessNone0.057601s0.125768s
Success
pread_pwrite.cSuccessNone0.051766s0.119019s
Success
preadv_pwritev.cSuccessNone0.057205s0.132408s
Success
printf.cSuccessNone0.046689s0.099499s
Success
prlimit64.cSuccessNone0.048947s0.106320s
Success
read.cSuccessNone0.055242s0.126531s
Success
readbytes.cSuccessNone0.051098s0.109637s
Success
readdir_basic.cSuccessNone0.057963s0.147655s
Success
readlink.cSuccessNone0.054378s0.122925s
Success
readlinkat.cSuccessNone0.056911s0.125539s
Success
readv_writev_test.cSuccessNone0.055728s0.127596s
Success
rename.cSuccessNone0.056384s0.117381s
Success
renameat.cSuccessNone0.056613s0.130958s
Success
sc-writev.cSuccessNone0.052665s0.116093s
Success
stat.cSuccessNone0.055394s0.124183s
Success
statfs.cSuccessNone0.049414s0.108149s
Success
symlink.cSuccessNone0.057093s0.147020s
Success
sync_file_range.cSuccessNone0.053075s0.112028s
Success
timespec_time_t_compat.cSuccessNone0.051883s0.111030s
Success
truncate.cSuccessNone0.056319s0.138498s
Success
unlink.cSuccessNone0.056380s0.152187s
Success
unlinkat.cSuccessNone0.056559s0.133111s
Success
utimensat.cSuccessNone0.053870s0.134783s
Success
write.cSuccessNone0.048176s0.100299s
Success
writeloop.cSuccessNone0.056468s0.118078s
Success
writepartial.cSuccessNone0.055307s0.108745s
Success
writev.cSuccessNone0.055369s0.124269s
Success
Math Tests
math_link_smoke.cSuccessNone0.058188s0.107623s
Success
math_tests.cSuccessNone0.062830s0.136728s
Success
printf_float.cSuccessNone0.058578s0.132683s
Success
Memory Tests
brk.cSuccessNone0.056087s0.110976s
Success
fork_large_memory.cSuccessNone0.084099s0.377359s
Success
malloc.cSuccessNone0.050450s0.101649s
Success
malloc_large.cSuccessNone0.050986s0.102650s
Success
memcpy.cSuccessNone0.050396s0.106416s
Success
memory_error_test.cSuccessNone0.056196s0.135246s
Success
mmap.cSuccessNone0.047579s0.103133s
Success
mmap_aligned.cSuccessNone0.049631s0.118685s
Success
mmap_complicated.cSuccessNone0.054559s0.127508s
Success
mmap_file.cSuccessNone0.054770s0.116683s
Success
mmap_shared.cSuccessNone0.053529s0.122973s
Success
mmaptest.cSuccessNone0.051354s0.109408s
Success
mprotect.cSuccessNone0.048901s0.104982s
Success
mprotect_boundary.cSuccessNone0.048675s0.114614s
Success
mprotect_end_region.cSuccessNone0.050813s0.109669s
Success
mprotect_middle_region.cSuccessNone0.047966s0.109936s
Success
mprotect_multiple_times.cSuccessNone0.048918s0.110523s
Success
mprotect_same_value.cSuccessNone0.048855s0.108511s
Success
mprotect_spanning_regions.cSuccessNone0.051204s0.126501s
Success
munmap_adjacent_shm.cSuccessNone0.051137s0.125371s
Success
sbrk.cSuccessNone0.050488s0.108035s
Success
segfault.cSuccessNone0.055623s0.140026s
Success
shm.cSuccessNone0.054605s0.129531s
Success
shmtest.cSuccessNone0.049391s0.110409s
Success
thread_malloc_sequential.cSuccessNone0.056175s0.157389s
Success
vtable.cSuccessNone0.059562s0.122798s
Success
Networking Tests
accept4.cSuccessNone0.059945s0.131942s
Success
dns_resolve_test.cSuccessNone0.054648s0.117164s
Success
dnstest.cSuccessNone0.054484s0.117800s
Success
epoll_badfd.cSuccessNone0.049979s0.107085s
Success
epoll_edge_triggered.cSuccessNone0.210986s0.379083s
Success
epollcreate1.cSuccessNone0.055930s0.129082s
Success
error_handling_net.cSuccessNone0.061946s0.191115s
Success
getaddrinfo_test.cSuccessNone0.058161s0.152903s
Success
getaddrinfo_unspec.cSuccessNone0.064372s0.126628s
Success
gethostname.cSuccessNone0.048562s0.103625s
Success
getifaddrs.cSuccessNone0.056358s0.119693s
Success
getsockname.cSuccessNone0.058805s0.119256s
Success
getsockopt.cSuccessNone0.057913s0.155579s
Success
ipv6_basic.cSuccessNone0.060161s0.153102s
Success
makepipe.cSuccessNone0.048040s0.101188s
Success
nonblocking_eagain.cSuccessNone0.060513s0.185606s
Success
pipe.cSuccessNone0.056358s0.125530s
Success
pipe2.cSuccessNone0.056155s0.117611s
Success
pipeinput.cSuccessNone0.057559s0.142190s
Success
pipeinput2.cSuccessNone0.057958s0.147029s
Success
pipeonestring.cSuccessNone0.057940s0.140925s
Success
pipepong.cSuccessNone0.057886s0.147430s
Success
pipewrite.cSuccessNone0.051812s0.133232s
Success
poll.cSuccessNone0.056031s0.115397s
Success
recvfrom-sendto.cSuccessNone0.057089s0.125709s
Success
sendmsg_recvmsg_test.cSuccessNone0.057513s0.130316s
Success
serverclient.cSuccessNone0.055360s0.131838s
Success
shutdown.cSuccessNone0.056733s0.127449s
Success
shutdown_fork.cSuccessNone0.056597s0.130255s
Success
simple-select.cSuccessNone0.057508s0.141141s
Success
simple_epoll.cSuccessNone0.055253s0.121977s
Success
socket.cSuccessNone0.054068s0.113996s
Success
socket_cloexec.cSuccessNone0.054197s0.113468s
Success
socket_options_advanced.cSuccessNone0.060110s0.171304s
Success
socketepoll.cSuccessNone0.054240s0.115873s
Success
socketpair.cSuccessNone0.053281s0.125716s
Success
socketselect.cSuccessNone0.054202s0.122216s
Success
udp_send_recv.cSuccessNone0.161238s0.266139s
Success
uds-getsockname.cSuccessNone0.056149s0.116080s
Success
uds-nb-select.cSuccessNone2.063716s2.177230s
Success
uds-serverclient.cSuccessNone0.058267s0.147172s
Success
uds-socketselect.cSuccessNone0.054950s0.126481s
Success
uds_listen_poll.cSuccessNone1.061198s1.159817s
Success
writev_socket.cSuccessNone0.058371s0.153490s
Success
Process Tests
barrier_test.cSuccessNone0.054348s0.124287s
Success
chain_thread.cSuccessNone1.055758s1.130457s
Success
ctor_syscall_test.cSuccessNone0.046637s0.104170s
Success
cxa_atexit_test.cSuccessNone0.050976s0.109537s
Success
exec_non_utf8.cSuccessNone0.053713s0.113641s
Success
execve_shebang.cSuccessNone0.055319s0.115248s
Success
exit.cSuccessNone0.052086s0.105207s
Success
exit_failure.cSuccessNone0.054492s0.121397s
Success
exit_group_thread.cSuccessNone0.057448s0.133232s
Success
exit_status_first_wins.cSuccessNone0.058255s0.135677s
Success
flockfile_test.cSuccessNone0.055694s0.130879s
Success
fork2malloc.cSuccessNone0.055687s0.126443s
Success
fork_select.cSuccessNone0.054654s0.130922s
Success
fork_simple.cSuccessNone0.054443s0.119441s
Success
fork_syscall.cSuccessNone0.059530s0.346670s
Success
fork_tls_ctype.cSuccessNone0.057062s0.145144s
Success
forkandopen.cSuccessNone0.057036s0.135817s
Success
forkdup.cSuccessNone0.058985s0.129964s
Success
forkexecuid.cSuccessNone0.053998s0.135862s
Success
forkexecv-arg.cSuccessNone0.053972s0.126603s
Success
forkexecv.cSuccessNone0.052790s0.121649s
Success
forkfiles.cSuccessNone0.055411s0.128869s
Success
forkmalloc.cSuccessNone0.055848s0.120098s
Success
forknodup.cSuccessNone0.056053s0.132065s
Success
function-ptr.cSuccessNone0.050369s0.105299s
Success
getegid_syscall.cSuccessNone0.055771s0.265841s
Success
getgid_syscall.cSuccessNone0.056776s0.272598s
Success
getpid.cSuccessNone0.048963s0.102499s
Success
getpid_syscall.cSuccessNone0.057272s0.276122s
Success
getppid.cSuccessNone0.055473s0.121721s
Success
getppid_syscall.cSuccessNone0.058344s0.243201s
Success
getuid.cSuccessNone0.055675s0.112564s
Success
getuid_syscall.cSuccessNone0.054783s0.179043s
Success
hello-arg.cSuccessNone0.046680s0.105155s
Success
hello.cSuccessNone0.047067s0.099411s
Success
longjmp.cSuccessNone0.048045s0.107232s
Success
mutex.cSuccessNone2.058330s2.124896s
Success
printf_deadlock_smoke.cSuccessNone0.063046s0.155741s
Success
printf_thread_test.cSuccessNone0.056141s0.130404s
Success
sem_forks.cSuccessNone0.057390s0.139673s
Success
setsid.cSuccessNone0.048550s0.101126s
Success
template.cSuccessNone0.054241s0.148675s
Success
test_exec_nofork.cSuccessNone0.054447s0.122327s
Success
test_unlink_open_file.cSuccessNone0.050373s0.105611s
Success
thread-guard.cSuccessNone0.052843s0.122809s
Success
thread-test.cSuccessNone0.050711s0.113033s
Success
thread.cSuccessNone0.050578s0.113375s
Success
thread_cageid_race.cSuccessNone0.051303s0.164790s
Success
tls_test.cSuccessNone0.053225s0.126934s
Success
uname.cSuccessNone0.049566s0.104421s
Success
wait.cSuccessNone0.051685s0.125893s
Success
waitpid_anychild.cSuccessNone0.054000s0.122728s
Success
waitpid_syscall.cSuccessNone1.055686s1.174823s
Success
waitpid_wnohang.cSuccessNone0.055910s0.125642s
Success
Signal Tests
alarm.cSuccessNone7.054606s7.145936s
Success
eintr_fork_signal.cSuccessNone1.056285s1.138034s
Success
kill.cSuccessNone1.054078s1.125081s
Success
setitimer.cSuccessNone7.055388s7.150336s
Success
sigalrm.cSuccessNone2.055735s2.131013s
Success
sigaltstack.cSuccessNone0.056245s0.124870s
Success
sigchld.cSuccessNone1.056613s1.124381s
Success
signal-fork.cSuccessNone4.056441s4.124342s
Success
signal-simple.cSuccessNone0.055693s0.115980s
Success
signal_SIGCHLD.cSuccessNone0.053689s0.127601s
Success
signal_fork.cSuccessNone0.052333s0.128273s
Success
signal_int_ignored.cSuccessNone2.054860s2.124929s
Success
signal_kill_cleanup.cSuccessNone1.053275s1.120405s
Success
signal_procmask.cSuccessNone0.050610s0.114847s
Success
signal_read_interrupt.cSuccessNone0.558439s0.632031s
Success
signal_recursive.cSuccessNone0.050361s0.119232s
Success
signal_sa_mask.cSuccessNone0.049772s0.113898s
Success
signal_select_interrupt.cSuccessNone0.558705s0.634515s
Success
signal_write_interrupt.cSuccessNone1.057829s1.133257s
Success
sigpipe.cSuccessNone1.057304s1.134451s
Success
sigprocmask.cSuccessNone1.055005s1.122152s
Success
Fail Tests

Summary

MetricCount
Total Test Cases4
Number of Successes4
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
dlerror.cSuccessNone0.047678s0.103580s
Success
Memory Tests
mmap-negative1.cSuccessNone0.135209s0.115053s
Success
mmap-negative2.cSuccessNone0.124976s0.122569s
Success
Signal Tests
signal_resethand.cSuccessNone1.055444s1.122870s
Success

C++ harness

Summary

MetricValue
Total1
Success1
Failures0
Compile failures0
Runtime failures0
Output mismatch0
Timeouts0

Cases

TestStatusError typeNative timeWasm timeOutput
tests/unit-tests/cpp/sort.cppSuccess0.530427s10.053355s
LIBCPP_SORT_OK 1 2 3

@github-actions

Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

grate harness

Grate Test Report

MetricValue
Total14
Success14
Failures0
Compile Failures0
Runtime Failures0
Timeout Failures0
Missing Pair Failures0

Cases

TestStatusError TypeOutput
concurrent-request/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

concurrent-request/race-test_grate.cSuccess
STDOUT:
pass

STDERR:

concurrent-request/thread_race_grate.cSuccess
STDOUT:
[thread_race] Registering handler for cage 2 in grate 1 with fn ptr addr: 3
[thread_race] PASS: 20 threads x 100000 calls returned 10
[thread_race] PASS

STDERR:

copy-data-between-cages/cp-stncpy_grate.cSuccess
STDOUT:
[cage] pathname addr=0xfffb6ff9
[cage] pathname='random'
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

copy-data-between-cages/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

interposing-calls/fork-with-newret_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Cage] Forked process with PID: 10
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-exec_grate.cSuccess
STDOUT:
[Grate|interpose-exec] Registering exec handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
Exec successful, argv[1]: --execd
[Grate|interpose-exec] PASS

STDERR:

interposing-calls/interpose-exit_grate.cSuccess
STDOUT:
[Grate|interpose-exit] Registering exit handler for cage 2 in grate 1 with fn ptr addr: 3
Exiting...

[Grate|interpose-exit] PASS

STDERR:

interposing-calls/interpose-fork_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-mmap_grate.cSuccess
STDOUT:
[Grate|interpose-mmap] Registering mmap handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
mmap test: PASS
[Grate|interpose-mmap] PASS

STDERR:

interposing-calls/interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 4
[cage] registering 107. grateid: 2 cageid: 3
[Grate|interpose-register] Handling function ptr: 4 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 1 with fn ptr addr: 3
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|interpose-register] PASS

STDERR:

multi-register_grate.cSuccess
STDOUT:
[Grate|multi-register_grate] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|multi-register_grate] Handling function ptr: 4 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Cage | multi-register] PASS: geteuid=10, getuid=20
[Grate|multi-register] PASS

STDERR:

simple-tests/diff-cage-args_grate.cSuccess
STDOUT:
[Grate|diff-cage-args] Handling function ptr: 3 from cage: 1
[Grate|diff-cage-args] In open_grate 1 handler for cage: 1
Hello world. FD=-1
[Grate|diff-cage-args] Handling function ptr: 4 from cage: 1
Goodbye world! ret=4321 buf=helloworld
[Grate|diff-cage-args] PASS

STDERR:

simple-tests/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|geteuid] Handling function ptr: 3 from cage: 1
[Grate|geteuid] In geteuid_grate 1 handler for cage: 1
[Cage | geteuid] PASS: geteuid ret = 10
[Grate|geteuid] PASS

STDERR:

static harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Static Tests
fork_simple.cSuccessNone0.048428s4.119976s
Success
thread.cSuccessNone0.042448s4.099470s
Success
tls_test.cSuccessNone0.051876s4.139770s
Success
Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

wasm harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases218
Number of Successes218
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.046157s0.134991s
Success
chdir_getcwd.cSuccessNone0.044215s0.099287s
Success
chmod.cSuccessNone0.048092s0.109556s
Success
clock_gettime_highlevel.cSuccessNone0.108356s0.141709s
Success
clock_gettime_simple.cSuccessNone0.037819s0.093122s
Success
cloexec.cSuccessNone0.050219s0.121963s
Success
close.cSuccessNone0.055536s0.117949s
Success
creat_access.cSuccessNone0.048009s0.106364s
Success
doubleclose.cSuccessNone0.040873s0.087564s
Success
dup.cSuccessNone0.040511s0.099301s
Success
dup2.cSuccessNone0.044747s0.102464s
Success
dup3.cSuccessNone0.043885s0.102196s
Success
dupwrite.cSuccessNone0.048530s0.101976s
Success
etc_conf.cSuccessNone0.041441s0.108064s
Success
faccessat.cSuccessNone0.045116s0.107269s
Success
fchdir.cSuccessNone0.048077s0.111395s
Success
fchmod.cSuccessNone0.047258s0.109724s
Success
fchmodat.cSuccessNone0.042926s0.097772s
Success
fcntl.cSuccessNone0.047604s0.114275s
Success
fdatasync.cSuccessNone0.048145s0.101506s
Success
filetest.cSuccessNone0.048382s0.100507s
Success
filetest1000.cSuccessNone0.056749s0.113456s
Success
flock.cSuccessNone0.053939s0.131688s
Success
fstat.cSuccessNone0.047209s0.111249s
Success
fstatfs.cSuccessNone0.043362s0.098309s
Success
fsync.cSuccessNone0.048073s0.096486s
Success
ftruncate.cSuccessNone0.051251s0.197875s
Success
getcwd.cSuccessNone0.042318s0.094037s
Success
getcwd_null.cSuccessNone0.045575s0.104755s
Success
getpgid.cSuccessNone0.041170s0.087980s
Success
getrandom.cSuccessNone0.046097s0.110063s
Success
ioctl.cSuccessNone0.049284s0.109464s
Success
link.cSuccessNone0.049938s0.141118s
Success
locale_test.cSuccessNone0.060697s0.299955s
Success
lseek.cSuccessNone0.050076s0.170904s
Success
lstat.cSuccessNone0.051391s0.121368s
Success
mkdir_rmdir.cSuccessNone0.046255s0.104853s
Success
mkfifo_test.cSuccessNone0.057556s0.140182s
Success
mknod.cSuccessNone0.047309s0.108081s
Success
nocancel_io.cSuccessNone0.048921s0.124783s
Success
open.cSuccessNone0.040589s0.090935s
Success
openat.cSuccessNone0.041931s0.103458s
Success
path_conversion_safety.cSuccessNone0.049690s0.122721s
Success
ppoll.cSuccessNone0.049239s0.108342s
Success
pread_pwrite.cSuccessNone0.044283s0.103718s
Success
preadv_pwritev.cSuccessNone0.049101s0.118458s
Success
printf.cSuccessNone0.038212s0.084811s
Success
prlimit64.cSuccessNone0.039361s0.089461s
Success
read.cSuccessNone0.046967s0.115622s
Success
readbytes.cSuccessNone0.042540s0.092852s
Success
readdir_basic.cSuccessNone0.049936s0.135187s
Success
readlink.cSuccessNone0.046135s0.111079s
Success
readlinkat.cSuccessNone0.047412s0.110924s
Success
readv_writev_test.cSuccessNone0.050447s0.118421s
Success
rename.cSuccessNone0.048930s0.108839s
Success
renameat.cSuccessNone0.048987s0.117365s
Success
sc-writev.cSuccessNone0.044335s0.105527s
Success
stat.cSuccessNone0.049543s0.108176s
Success
statfs.cSuccessNone0.040757s0.093453s
Success
symlink.cSuccessNone0.048532s0.133389s
Success
sync_file_range.cSuccessNone0.046398s0.099822s
Success
timespec_time_t_compat.cSuccessNone0.044032s0.093478s
Success
truncate.cSuccessNone0.051143s0.126084s
Success
unlink.cSuccessNone0.048350s0.136489s
Success
unlinkat.cSuccessNone0.047976s0.115610s
Success
utimensat.cSuccessNone0.044872s0.122765s
Success
write.cSuccessNone0.039675s0.084706s
Success
writeloop.cSuccessNone0.051380s0.106054s
Success
writepartial.cSuccessNone0.046614s0.095673s
Success
writev.cSuccessNone0.046939s0.107849s
Success
Math Tests
math_link_smoke.cSuccessNone0.049233s0.096702s
Success
math_tests.cSuccessNone0.054200s0.119352s
Success
printf_float.cSuccessNone0.050958s0.115210s
Success
Memory Tests
brk.cSuccessNone0.046462s0.100321s
Success
fork_large_memory.cSuccessNone0.073851s0.337551s
Success
malloc.cSuccessNone0.043658s0.088727s
Success
malloc_large.cSuccessNone0.044556s0.088533s
Success
memcpy.cSuccessNone0.042319s0.089022s
Success
memory_error_test.cSuccessNone0.048172s0.118264s
Success
mmap.cSuccessNone0.038478s0.089972s
Success
mmap_aligned.cSuccessNone0.040696s0.103520s
Success
mmap_complicated.cSuccessNone0.046724s0.113208s
Success
mmap_file.cSuccessNone0.049101s0.103954s
Success
mmap_shared.cSuccessNone0.045058s0.106158s
Success
mmaptest.cSuccessNone0.042518s0.094764s
Success
mprotect.cSuccessNone0.042826s0.090329s
Success
mprotect_boundary.cSuccessNone0.041560s0.101366s
Success
mprotect_end_region.cSuccessNone0.042135s0.094036s
Success
mprotect_middle_region.cSuccessNone0.039978s0.099718s
Success
mprotect_multiple_times.cSuccessNone0.039832s0.094844s
Success
mprotect_same_value.cSuccessNone0.039742s0.092873s
Success
mprotect_spanning_regions.cSuccessNone0.040651s0.111009s
Success
munmap_adjacent_shm.cSuccessNone0.042250s0.107811s
Success
sbrk.cSuccessNone0.041553s0.091067s
Success
segfault.cSuccessNone0.046883s0.121045s
Success
shm.cSuccessNone0.045602s0.111284s
Success
shmtest.cSuccessNone0.040888s0.095743s
Success
thread_malloc_sequential.cSuccessNone0.047399s0.136248s
Success
vtable.cSuccessNone0.050695s0.106656s
Success
Networking Tests
accept4.cSuccessNone0.050688s0.122425s
Success
dns_resolve_test.cSuccessNone0.045269s0.102600s
Success
dnstest.cSuccessNone0.045748s0.100439s
Success
epoll_badfd.cSuccessNone0.040712s0.090976s
Success
epoll_edge_triggered.cSuccessNone0.204350s0.357296s
Success
epollcreate1.cSuccessNone0.047448s0.110592s
Success
error_handling_net.cSuccessNone0.056744s0.176262s
Success
getaddrinfo_test.cSuccessNone0.049850s0.138218s
Success
getaddrinfo_unspec.cSuccessNone0.050262s0.150241s
Success
gethostname.cSuccessNone0.039975s0.086842s
Success
getifaddrs.cSuccessNone0.050126s0.108581s
Success
getsockname.cSuccessNone0.052137s0.108108s
Success
getsockopt.cSuccessNone0.051600s0.138761s
Success
ipv6_basic.cSuccessNone0.051442s0.136989s
Success
makepipe.cSuccessNone0.039547s0.089112s
Success
nonblocking_eagain.cSuccessNone0.051431s0.145594s
Success
pipe.cSuccessNone0.048635s0.112848s
Success
pipe2.cSuccessNone0.048339s0.104312s
Success
pipeinput.cSuccessNone0.049952s0.128760s
Success
pipeinput2.cSuccessNone0.049569s0.129450s
Success
pipeonestring.cSuccessNone0.050898s0.124790s
Success
pipepong.cSuccessNone0.048463s0.126812s
Success
pipewrite.cSuccessNone0.043203s0.102217s
Success
poll.cSuccessNone0.049011s0.099598s
Success
recvfrom-sendto.cSuccessNone0.048139s0.111556s
Success
sendmsg_recvmsg_test.cSuccessNone0.047975s0.112696s
Success
serverclient.cSuccessNone0.047236s0.118703s
Success
shutdown.cSuccessNone0.048802s0.111751s
Success
shutdown_fork.cSuccessNone0.050273s0.117977s
Success
simple-select.cSuccessNone0.048499s0.123660s
Success
simple_epoll.cSuccessNone0.047162s0.107224s
Success
socket.cSuccessNone0.046048s0.098855s
Success
socket_cloexec.cSuccessNone0.045552s0.096218s
Success
socket_options_advanced.cSuccessNone0.054622s0.155561s
Success
socketepoll.cSuccessNone0.045617s0.099906s
Success
socketpair.cSuccessNone0.045285s0.108555s
Success
socketselect.cSuccessNone0.045815s0.106187s
Success
udp_send_recv.cSuccessNone0.153401s0.245601s
Success
uds-getsockname.cSuccessNone0.046809s0.099234s
Success
uds-nb-select.cSuccessNone2.055401s2.158529s
Success
uds-serverclient.cSuccessNone0.051340s0.132078s
Success
uds-socketselect.cSuccessNone0.048475s0.109493s
Success
uds_listen_poll.cSuccessNone1.053185s1.139659s
Success
writev_socket.cSuccessNone0.050694s0.137639s
Success
Process Tests
barrier_test.cSuccessNone0.047707s0.105084s
Success
chain_thread.cSuccessNone1.047795s1.112805s
Success
ctor_syscall_test.cSuccessNone0.037240s0.087277s
Success
cxa_atexit_test.cSuccessNone0.043219s0.092536s
Success
exec_non_utf8.cSuccessNone0.046804s0.100864s
Success
execve_shebang.cSuccessNone0.046926s0.098956s
Success
exit.cSuccessNone0.045351s0.093526s
Success
exit_failure.cSuccessNone0.046088s0.103959s
Success
exit_group_thread.cSuccessNone0.049573s0.113565s
Success
exit_status_first_wins.cSuccessNone0.049906s0.118100s
Success
flockfile_test.cSuccessNone0.046717s0.115202s
Success
fork2malloc.cSuccessNone0.047446s0.109062s
Success
fork_select.cSuccessNone0.045939s0.114318s
Success
fork_simple.cSuccessNone0.045322s0.104180s
Success
fork_syscall.cSuccessNone0.050216s0.304115s
Success
fork_tls_ctype.cSuccessNone0.049776s0.128731s
Success
forkandopen.cSuccessNone0.048547s0.119172s
Success
forkdup.cSuccessNone0.051083s0.110512s
Success
forkexecuid.cSuccessNone0.045282s0.120925s
Success
forkexecv-arg.cSuccessNone0.048812s0.109194s
Success
forkexecv.cSuccessNone0.043535s0.105861s
Success
forkfiles.cSuccessNone0.050080s0.116721s
Success
forkmalloc.cSuccessNone0.047984s0.104619s
Success
forknodup.cSuccessNone0.047987s0.115481s
Success
function-ptr.cSuccessNone0.041346s0.091558s
Success
getegid_syscall.cSuccessNone0.047103s0.241935s
Success
getgid_syscall.cSuccessNone0.048338s0.252631s
Success
getpid.cSuccessNone0.040018s0.086333s
Success
getpid_syscall.cSuccessNone0.048272s0.255055s
Success
getppid.cSuccessNone0.047619s0.105561s
Success
getppid_syscall.cSuccessNone0.050318s0.215687s
Success
getuid.cSuccessNone0.047281s0.096941s
Success
getuid_syscall.cSuccessNone0.045631s0.156385s
Success
hello-arg.cSuccessNone0.040280s0.095346s
Success
hello.cSuccessNone0.038620s0.086235s
Success
longjmp.cSuccessNone0.040581s0.096755s
Success
mutex.cSuccessNone2.048736s2.106598s
Success
printf_deadlock_smoke.cSuccessNone0.058958s0.143333s
Success
printf_thread_test.cSuccessNone0.046205s0.114197s
Success
sem_forks.cSuccessNone0.049830s0.124484s
Success
setsid.cSuccessNone0.039718s0.086666s
Success
template.cSuccessNone0.046718s0.127771s
Success
test_exec_nofork.cSuccessNone0.044899s0.104355s
Success
test_unlink_open_file.cSuccessNone0.041643s0.089018s
Success
thread-guard.cSuccessNone0.044639s0.108677s
Success
thread-test.cSuccessNone0.042876s0.095777s
Success
thread.cSuccessNone0.041885s0.095941s
Success
thread_cageid_race.cSuccessNone0.042526s0.142206s
Success
tls_test.cSuccessNone0.044697s0.111428s
Success
uname.cSuccessNone0.041950s0.088199s
Success
wait.cSuccessNone0.043452s0.111905s
Success
waitpid_anychild.cSuccessNone0.047064s0.106468s
Success
waitpid_syscall.cSuccessNone1.047050s1.149508s
Success
waitpid_wnohang.cSuccessNone0.047126s0.108972s
Success
Signal Tests
alarm.cSuccessNone7.045634s7.131281s
Success
eintr_fork_signal.cSuccessNone1.049022s1.120479s
Success
kill.cSuccessNone1.048689s1.110792s
Success
setitimer.cSuccessNone7.047714s7.134613s
Success
sigalrm.cSuccessNone2.049808s2.118040s
Success
sigaltstack.cSuccessNone0.049550s0.112013s
Success
sigchld.cSuccessNone1.047896s1.112065s
Success
signal-fork.cSuccessNone4.048354s4.110503s
Success
signal-simple.cSuccessNone0.048174s0.100652s
Success
signal_SIGCHLD.cSuccessNone0.045346s0.112195s
Success
signal_fork.cSuccessNone0.048405s0.117027s
Success
signal_int_ignored.cSuccessNone2.046772s2.114895s
Success
signal_kill_cleanup.cSuccessNone1.045782s1.102763s
Success
signal_procmask.cSuccessNone0.041875s0.098362s
Success
signal_read_interrupt.cSuccessNone0.551801s0.617830s
Success
signal_recursive.cSuccessNone0.044729s0.108373s
Success
signal_sa_mask.cSuccessNone0.041520s0.095676s
Success
signal_select_interrupt.cSuccessNone0.553837s0.616914s
Success
signal_write_interrupt.cSuccessNone1.050237s1.122390s
Success
sigpipe.cSuccessNone1.049111s1.118353s
Success
sigprocmask.cSuccessNone1.049587s1.104336s
Success
Fail Tests

Summary

MetricCount
Total Test Cases4
Number of Successes4
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
dlerror.cSuccessNone0.039016s0.088534s
Success
Memory Tests
mmap-negative1.cSuccessNone0.132704s0.094608s
Success
mmap-negative2.cSuccessNone0.098220s0.114146s
Success
Signal Tests
signal_resethand.cSuccessNone1.046207s1.105164s
Success

C++ harness

Summary

MetricValue
Total1
Success1
Failures0
Compile failures0
Runtime failures0
Output mismatch0
Timeouts0

Cases

TestStatusError typeNative timeWasm timeOutput
tests/unit-tests/cpp/sort.cppSuccess0.525322s9.394692s
LIBCPP_SORT_OK 1 2 3

@qianxichen233

Copy link
Copy Markdown
Contributor

what’s causing these addresses to be unaligned in some cases? Is there a better way to fix the root cause, for example by ensuring the addresses are properly aligned, rather than allowing unaligned writes?

I don’t think we should blindly bypass debug-build errors through special handling. In general, it’s better to respect the debug check and fix the underlying issue, unless doing so would introduce significant overhead

@DanielZ224

Copy link
Copy Markdown
Contributor Author

Thanks for the comment. I rechecked the root cause instead of relying on unaligned u64 accesses.

The asyncify unwind header is a 32-bit layout: buf[0] stores the current unwind position and buf[4] stores the end pointer. The previous u64 writes were not just an alignment issue; they also wrote across both 32-bit fields and could corrupt the asyncify bounds state. I updated these sites to write/read the asyncify metadata as u32 fields.

For jmp_buf, the guest-provided address can be 4-byte aligned rather than 8-byte aligned in this environment, so I kept unaligned access only for the stored 64-bit hash there. The asyncify metadata itself is no longer handled as unaligned u64 data.

I also verified this with a debug build and reran the two grate regression tests:

  • concurrent-request/race-test_grate.c
  • concurrent-request/thread_race_grate.c

Both now pass.

@github-actions

Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

grate harness

Grate Test Report

MetricValue
Total14
Success14
Failures0
Compile Failures0
Runtime Failures0
Timeout Failures0
Missing Pair Failures0

Cases

TestStatusError TypeOutput
concurrent-request/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

concurrent-request/race-test_grate.cSuccess
STDOUT:
pass

STDERR:

concurrent-request/thread_race_grate.cSuccess
STDOUT:
[thread_race] Registering handler for cage 2 in grate 1 with fn ptr addr: 3
[thread_race] PASS: 20 threads x 100000 calls returned 10
[thread_race] PASS

STDERR:

copy-data-between-cages/cp-stncpy_grate.cSuccess
STDOUT:
[cage] pathname addr=0xfffb6ff9
[cage] pathname='random'
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

copy-data-between-cages/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

interposing-calls/fork-with-newret_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Cage] Forked process with PID: 10
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-exec_grate.cSuccess
STDOUT:
[Grate|interpose-exec] Registering exec handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
Exec successful, argv[1]: --execd
[Grate|interpose-exec] PASS

STDERR:

interposing-calls/interpose-exit_grate.cSuccess
STDOUT:
[Grate|interpose-exit] Registering exit handler for cage 2 in grate 1 with fn ptr addr: 3
Exiting...

[Grate|interpose-exit] PASS

STDERR:

interposing-calls/interpose-fork_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-mmap_grate.cSuccess
STDOUT:
[Grate|interpose-mmap] Registering mmap handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
mmap test: PASS
[Grate|interpose-mmap] PASS

STDERR:

interposing-calls/interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 4
[cage] registering 107. grateid: 2 cageid: 3
[Grate|interpose-register] Handling function ptr: 4 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 1 with fn ptr addr: 3
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|interpose-register] PASS

STDERR:

multi-register_grate.cSuccess
STDOUT:
[Grate|multi-register_grate] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|multi-register_grate] Handling function ptr: 4 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Cage | multi-register] PASS: geteuid=10, getuid=20
[Grate|multi-register] PASS

STDERR:

simple-tests/diff-cage-args_grate.cSuccess
STDOUT:
[Grate|diff-cage-args] Handling function ptr: 3 from cage: 1
[Grate|diff-cage-args] In open_grate 1 handler for cage: 1
Hello world. FD=-1
[Grate|diff-cage-args] Handling function ptr: 4 from cage: 1
Goodbye world! ret=4321 buf=helloworld
[Grate|diff-cage-args] PASS

STDERR:

simple-tests/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|geteuid] Handling function ptr: 3 from cage: 1
[Grate|geteuid] In geteuid_grate 1 handler for cage: 1
[Cage | geteuid] PASS: geteuid ret = 10
[Grate|geteuid] PASS

STDERR:

static harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Static Tests
fork_simple.cSuccessNone0.052193s4.424611s
Success
thread.cSuccessNone0.045965s4.458759s
Success
tls_test.cSuccessNone0.057825s4.441271s
Success
Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

wasm harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases218
Number of Successes218
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.046806s0.139012s
Success
chdir_getcwd.cSuccessNone0.049046s0.110365s
Success
chmod.cSuccessNone0.053342s0.121012s
Success
clock_gettime_highlevel.cSuccessNone0.121476s0.155795s
Success
clock_gettime_simple.cSuccessNone0.045086s0.105123s
Success
cloexec.cSuccessNone0.052258s0.126211s
Success
close.cSuccessNone0.058798s0.128123s
Success
creat_access.cSuccessNone0.051477s0.109019s
Success
doubleclose.cSuccessNone0.041615s0.091188s
Success
dup.cSuccessNone0.043224s0.109107s
Success
dup2.cSuccessNone0.049085s0.108027s
Success
dup3.cSuccessNone0.047988s0.108307s
Success
dupwrite.cSuccessNone0.049098s0.103773s
Success
etc_conf.cSuccessNone0.044366s0.109746s
Success
faccessat.cSuccessNone0.046783s0.111164s
Success
fchdir.cSuccessNone0.053078s0.121397s
Success
fchmod.cSuccessNone0.052528s0.122065s
Success
fchmodat.cSuccessNone0.045511s0.107335s
Success
fcntl.cSuccessNone0.049448s0.122700s
Success
fdatasync.cSuccessNone0.049238s0.103929s
Success
filetest.cSuccessNone0.048950s0.106804s
Success
filetest1000.cSuccessNone0.059556s0.116461s
Success
flock.cSuccessNone0.057012s0.141089s
Success
fstat.cSuccessNone0.051685s0.119574s
Success
fstatfs.cSuccessNone0.045349s0.102292s
Success
fsync.cSuccessNone0.048980s0.105026s
Success
ftruncate.cSuccessNone0.053699s0.205983s
Success
getcwd.cSuccessNone0.046848s0.100749s
Success
getcwd_null.cSuccessNone0.050907s0.113613s
Success
getpgid.cSuccessNone0.042653s0.094027s
Success
getrandom.cSuccessNone0.049851s0.121293s
Success
ioctl.cSuccessNone0.053207s0.114727s
Success
link.cSuccessNone0.052245s0.147461s
Success
locale_test.cSuccessNone0.064739s0.311265s
Success
lseek.cSuccessNone0.054358s0.188137s
Success
lstat.cSuccessNone0.053532s0.126156s
Success
mkdir_rmdir.cSuccessNone0.050494s0.109811s
Success
mkfifo_test.cSuccessNone0.058121s0.150513s
Success
mknod.cSuccessNone0.049012s0.118779s
Success
nocancel_io.cSuccessNone0.053541s0.134040s
Success
open.cSuccessNone0.043049s0.094818s
Success
openat.cSuccessNone0.045416s0.105910s
Success
path_conversion_safety.cSuccessNone0.053981s0.130204s
Success
ppoll.cSuccessNone0.056876s0.118910s
Success
pread_pwrite.cSuccessNone0.047979s0.115377s
Success
preadv_pwritev.cSuccessNone0.053011s0.127953s
Success
printf.cSuccessNone0.041940s0.092657s
Success
prlimit64.cSuccessNone0.042919s0.097895s
Success
read.cSuccessNone0.051193s0.119648s
Success
readbytes.cSuccessNone0.046946s0.103238s
Success
readdir_basic.cSuccessNone0.054278s0.141668s
Success
readlink.cSuccessNone0.049089s0.112737s
Success
readlinkat.cSuccessNone0.051740s0.117788s
Success
readv_writev_test.cSuccessNone0.053049s0.121089s
Success
rename.cSuccessNone0.051580s0.110185s
Success
renameat.cSuccessNone0.051422s0.123800s
Success
sc-writev.cSuccessNone0.047110s0.106245s
Success
stat.cSuccessNone0.050682s0.117683s
Success
statfs.cSuccessNone0.043010s0.097602s
Success
symlink.cSuccessNone0.051715s0.138862s
Success
sync_file_range.cSuccessNone0.047663s0.104182s
Success
timespec_time_t_compat.cSuccessNone0.049444s0.099823s
Success
truncate.cSuccessNone0.052717s0.132001s
Success
unlink.cSuccessNone0.052752s0.146091s
Success
unlinkat.cSuccessNone0.051017s0.127218s
Success
utimensat.cSuccessNone0.049930s0.126002s
Success
write.cSuccessNone0.043617s0.093934s
Success
writeloop.cSuccessNone0.053321s0.111123s
Success
writepartial.cSuccessNone0.053683s0.102355s
Success
writev.cSuccessNone0.051261s0.114801s
Success
Math Tests
math_link_smoke.cSuccessNone0.053552s0.100645s
Success
math_tests.cSuccessNone0.059759s0.128659s
Success
printf_float.cSuccessNone0.053134s0.122845s
Success
Memory Tests
brk.cSuccessNone0.047777s0.103240s
Success
fork_large_memory.cSuccessNone0.081875s0.365558s
Success
malloc.cSuccessNone0.046231s0.095502s
Success
malloc_large.cSuccessNone0.048735s0.094960s
Success
memcpy.cSuccessNone0.044595s0.096612s
Success
memory_error_test.cSuccessNone0.052909s0.128770s
Success
mmap.cSuccessNone0.041346s0.094390s
Success
mmap_aligned.cSuccessNone0.045400s0.113454s
Success
mmap_complicated.cSuccessNone0.049855s0.121399s
Success
mmap_file.cSuccessNone0.050223s0.109389s
Success
mmap_shared.cSuccessNone0.049636s0.115741s
Success
mmaptest.cSuccessNone0.045660s0.100113s
Success
mprotect.cSuccessNone0.044635s0.097928s
Success
mprotect_boundary.cSuccessNone0.045635s0.108303s
Success
mprotect_end_region.cSuccessNone0.046081s0.101524s
Success
mprotect_middle_region.cSuccessNone0.042829s0.102485s
Success
mprotect_multiple_times.cSuccessNone0.043595s0.104824s
Success
mprotect_same_value.cSuccessNone0.042633s0.098910s
Success
mprotect_spanning_regions.cSuccessNone0.045563s0.119983s
Success
munmap_adjacent_shm.cSuccessNone0.046739s0.117118s
Success
sbrk.cSuccessNone0.046044s0.099176s
Success
segfault.cSuccessNone0.051235s0.132336s
Success
shm.cSuccessNone0.049557s0.120621s
Success
shmtest.cSuccessNone0.044633s0.105657s
Success
thread_malloc_sequential.cSuccessNone0.051354s0.148244s
Success
vtable.cSuccessNone0.054530s0.114664s
Success
Networking Tests
accept4.cSuccessNone0.056662s0.126936s
Success
dns_resolve_test.cSuccessNone0.048690s0.108496s
Success
dnstest.cSuccessNone0.051160s0.111740s
Success
epoll_badfd.cSuccessNone0.046276s0.098609s
Success
epoll_edge_triggered.cSuccessNone0.206870s0.372650s
Success
epollcreate1.cSuccessNone0.052136s0.121858s
Success
error_handling_net.cSuccessNone0.059708s0.188118s
Success
getaddrinfo_test.cSuccessNone0.055019s0.147109s
Success
getaddrinfo_unspec.cSuccessNone0.052560s0.122495s
Success
gethostname.cSuccessNone0.046257s0.097569s
Success
getifaddrs.cSuccessNone0.051782s0.110074s
Success
getsockname.cSuccessNone0.055498s0.111789s
Success
getsockopt.cSuccessNone0.055951s0.151301s
Success
ipv6_basic.cSuccessNone0.055102s0.145368s
Success
makepipe.cSuccessNone0.043772s0.093929s
Success
nonblocking_eagain.cSuccessNone0.054540s0.155088s
Success
pipe.cSuccessNone0.053015s0.122165s
Success
pipe2.cSuccessNone0.052434s0.112431s
Success
pipeinput.cSuccessNone0.053585s0.135048s
Success
pipeinput2.cSuccessNone0.054968s0.142500s
Success
pipeonestring.cSuccessNone0.053282s0.135477s
Success
pipepong.cSuccessNone0.051622s0.138737s
Success
pipewrite.cSuccessNone0.046083s0.106745s
Success
poll.cSuccessNone0.050207s0.104904s
Success
recvfrom-sendto.cSuccessNone0.053274s0.120848s
Success
sendmsg_recvmsg_test.cSuccessNone0.054970s0.123345s
Success
serverclient.cSuccessNone0.050811s0.123415s
Success
shutdown.cSuccessNone0.053819s0.122246s
Success
shutdown_fork.cSuccessNone0.052492s0.124245s
Success
simple-select.cSuccessNone0.053897s0.135091s
Success
simple_epoll.cSuccessNone0.051479s0.116269s
Success
socket.cSuccessNone0.049687s0.109700s
Success
socket_cloexec.cSuccessNone0.049124s0.103117s
Success
socket_options_advanced.cSuccessNone0.056603s0.166001s
Success
socketepoll.cSuccessNone0.050201s0.111454s
Success
socketpair.cSuccessNone0.050379s0.118171s
Success
socketselect.cSuccessNone0.049190s0.111827s
Success
udp_send_recv.cSuccessNone0.157837s0.260109s
Success
uds-getsockname.cSuccessNone0.050167s0.107374s
Success
uds-nb-select.cSuccessNone2.062840s2.171242s
Success
uds-serverclient.cSuccessNone0.053779s0.140016s
Success
uds-socketselect.cSuccessNone0.052048s0.121321s
Success
uds_listen_poll.cSuccessNone1.058240s1.151904s
Success
writev_socket.cSuccessNone0.053569s0.147712s
Success
Process Tests
barrier_test.cSuccessNone0.049041s0.113317s
Success
chain_thread.cSuccessNone1.051542s1.120416s
Success
ctor_syscall_test.cSuccessNone0.042507s0.096969s
Success
cxa_atexit_test.cSuccessNone0.047362s0.105020s
Success
exec_non_utf8.cSuccessNone0.049377s0.105071s
Success
execve_shebang.cSuccessNone0.052047s0.105492s
Success
exit.cSuccessNone0.048937s0.099869s
Success
exit_failure.cSuccessNone0.051040s0.112405s
Success
exit_group_thread.cSuccessNone0.052644s0.124002s
Success
exit_status_first_wins.cSuccessNone0.053134s0.124733s
Success
flockfile_test.cSuccessNone0.051386s0.124355s
Success
fork2malloc.cSuccessNone0.051789s0.116709s
Success
fork_select.cSuccessNone0.049222s0.123887s
Success
fork_simple.cSuccessNone0.049141s0.111557s
Success
fork_syscall.cSuccessNone0.054034s0.327010s
Success
fork_tls_ctype.cSuccessNone0.052848s0.133754s
Success
forkandopen.cSuccessNone0.051880s0.128052s
Success
forkdup.cSuccessNone0.057342s0.123901s
Success
forkexecuid.cSuccessNone0.048619s0.127420s
Success
forkexecv-arg.cSuccessNone0.049636s0.119117s
Success
forkexecv.cSuccessNone0.048342s0.113280s
Success
forkfiles.cSuccessNone0.051104s0.121490s
Success
forkmalloc.cSuccessNone0.050677s0.111754s
Success
forknodup.cSuccessNone0.051868s0.125026s
Success
function-ptr.cSuccessNone0.047218s0.095714s
Success
getegid_syscall.cSuccessNone0.052076s0.262393s
Success
getgid_syscall.cSuccessNone0.053632s0.286301s
Success
getpid.cSuccessNone0.045241s0.095298s
Success
getpid_syscall.cSuccessNone0.054377s0.273998s
Success
getppid.cSuccessNone0.050841s0.112497s
Success
getppid_syscall.cSuccessNone0.053008s0.232356s
Success
getuid.cSuccessNone0.050605s0.104774s
Success
getuid_syscall.cSuccessNone0.049516s0.168109s
Success
hello-arg.cSuccessNone0.041087s0.096100s
Success
hello.cSuccessNone0.040740s0.090137s
Success
longjmp.cSuccessNone0.041645s0.098645s
Success
mutex.cSuccessNone2.053600s2.116292s
Success
printf_deadlock_smoke.cSuccessNone0.062186s0.148669s
Success
printf_thread_test.cSuccessNone0.051246s0.121588s
Success
sem_forks.cSuccessNone0.052723s0.137910s
Success
setsid.cSuccessNone0.043836s0.096112s
Success
template.cSuccessNone0.050958s0.138539s
Success
test_exec_nofork.cSuccessNone0.051441s0.115082s
Success
test_unlink_open_file.cSuccessNone0.046191s0.098974s
Success
thread-guard.cSuccessNone0.048919s0.112299s
Success
thread-test.cSuccessNone0.045799s0.102076s
Success
thread.cSuccessNone0.045229s0.105404s
Success
thread_cageid_race.cSuccessNone0.048207s0.158176s
Success
tls_test.cSuccessNone0.048747s0.124556s
Success
uname.cSuccessNone0.044904s0.096391s
Success
wait.cSuccessNone0.048805s0.121849s
Success
waitpid_anychild.cSuccessNone0.050866s0.118135s
Success
waitpid_syscall.cSuccessNone1.049783s1.162383s
Success
waitpid_wnohang.cSuccessNone0.051434s0.119463s
Success
Signal Tests
alarm.cSuccessNone7.051150s7.133888s
Success
eintr_fork_signal.cSuccessNone1.052202s1.133955s
Success
kill.cSuccessNone1.051687s1.118723s
Success
setitimer.cSuccessNone7.050914s7.146046s
Success
sigalrm.cSuccessNone2.051286s2.123409s
Success
sigaltstack.cSuccessNone0.052482s0.119632s
Success
sigchld.cSuccessNone1.054552s1.120967s
Success
signal-fork.cSuccessNone4.053450s4.117796s
Success
signal-simple.cSuccessNone0.051677s0.109021s
Success
signal_SIGCHLD.cSuccessNone0.050899s0.124184s
Success
signal_fork.cSuccessNone0.047455s0.123073s
Success
signal_int_ignored.cSuccessNone2.051885s2.118862s
Success
signal_kill_cleanup.cSuccessNone1.049322s1.114392s
Success
signal_procmask.cSuccessNone0.046049s0.107627s
Success
signal_read_interrupt.cSuccessNone0.556878s0.627503s
Success
signal_recursive.cSuccessNone0.045985s0.112156s
Success
signal_sa_mask.cSuccessNone0.047397s0.108098s
Success
signal_select_interrupt.cSuccessNone0.556035s0.628579s
Success
signal_write_interrupt.cSuccessNone1.053543s1.130390s
Success
sigpipe.cSuccessNone1.052788s1.125721s
Success
sigprocmask.cSuccessNone1.051641s1.115448s
Success
Fail Tests

Summary

MetricCount
Total Test Cases4
Number of Successes4
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
dlerror.cSuccessNone0.041481s0.094452s
Success
Memory Tests
mmap-negative1.cSuccessNone0.129958s0.115174s
Success
mmap-negative2.cSuccessNone0.116337s0.114117s
Success
Signal Tests
signal_resethand.cSuccessNone1.050416s1.115268s
Success

C++ harness

Summary

MetricValue
Total1
Success1
Failures0
Compile failures0
Runtime failures0
Output mismatch0
Timeouts0

Cases

TestStatusError typeNative timeWasm timeOutput
tests/unit-tests/cpp/sort.cppSuccess0.464554s10.172216s
LIBCPP_SORT_OK 1 2 3

@qianxichen233

Copy link
Copy Markdown
Contributor

Thanks for the comment. I rechecked the root cause instead of relying on unaligned u64 accesses.

The asyncify unwind header is a 32-bit layout: buf[0] stores the current unwind position and buf[4] stores the end pointer. The previous u64 writes were not just an alignment issue; they also wrote across both 32-bit fields and could corrupt the asyncify bounds state. I updated these sites to write/read the asyncify metadata as u32 fields.

For jmp_buf, the guest-provided address can be 4-byte aligned rather than 8-byte aligned in this environment, so I kept unaligned access only for the stored 64-bit hash there. The asyncify metadata itself is no longer handled as unaligned u64 data.

I also verified this with a debug build and reran the two grate regression tests:

  • concurrent-request/race-test_grate.c
  • concurrent-request/thread_race_grate.c

Both now pass.

The issue with asyncify buf size was already fixed before, it's also not reflected in your changed files as well. In your changed files, you are trying to replace all the write with write_unaligned. write_unaligned is only required when the address to write is unaligned. The justification needs to be mentioned here is why the address to be written (i.e. unwind_data_start_sys) is an unaligned address. FYI: unwind_data_start_sys is usually the start address of stack, which is not an user assigned address.

@DanielZ224

Copy link
Copy Markdown
Contributor Author

Updated the fix to avoid using unaligned access for the Asyncify metadata path. These metadata addresses are expected to be aligned, so I changed them back to regular aligned u32 loads/stores instead of bypassing the debug check with read_unaligned/write_unaligned.

I kept the separate jmp_buf hash handling as unaligned access because the guest-side jmp_buf address can be unaligned in practice. I also verified this with a debug lind-boot build and reran the original concurrent-request/race-test_grate.c and concurrent-request/thread_race_grate.c tests; both passed.

@github-actions

Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

grate harness

Grate Test Report

MetricValue
Total15
Success15
Failures0
Compile Failures0
Runtime Failures0
Timeout Failures0
Missing Pair Failures0

Cases

TestStatusError TypeOutput
concurrent-request/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Cage | geteuid] PASS: 1000000 calls returned 10
[Grate|geteuid] PASS

STDERR:

concurrent-request/race-test_grate.cSuccess
STDOUT:
pass

STDERR:

concurrent-request/thread_race_grate.cSuccess
STDOUT:
[thread_race] Registering handler for cage 2 in grate 1 with fn ptr addr: 3
[thread_race] PASS: 20 threads x 100000 calls returned 10
[thread_race] PASS

STDERR:

copy-data-between-cages/cp-stncpy_grate.cSuccess
STDOUT:
[cage] pathname addr=0xfffb6ff9
[cage] pathname='random'
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

copy-data-between-cages/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

STDERR:

interposing-calls/fork-with-newret_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Cage] Forked process with PID: 10
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-exec_grate.cSuccess
STDOUT:
[Grate|interpose-exec] Registering exec handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
[Grate|interpose-exec] Handling function ptr: 3 from cage: 1
[Grate|interpose-exec] In exec_grate 1 handler for cage: 1
Exec successful, argv[1]: --execd
[Grate|interpose-exec] PASS

STDERR:

interposing-calls/interpose-exit_grate.cSuccess
STDOUT:
[Grate|interpose-exit] Registering exit handler for cage 2 in grate 1 with fn ptr addr: 3
Exiting...

[Grate|interpose-exit] PASS

STDERR:

interposing-calls/interpose-fork_grate.cSuccess
STDOUT:
[Grate|interpose-fork] Registering fork handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-fork] Handling function ptr: 3 from cage: 1
[Grate|interpose-fork] In fork_grate 1 handler for cage: 1
[Grate|interpose-fork] PASS

STDERR:

interposing-calls/interpose-mmap_grate.cSuccess
STDOUT:
[Grate|interpose-mmap] Registering mmap handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
[Grate|interpose-mmap] Handling function ptr: 3 from cage: 1
[Grate|interpose-mmap] In mmap_grate 1 handler for cage: 1
mmap test: PASS
[Grate|interpose-mmap] PASS

STDERR:

interposing-calls/interpose-register_grate.cSuccess
STDOUT:
[Grate|interpose-register] Registering register_handler for cage 2 in grate 1 with fn ptr addr: 4
[cage] registering 107. grateid: 2 cageid: 3
[Grate|interpose-register] Handling function ptr: 4 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|geteuid] Registering geteuid handler for cage 1 in grate 1 with fn ptr addr: 3
[Grate|interpose-register] Handling function ptr: 3 from cage: 1
[Grate|interpose-register] In register_grate 1 handler for cage: 1
[Grate|interpose-register] PASS

STDERR:

multi-register_grate.cSuccess
STDOUT:
[Grate|multi-register_grate] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|multi-register_grate] Handling function ptr: 4 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Cage | multi-register] PASS: geteuid=10, getuid=20
[Grate|multi-register] PASS

STDERR:

simple-tests/copy-handler-table_grate.cSuccess
STDOUT:
[Grate|copy-handler-table] Registering geteuid handler for cage 2 in grate 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Grate|copy-handler-table] geteuid handler invoked for cage 1
[Cage|copy-handler-table] PASS: child inherited handler, then overwrite changed geteuid to 0
[Cage|copy-handler-table] PASS: parent=123 child_exit=0
[Grate|copy-handler-table] PASS

STDERR:

simple-tests/diff-cage-args_grate.cSuccess
STDOUT:
[Grate|diff-cage-args] Handling function ptr: 3 from cage: 1
[Grate|diff-cage-args] In open_grate 1 handler for cage: 1
Hello world. FD=-1
[Grate|diff-cage-args] Handling function ptr: 4 from cage: 1
Goodbye world! ret=4321 buf=helloworld
[Grate|diff-cage-args] PASS

STDERR:

simple-tests/geteuid_grate.cSuccess
STDOUT:
[Grate|geteuid] Registering geteuid handler for cage 2 in grate 1 with fn ptr addr: 3
[Grate|geteuid] Handling function ptr: 3 from cage: 1
[Grate|geteuid] In geteuid_grate 1 handler for cage: 1
[Cage | geteuid] PASS: geteuid ret = 10
[Grate|geteuid] PASS

STDERR:

static harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases3
Number of Successes3
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Static Tests
fork_simple.cSuccessNone0.062671s3.902227s
Success
thread.cSuccessNone0.046428s3.966779s
Success
tls_test.cSuccessNone0.049759s3.972804s
Success
Fail Tests

Summary

MetricCount
Total Test Cases0
Number of Successes0
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

wasm harness

Test Report

Deterministic Tests

Summary

MetricCount
Total Test Cases220
Number of Successes220
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
File Tests
chartests.cSuccessNone0.046486s0.143715s
Success
chdir_getcwd.cSuccessNone0.048364s0.116864s
Success
chmod.cSuccessNone0.053579s0.129358s
Success
clock_gettime_highlevel.cSuccessNone0.117227s0.161271s
Success
clock_gettime_simple.cSuccessNone0.040879s0.103577s
Success
cloexec.cSuccessNone0.051973s0.140490s
Success
close.cSuccessNone0.057806s0.139637s
Success
creat_access.cSuccessNone0.049810s0.116793s
Success
doubleclose.cSuccessNone0.042260s0.099689s
Success
dup.cSuccessNone0.042725s0.116119s
Success
dup2.cSuccessNone0.048053s0.113391s
Success
dup3.cSuccessNone0.046762s0.115588s
Success
dupwrite.cSuccessNone0.050284s0.115519s
Success
etc_conf.cSuccessNone0.044497s0.118749s
Success
faccessat.cSuccessNone0.046340s0.117392s
Success
fchdir.cSuccessNone0.052305s0.127039s
Success
fchmod.cSuccessNone0.054191s0.126895s
Success
fchmodat.cSuccessNone0.045914s0.113514s
Success
fcntl.cSuccessNone0.048914s0.129777s
Success
fcntl_dupfd.cSuccessNone0.042626s0.106301s
Success
fdatasync.cSuccessNone0.048102s0.111106s
Success
filetest.cSuccessNone0.049779s0.111735s
Success
filetest1000.cSuccessNone0.057835s0.123827s
Success
flock.cSuccessNone0.057761s0.164589s
Success
fstat.cSuccessNone0.051879s0.128532s
Success
fstatfs.cSuccessNone0.044662s0.110107s
Success
fsync.cSuccessNone0.049705s0.112559s
Success
ftruncate.cSuccessNone0.053335s0.205207s
Success
getcwd.cSuccessNone0.046203s0.106864s
Success
getcwd_null.cSuccessNone0.050300s0.120804s
Success
getpgid.cSuccessNone0.043794s0.102828s
Success
getrandom.cSuccessNone0.049114s0.128561s
Success
ioctl.cSuccessNone0.053486s0.123477s
Success
link.cSuccessNone0.053510s0.156262s
Success
locale_test.cSuccessNone0.063190s0.312160s
Success
lseek.cSuccessNone0.053964s0.188827s
Success
lstat.cSuccessNone0.053490s0.136487s
Success
mkdir_rmdir.cSuccessNone0.050119s0.119760s
Success
mkfifo_test.cSuccessNone0.056096s0.166360s
Success
mknod.cSuccessNone0.049582s0.126824s
Success
nocancel_io.cSuccessNone0.053679s0.140254s
Success
open.cSuccessNone0.045301s0.104359s
Success
openat.cSuccessNone0.045782s0.113177s
Success
path_conversion_safety.cSuccessNone0.053912s0.136091s
Success
ppoll.cSuccessNone0.053895s0.125362s
Success
pread_pwrite.cSuccessNone0.046808s0.120003s
Success
preadv_pwritev.cSuccessNone0.053824s0.133554s
Success
printf.cSuccessNone0.040902s0.099137s
Success
prlimit64.cSuccessNone0.042714s0.104487s
Success
read.cSuccessNone0.050400s0.126318s
Success
readbytes.cSuccessNone0.046538s0.108826s
Success
readdir_basic.cSuccessNone0.057136s0.149034s
Success
readlink.cSuccessNone0.050909s0.123031s
Success
readlinkat.cSuccessNone0.051653s0.125871s
Success
readv_writev_test.cSuccessNone0.051987s0.129052s
Success
rename.cSuccessNone0.056854s0.122215s
Success
renameat.cSuccessNone0.052617s0.132227s
Success
sc-writev.cSuccessNone0.048115s0.115207s
Success
stat.cSuccessNone0.050325s0.127537s
Success
statfs.cSuccessNone0.044160s0.106884s
Success
symlink.cSuccessNone0.052745s0.146298s
Success
sync_file_range.cSuccessNone0.047831s0.112402s
Success
timespec_time_t_compat.cSuccessNone0.046715s0.108680s
Success
trailing_slash.cSuccessNone0.048238s0.122646s
Success
truncate.cSuccessNone0.051644s0.136314s
Success
unlink.cSuccessNone0.052378s0.151875s
Success
unlinkat.cSuccessNone0.052362s0.134132s
Success
utimensat.cSuccessNone0.050505s0.134561s
Success
write.cSuccessNone0.043469s0.099837s
Success
writeloop.cSuccessNone0.053388s0.118180s
Success
writepartial.cSuccessNone0.050913s0.111016s
Success
writev.cSuccessNone0.052225s0.124203s
Success
Math Tests
math_link_smoke.cSuccessNone0.053305s0.109766s
Success
math_tests.cSuccessNone0.057926s0.135929s
Success
printf_float.cSuccessNone0.055085s0.131938s
Success
Memory Tests
brk.cSuccessNone0.048579s0.116578s
Success
fork_large_memory.cSuccessNone0.085262s0.452016s
Success
malloc.cSuccessNone0.047510s0.105056s
Success
malloc_large.cSuccessNone0.051612s0.113004s
Success
memcpy.cSuccessNone0.046788s0.105862s
Success
memory_error_test.cSuccessNone0.057600s0.144040s
Success
mmap.cSuccessNone0.044957s0.112086s
Success
mmap_aligned.cSuccessNone0.045948s0.123351s
Success
mmap_complicated.cSuccessNone0.053668s0.144198s
Success
mmap_file.cSuccessNone0.057864s0.128664s
Success
mmap_shared.cSuccessNone0.049587s0.133945s
Success
mmaptest.cSuccessNone0.047761s0.114324s
Success
mprotect.cSuccessNone0.047813s0.112378s
Success
mprotect_boundary.cSuccessNone0.045675s0.119778s
Success
mprotect_end_region.cSuccessNone0.043939s0.120768s
Success
mprotect_middle_region.cSuccessNone0.049507s0.118949s
Success
mprotect_multiple_times.cSuccessNone0.046000s0.115161s
Success
mprotect_same_value.cSuccessNone0.045107s0.110825s
Success
mprotect_spanning_regions.cSuccessNone0.045728s0.132034s
Success
munmap_adjacent_shm.cSuccessNone0.047196s0.132417s
Success
sbrk.cSuccessNone0.047983s0.113562s
Success
segfault.cSuccessNone0.052888s0.156555s
Success
shm.cSuccessNone0.056536s0.152352s
Success
shmtest.cSuccessNone0.047818s0.116251s
Success
thread_malloc_sequential.cSuccessNone0.056948s0.215757s
Success
vtable.cSuccessNone0.063102s0.129984s
Success
Networking Tests
accept4.cSuccessNone0.055873s0.134212s
Success
dns_resolve_test.cSuccessNone0.049643s0.118877s
Success
dnstest.cSuccessNone0.051259s0.117146s
Success
epoll_badfd.cSuccessNone0.044433s0.107253s
Success
epoll_edge_triggered.cSuccessNone0.208167s0.377810s
Success
epollcreate1.cSuccessNone0.051762s0.129588s
Success
error_handling_net.cSuccessNone0.059192s0.189561s
Success
getaddrinfo_test.cSuccessNone0.055212s0.153629s
Success
getaddrinfo_unspec.cSuccessNone0.052282s0.178108s
Success
gethostname.cSuccessNone0.044586s0.102361s
Success
getifaddrs.cSuccessNone0.052187s0.120917s
Success
getsockname.cSuccessNone0.052017s0.120684s
Success
getsockopt.cSuccessNone0.055093s0.159350s
Success
ipv6_basic.cSuccessNone0.054845s0.154276s
Success
makepipe.cSuccessNone0.043740s0.101915s
Success
nonblocking_eagain.cSuccessNone0.055541s0.164380s
Success
pipe.cSuccessNone0.052995s0.127434s
Success
pipe2.cSuccessNone0.052131s0.118753s
Success
pipeinput.cSuccessNone0.054733s0.152599s
Success
pipeinput2.cSuccessNone0.054577s0.155568s
Success
pipeonestring.cSuccessNone0.054131s0.149915s
Success
pipepong.cSuccessNone0.056543s0.154657s
Success
pipewrite.cSuccessNone0.046492s0.116607s
Success
poll.cSuccessNone0.050846s0.112898s
Success
recvfrom-sendto.cSuccessNone0.052832s0.129612s
Success
sendmsg_recvmsg_test.cSuccessNone0.051751s0.130175s
Success
serverclient.cSuccessNone0.051840s0.132302s
Success
shutdown.cSuccessNone0.053227s0.130200s
Success
shutdown_fork.cSuccessNone0.053903s0.139771s
Success
simple-select.cSuccessNone0.054090s0.150008s
Success
simple_epoll.cSuccessNone0.051377s0.124525s
Success
socket.cSuccessNone0.049752s0.115194s
Success
socket_cloexec.cSuccessNone0.049134s0.112349s
Success
socket_options_advanced.cSuccessNone0.056691s0.172203s
Success
socketepoll.cSuccessNone0.049940s0.116686s
Success
socketpair.cSuccessNone0.049329s0.133569s
Success
socketselect.cSuccessNone0.050174s0.122340s
Success
udp_send_recv.cSuccessNone0.158790s0.273878s
Success
uds-getsockname.cSuccessNone0.051176s0.115026s
Success
uds-nb-select.cSuccessNone2.059880s2.194662s
Success
uds-serverclient.cSuccessNone0.054930s0.156001s
Success
uds-socketselect.cSuccessNone0.051635s0.126481s
Success
uds_listen_poll.cSuccessNone1.058742s1.167075s
Success
writev_socket.cSuccessNone0.055305s0.154687s
Success
Process Tests
barrier_test.cSuccessNone0.049461s0.138494s
Success
chain_thread.cSuccessNone1.055837s1.157636s
Success
ctor_syscall_test.cSuccessNone0.042133s0.103096s
Success
cxa_atexit_test.cSuccessNone0.047432s0.108233s
Success
exec_non_utf8.cSuccessNone0.054616s0.122959s
Success
execve_shebang.cSuccessNone0.051453s0.121725s
Success
exit.cSuccessNone0.048390s0.106474s
Success
exit_failure.cSuccessNone0.056157s0.140926s
Success
exit_group_thread.cSuccessNone0.052191s0.151924s
Success
exit_status_first_wins.cSuccessNone0.058142s0.172396s
Success
flockfile_test.cSuccessNone0.050989s0.150506s
Success
fork2malloc.cSuccessNone0.052485s0.135458s
Success
fork_select.cSuccessNone0.052499s0.142384s
Success
fork_simple.cSuccessNone0.055488s0.143572s
Success
fork_syscall.cSuccessNone0.055688s0.578611s
Success
fork_tls_ctype.cSuccessNone0.054395s0.152693s
Success
forkandopen.cSuccessNone0.053641s0.147925s
Success
forkdup.cSuccessNone0.053042s0.139283s
Success
forkexecuid.cSuccessNone0.050394s0.149892s
Success
forkexecv-arg.cSuccessNone0.049568s0.141375s
Success
forkexecv.cSuccessNone0.056794s0.153590s
Success
forkfiles.cSuccessNone0.051569s0.139464s
Success
forkmalloc.cSuccessNone0.052023s0.131651s
Success
forknodup.cSuccessNone0.051855s0.141247s
Success
function-ptr.cSuccessNone0.045290s0.106440s
Success
getegid_syscall.cSuccessNone0.052776s0.463246s
Success
getgid_syscall.cSuccessNone0.053384s0.482043s
Success
getpid.cSuccessNone0.048268s0.117449s
Success
getpid_syscall.cSuccessNone0.053057s0.486214s
Success
getppid.cSuccessNone0.053517s0.136544s
Success
getppid_syscall.cSuccessNone0.055082s0.384049s
Success
getuid.cSuccessNone0.056561s0.119152s
Success
getuid_syscall.cSuccessNone0.049533s0.237018s
Success
hello-arg.cSuccessNone0.042004s0.106871s
Success
hello.cSuccessNone0.041847s0.098806s
Success
longjmp.cSuccessNone0.042455s0.111885s
Success
mutex.cSuccessNone2.059239s2.138622s
Success
printf_deadlock_smoke.cSuccessNone0.059439s0.170921s
Success
printf_thread_test.cSuccessNone0.054491s0.156558s
Success
sem_forks.cSuccessNone0.053675s0.169995s
Success
setsid.cSuccessNone0.043462s0.102154s
Success
template.cSuccessNone0.051331s0.173728s
Success
test_exec_nofork.cSuccessNone0.057071s0.146652s
Success
test_unlink_open_file.cSuccessNone0.049244s0.105012s
Success
thread-guard.cSuccessNone0.048550s0.131818s
Success
thread-test.cSuccessNone0.051315s0.135734s
Success
thread.cSuccessNone0.047147s0.121761s
Success
thread_cageid_race.cSuccessNone0.048907s0.320028s
Success
tls_test.cSuccessNone0.048832s0.163938s
Success
uname.cSuccessNone0.047724s0.110319s
Success
wait.cSuccessNone0.053034s0.170991s
Success
waitpid_anychild.cSuccessNone0.052165s0.133668s
Success
waitpid_syscall.cSuccessNone1.051617s1.222316s
Success
waitpid_wnohang.cSuccessNone0.052840s0.138933s
Success
Signal Tests
alarm.cSuccessNone7.049940s7.151648s
Success
eintr_fork_signal.cSuccessNone1.052740s1.149806s
Success
kill.cSuccessNone1.050283s1.133792s
Success
setitimer.cSuccessNone7.050506s7.143368s
Success
sigalrm.cSuccessNone2.051121s2.132716s
Success
sigaltstack.cSuccessNone0.052731s0.127898s
Success
sigchld.cSuccessNone1.053948s1.133954s
Success
signal-fork.cSuccessNone4.051981s4.130050s
Success
signal-simple.cSuccessNone0.052221s0.118353s
Success
signal_SIGCHLD.cSuccessNone0.049390s0.137535s
Success
signal_fork.cSuccessNone0.047482s0.137129s
Success
signal_int_ignored.cSuccessNone2.051614s2.134504s
Success
signal_kill_cleanup.cSuccessNone1.049704s1.128436s
Success
signal_procmask.cSuccessNone0.045922s0.116303s
Success
signal_read_interrupt.cSuccessNone0.554358s0.644780s
Success
signal_recursive.cSuccessNone0.045650s0.122623s
Success
signal_sa_mask.cSuccessNone0.044595s0.112025s
Success
signal_select_interrupt.cSuccessNone0.557617s0.649093s
Success
signal_write_interrupt.cSuccessNone1.053733s1.134924s
Success
sigpipe.cSuccessNone1.052656s1.142931s
Success
sigprocmask.cSuccessNone1.050672s1.123225s
Success
Fail Tests

Summary

MetricCount
Total Test Cases4
Number of Successes4
Number of Failures0
Number of Compilation Failure Native0
Number of Runtime Failure Native0
Number of Segmentation Fault Native0
Number of Timeout During Native0
Number of Lind Wasm Compile Failure0
Number of Lind Wasm Runtime Failure0
Number of Lind Wasm Segmentation Failure0
Number of Timeout During Lind Wasm run0
Number of Unknown Failure0
Number of C Compiler and Wasm Output mismatch0
Number of Fail Test: Native Succeeded (Should Fail)0
Number of Fail Test: Wasm Succeeded (Should Fail)0
Number of Fail Test: Both Native and Wasm Succeeded (Should Fail)0
Number of Fail Test: Native Compilation Failure (Should Succeed)0
Number of Fail Test: Wasm Compilation Failure (Should Succeed)0

Test Results by Category

Test CaseStatusError TypeNative TimeWasm TimeOutput
Dylink Tests
dlerror.cSuccessNone0.042193s0.106298s
Success
Memory Tests
mmap-negative1.cSuccessNone0.139168s0.108462s
Success
mmap-negative2.cSuccessNone0.108373s0.118103s
Success
Signal Tests
signal_resethand.cSuccessNone1.053755s1.129131s
Success

C++ harness

Summary

MetricValue
Total1
Success1
Failures0
Compile failures0
Runtime failures0
Output mismatch0
Timeouts0

Cases

TestStatusError typeNative timeWasm timeOutput
tests/unit-tests/cpp/sort.cppSuccess0.384262s8.346080s
LIBCPP_SORT_OK 1 2 3

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.

2 participants