Skip to content

handle error in epoll_wait_syscall()#1121

Merged
rennergade merged 2 commits intomainfrom
epoll-wait-err
Apr 30, 2026
Merged

handle error in epoll_wait_syscall()#1121
rennergade merged 2 commits intomainfrom
epoll-wait-err

Conversation

@drapl0n
Copy link
Copy Markdown
Contributor

@drapl0n drapl0n commented Apr 26, 2026

  • replaces unsafe unwrap() with error handeling based on Result<>
  • returns appropriate error code

This PR resolves the issue causing failure of test_epoll test in cpython app.

@github-actions
Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

Unified Test Report

grate harness

MetricValue
Total12
Success12
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:

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: 3
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 4 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/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

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.044670s4.250761s
Success
thread.cSuccessNone0.039568s4.301934s
Success
tls_test.cSuccessNone0.054067s4.332392s
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 Cases208
Number of Successes208
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.040392s0.121318s
Success
chdir_getcwd.cSuccessNone0.041192s0.084140s
Success
chmod.cSuccessNone0.045599s0.087855s
Success
clock_gettime_highlevel.cSuccessNone0.280727s0.302310s
Success
clock_gettime_simple.cSuccessNone0.035544s0.074504s
Success
cloexec.cSuccessNone0.045412s0.092174s
Success
close.cSuccessNone0.045533s0.096090s
Success
creat_access.cSuccessNone0.042872s0.081467s
Success
doubleclose.cSuccessNone0.036502s0.069020s
Success
dup.cSuccessNone0.036974s0.082022s
Success
dup2.cSuccessNone0.042228s0.080147s
Success
dup3.cSuccessNone0.039413s0.081978s
Success
dupwrite.cSuccessNone0.042997s0.080778s
Success
etc_conf.cSuccessNone0.038907s0.088214s
Success
fchdir.cSuccessNone0.045037s0.090068s
Success
fchmod.cSuccessNone0.044373s0.088189s
Success
fcntl.cSuccessNone0.041104s0.086865s
Success
fdatasync.cSuccessNone0.041699s0.076583s
Success
filetest.cSuccessNone0.041722s0.077183s
Success
filetest1000.cSuccessNone0.045182s0.087346s
Success
flock.cSuccessNone0.051054s0.109310s
Success
fstat.cSuccessNone0.043424s0.087027s
Success
fstatfs.cSuccessNone0.039353s0.076595s
Success
fsync.cSuccessNone0.041686s0.079926s
Success
ftruncate.cSuccessNone0.047252s0.191646s
Success
getcwd.cSuccessNone0.039292s0.076023s
Success
getpgid.cSuccessNone0.038013s0.072608s
Success
getrandom.cSuccessNone0.042609s0.082393s
Success
ioctl.cSuccessNone0.044753s0.085595s
Success
link.cSuccessNone0.045908s0.127765s
Success
locale_test.cSuccessNone0.053214s0.503354s
Success
lseek.cSuccessNone0.046657s0.187835s
Success
lstat.cSuccessNone0.045938s0.096900s
Success
mkdir_rmdir.cSuccessNone0.042629s0.080550s
Success
mkfifo_test.cSuccessNone0.047561s0.114506s
Success
mknod.cSuccessNone0.042193s0.089429s
Success
nocancel_io.cSuccessNone0.045446s0.104199s
Success
open.cSuccessNone0.037849s0.073863s
Success
openat.cSuccessNone0.039009s0.078816s
Success
path_conversion_safety.cSuccessNone0.046685s0.104198s
Success
ppoll.cSuccessNone0.045354s0.089976s
Success
pread_pwrite.cSuccessNone0.040197s0.088105s
Success
preadv_pwritev.cSuccessNone0.044814s0.093626s
Success
printf.cSuccessNone0.034811s0.067899s
Success
prlimit64.cSuccessNone0.037014s0.074998s
Success
read.cSuccessNone0.043811s0.088331s
Success
readbytes.cSuccessNone0.039660s0.075203s
Success
readdir_basic.cSuccessNone0.047032s0.098211s
Success
readlink.cSuccessNone0.043174s0.086375s
Success
readlinkat.cSuccessNone0.044411s0.090840s
Success
readv_writev_test.cSuccessNone0.044940s0.092196s
Success
rename.cSuccessNone0.044902s0.084686s
Success
sc-writev.cSuccessNone0.040972s0.082269s
Success
stat.cSuccessNone0.043624s0.086772s
Success
statfs.cSuccessNone0.038016s0.075624s
Success
symlink.cSuccessNone0.045044s0.108344s
Success
sync_file_range.cSuccessNone0.040698s0.076858s
Success
timespec_time_t_compat.cSuccessNone0.040379s0.075904s
Success
truncate.cSuccessNone0.044894s0.090966s
Success
unlink.cSuccessNone0.045790s0.118402s
Success
unlinkat.cSuccessNone0.044757s0.097712s
Success
write.cSuccessNone0.037273s0.069863s
Success
writeloop.cSuccessNone0.044557s0.080933s
Success
writepartial.cSuccessNone0.043243s0.076089s
Success
writev.cSuccessNone0.043770s0.087018s
Success
Math Tests
math_link_smoke.cSuccessNone0.047379s0.079058s
Success
math_tests.cSuccessNone0.050206s0.095738s
Success
Memory Tests
brk.cSuccessNone0.042157s0.079910s
Success
fork_large_memory.cSuccessNone0.069970s0.303427s
Success
malloc.cSuccessNone0.040715s0.074966s
Success
malloc_large.cSuccessNone0.040510s0.078099s
Success
memcpy.cSuccessNone0.039304s0.073559s
Success
memory_error_test.cSuccessNone0.044253s0.106290s
Success
mmap.cSuccessNone0.036304s0.073774s
Success
mmap_aligned.cSuccessNone0.038193s0.089441s
Success
mmap_complicated.cSuccessNone0.043737s0.090865s
Success
mmap_file.cSuccessNone0.043045s0.082303s
Success
mmap_shared.cSuccessNone0.041504s0.087190s
Success
mmaptest.cSuccessNone0.039314s0.076756s
Success
mprotect.cSuccessNone0.038177s0.074305s
Success
mprotect_boundary.cSuccessNone0.037502s0.086623s
Success
mprotect_end_region.cSuccessNone0.037973s0.080653s
Success
mprotect_middle_region.cSuccessNone0.037818s0.084655s
Success
mprotect_multiple_times.cSuccessNone0.036898s0.082020s
Success
mprotect_same_value.cSuccessNone0.036307s0.077383s
Success
mprotect_spanning_regions.cSuccessNone0.038125s0.094170s
Success
munmap_adjacent_shm.cSuccessNone0.039839s0.085806s
Success
sbrk.cSuccessNone0.039273s0.075388s
Success
segfault.cSuccessNone0.044261s0.096941s
Success
shm.cSuccessNone0.042890s0.093278s
Success
shmtest.cSuccessNone0.038188s0.079700s
Success
thread_malloc_sequential.cSuccessNone0.044401s0.098848s
Success
vtable.cSuccessNone0.047020s0.091997s
Success
Networking Tests
accept4.cSuccessNone0.047437s0.094751s
Success
dns_resolve_test.cSuccessNone0.041900s0.081686s
Success
dnstest.cSuccessNone0.042779s0.090329s
Success
epoll_edge_triggered.cSuccessNone0.199935s0.421234s
Success
epollcreate1.cSuccessNone0.044533s0.092221s
Success
error_handling_net.cSuccessNone0.049298s0.180662s
Success
getaddrinfo_test.cSuccessNone0.046225s0.118675s
Success
getaddrinfo_unspec.cSuccessNone0.049150s0.106953s
Success
gethostname.cSuccessNone0.037065s0.071438s
Success
getifaddrs.cSuccessNone0.044865s0.092569s
Success
getsockname.cSuccessNone0.048756s0.084866s
Success
getsockopt.cSuccessNone0.046430s0.129405s
Success
ipv6_basic.cSuccessNone0.046816s0.122101s
Success
makepipe.cSuccessNone0.037056s0.069876s
Success
nonblocking_eagain.cSuccessNone0.046594s0.133424s
Success
pipe.cSuccessNone0.045741s0.089145s
Success
pipe2.cSuccessNone0.044566s0.085036s
Success
pipeinput.cSuccessNone0.046730s0.100788s
Success
pipeinput2.cSuccessNone0.045856s0.101362s
Success
pipeonestring.cSuccessNone0.045531s0.101109s
Success
pipepong.cSuccessNone0.044938s0.104414s
Success
pipewrite.cSuccessNone0.040412s0.084534s
Success
poll.cSuccessNone0.044436s0.081637s
Success
recvfrom-sendto.cSuccessNone0.045220s0.090023s
Success
sendmsg_recvmsg_test.cSuccessNone0.044961s0.091153s
Success
serverclient.cSuccessNone0.044131s0.089239s
Success
shutdown.cSuccessNone0.044974s0.086032s
Success
shutdown_fork.cSuccessNone0.043546s0.089790s
Success
simple-select.cSuccessNone0.045134s0.101387s
Success
simple_epoll.cSuccessNone0.044500s0.087908s
Success
socket.cSuccessNone0.041762s0.078232s
Success
socket_cloexec.cSuccessNone0.043466s0.080511s
Success
socket_options_advanced.cSuccessNone0.048533s0.146784s
Success
socketepoll.cSuccessNone0.043536s0.081160s
Success
socketpair.cSuccessNone0.041791s0.087262s
Success
socketselect.cSuccessNone0.043326s0.086253s
Success
udp_send_recv.cSuccessNone0.149778s0.236503s
Success
uds-getsockname.cSuccessNone0.044291s0.081633s
Success
uds-nb-select.cSuccessNone2.050458s2.129187s
Success
uds-serverclient.cSuccessNone0.047600s0.109678s
Success
uds-socketselect.cSuccessNone0.043670s0.085093s
Success
writev_socket.cSuccessNone0.046079s0.115907s
Success
Process Tests
barrier_test.cSuccessNone0.042163s0.083862s
Success
chain_thread.cSuccessNone1.044331s1.090217s
Success
ctor_syscall_test.cSuccessNone0.035880s0.070764s
Success
cxa_atexit_test.cSuccessNone0.040324s0.075493s
Success
execve_shebang.cSuccessNone0.044397s0.080647s
Success
exit.cSuccessNone0.041746s0.075485s
Success
exit_failure.cSuccessNone0.041910s0.082614s
Success
exit_group_thread.cSuccessNone0.045363s0.090030s
Success
flockfile_test.cSuccessNone0.043567s0.092956s
Success
fork2malloc.cSuccessNone0.044781s0.089758s
Success
fork_select.cSuccessNone0.042250s0.094740s
Success
fork_simple.cSuccessNone0.041223s0.082104s
Success
fork_syscall.cSuccessNone0.047229s0.230374s
Success
fork_tls_ctype.cSuccessNone0.045884s0.107651s
Success
forkandopen.cSuccessNone0.045092s0.098874s
Success
forkdup.cSuccessNone0.046384s0.088347s
Success
forkexecuid.cSuccessNone0.040893s0.094412s
Success
forkexecv-arg.cSuccessNone0.042719s0.086169s
Success
forkexecv.cSuccessNone0.041047s0.084780s
Success
forkfiles.cSuccessNone0.043893s0.092288s
Success
forkmalloc.cSuccessNone0.044307s0.085268s
Success
forknodup.cSuccessNone0.044450s0.094370s
Success
function-ptr.cSuccessNone0.039246s0.075992s
Success
getegid_syscall.cSuccessNone0.043197s0.190253s
Success
getgid_syscall.cSuccessNone0.043701s0.193312s
Success
getpid.cSuccessNone0.037660s0.078982s
Success
getpid_syscall.cSuccessNone0.045658s0.214282s
Success
getppid.cSuccessNone0.043316s0.084956s
Success
getppid_syscall.cSuccessNone0.045150s0.162598s
Success
getuid.cSuccessNone0.044581s0.080874s
Success
getuid_syscall.cSuccessNone0.042203s0.123537s
Success
hello-arg.cSuccessNone0.036216s0.071626s
Success
hello.cSuccessNone0.035950s0.068596s
Success
longjmp.cSuccessNone0.037035s0.072394s
Success
mutex.cSuccessNone2.044932s2.089476s
Success
printf_deadlock_smoke.cSuccessNone0.051812s0.109956s
Success
printf_thread_test.cSuccessNone0.042426s0.088932s
Success
sem_forks.cSuccessNone0.046777s0.105238s
Success
setsid.cSuccessNone0.037413s0.071867s
Success
template.cSuccessNone0.042993s0.103258s
Success
test_exec_nofork.cSuccessNone0.041973s0.083392s
Success
test_unlink_open_file.cSuccessNone0.039139s0.073338s
Success
thread-guard.cSuccessNone0.041106s0.083675s
Success
thread-test.cSuccessNone0.038064s0.076246s
Success
thread.cSuccessNone0.038897s0.076110s
Success
thread_cageid_race.cSuccessNone0.040008s0.094890s
Success
tls_test.cSuccessNone0.043206s0.087642s
Success
uname.cSuccessNone0.038215s0.071073s
Success
wait.cSuccessNone2.041139s2.086561s
Success
waitpid_anychild.cSuccessNone0.044662s0.087330s
Success
waitpid_syscall.cSuccessNone1.043253s1.120978s
Success
waitpid_wnohang.cSuccessNone0.045320s0.088848s
Success
Signal Tests
alarm.cSuccessNone7.042902s7.108366s
Success
eintr_fork_signal.cSuccessNone1.044800s1.096520s
Success
kill.cSuccessNone1.042775s1.087891s
Success
setitimer.cSuccessNone7.043639s7.122089s
Success
sigalrm.cSuccessNone2.044486s2.095127s
Success
sigaltstack.cSuccessNone0.045460s0.087500s
Success
sigchld.cSuccessNone1.045361s1.086714s
Success
signal-fork.cSuccessNone4.046123s4.090044s
Success
signal-simple.cSuccessNone0.044288s0.081726s
Success
signal_SIGCHLD.cSuccessNone0.042656s0.088532s
Success
signal_fork.cSuccessNone0.042122s0.091953s
Success
signal_int_ignored.cSuccessNone2.044624s2.088334s
Success
signal_kill_cleanup.cSuccessNone1.042166s1.086321s
Success
signal_procmask.cSuccessNone0.039080s0.079006s
Success
signal_read_interrupt.cSuccessNone0.547156s0.592730s
Success
signal_recursive.cSuccessNone0.039487s0.081366s
Success
signal_sa_mask.cSuccessNone0.039059s0.078132s
Success
signal_select_interrupt.cSuccessNone0.546401s0.596022s
Success
signal_write_interrupt.cSuccessNone1.046185s1.096791s
Success
sigpipe.cSuccessNone1.045014s1.093520s
Success
sigprocmask.cSuccessNone1.043935s1.085358s
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.057687s0.071374s
Success
Memory Tests
mmap-negative1.cSuccessNone0.097513s0.079406s
Success
mmap-negative2.cSuccessNone0.095602s0.087494s
Success
Signal Tests
signal_resethand.cSuccessNone1.043699s1.088209s
Success

@rennergade
Copy link
Copy Markdown
Contributor

@drapl0n add a test here please

@drapl0n
Copy link
Copy Markdown
Contributor Author

drapl0n commented Apr 28, 2026

@drapl0n add a test here please

Failed test: test_fromfd(). It expects EBADF as the return value since fd was closed when ep exited.

drapl0n added 2 commits April 29, 2026 20:54
- replaces unsafe `unwrap()` with error handeling based on Result<>
- returns appropriate error code
@github-actions
Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

Unified Test Report

grate harness

MetricValue
Total12
Success12
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:

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: 3
[Grate|multi-register_grate] Registering getuid handler for cage 2 in grate 1 with fn ptr addr: 4
[Grate|multi-register_grate] Handling function ptr: 3 from cage: 1
[Grate|multi-register_grate] In multi-register_grate 1 handler for cage: 1
[Grate|multi-register_grate] Handling function ptr: 4 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/cpdata_grate.cSuccess
STDOUT:
[Grate|open] intercepts open call: thiscage=1, arg1cage=2
[Grate|open] copied pathname: random
[cage] fd=10

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.053318s4.406367s
Success
thread.cSuccessNone0.046440s4.447196s
Success
tls_test.cSuccessNone0.056611s4.472584s
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 Cases209
Number of Successes209
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.045731s0.135873s
Success
chdir_getcwd.cSuccessNone0.046539s0.094008s
Success
chmod.cSuccessNone0.051973s0.098200s
Success
clock_gettime_highlevel.cSuccessNone0.116594s0.269718s
Success
clock_gettime_simple.cSuccessNone0.041769s0.081001s
Success
cloexec.cSuccessNone0.051695s0.100226s
Success
close.cSuccessNone0.057731s0.106980s
Success
creat_access.cSuccessNone0.049499s0.091961s
Success
doubleclose.cSuccessNone0.041512s0.077700s
Success
dup.cSuccessNone0.044331s0.090855s
Success
dup2.cSuccessNone0.047896s0.089037s
Success
dup3.cSuccessNone0.046727s0.090472s
Success
dupwrite.cSuccessNone0.049334s0.089930s
Success
etc_conf.cSuccessNone0.044470s0.097506s
Success
fchdir.cSuccessNone0.052007s0.100738s
Success
fchmod.cSuccessNone0.051496s0.098755s
Success
fcntl.cSuccessNone0.048648s0.097757s
Success
fdatasync.cSuccessNone0.048541s0.087300s
Success
filetest.cSuccessNone0.049326s0.088204s
Success
filetest1000.cSuccessNone0.056525s0.099699s
Success
flock.cSuccessNone0.058214s0.120515s
Success
fstat.cSuccessNone0.051302s0.098634s
Success
fstatfs.cSuccessNone0.043872s0.084511s
Success
fsync.cSuccessNone0.047848s0.087328s
Success
ftruncate.cSuccessNone0.053759s0.208056s
Success
getcwd.cSuccessNone0.045704s0.084766s
Success
getpgid.cSuccessNone0.043626s0.080682s
Success
getrandom.cSuccessNone0.048691s0.092802s
Success
ioctl.cSuccessNone0.051520s0.094644s
Success
link.cSuccessNone0.052727s0.143287s
Success
locale_test.cSuccessNone0.063767s0.590665s
Success
lseek.cSuccessNone0.053416s0.204317s
Success
lstat.cSuccessNone0.053980s0.108239s
Success
mkdir_rmdir.cSuccessNone0.050601s0.091237s
Success
mkfifo_test.cSuccessNone0.055083s0.126653s
Success
mknod.cSuccessNone0.048640s0.098937s
Success
nocancel_io.cSuccessNone0.053067s0.120051s
Success
open.cSuccessNone0.043383s0.080908s
Success
openat.cSuccessNone0.044486s0.088036s
Success
path_conversion_safety.cSuccessNone0.053253s0.117330s
Success
ppoll.cSuccessNone0.052650s0.100830s
Success
pread_pwrite.cSuccessNone0.046351s0.097757s
Success
preadv_pwritev.cSuccessNone0.051265s0.105593s
Success
printf.cSuccessNone0.041434s0.077712s
Success
prlimit64.cSuccessNone0.042841s0.083658s
Success
read.cSuccessNone0.050184s0.097061s
Success
readbytes.cSuccessNone0.045722s0.085203s
Success
readdir_basic.cSuccessNone0.053121s0.109437s
Success
readlink.cSuccessNone0.050348s0.097015s
Success
readlinkat.cSuccessNone0.050762s0.102248s
Success
readv_writev_test.cSuccessNone0.051100s0.102691s
Success
rename.cSuccessNone0.051642s0.093738s
Success
sc-writev.cSuccessNone0.047660s0.090607s
Success
stat.cSuccessNone0.050287s0.096700s
Success
statfs.cSuccessNone0.043904s0.084836s
Success
symlink.cSuccessNone0.053120s0.124606s
Success
sync_file_range.cSuccessNone0.047678s0.087909s
Success
timespec_time_t_compat.cSuccessNone0.046573s0.085083s
Success
truncate.cSuccessNone0.050941s0.101385s
Success
unlink.cSuccessNone0.052448s0.133826s
Success
unlinkat.cSuccessNone0.051682s0.108153s
Success
write.cSuccessNone0.042797s0.078615s
Success
writeloop.cSuccessNone0.052888s0.089507s
Success
writepartial.cSuccessNone0.051586s0.086298s
Success
writev.cSuccessNone0.050647s0.098044s
Success
Math Tests
math_link_smoke.cSuccessNone0.053644s0.086322s
Success
math_tests.cSuccessNone0.058668s0.105107s
Success
Memory Tests
brk.cSuccessNone0.048187s0.090593s
Success
fork_large_memory.cSuccessNone0.080731s0.328306s
Success
malloc.cSuccessNone0.045669s0.083227s
Success
malloc_large.cSuccessNone0.046894s0.087750s
Success
memcpy.cSuccessNone0.045464s0.082559s
Success
memory_error_test.cSuccessNone0.052674s0.122699s
Success
mmap.cSuccessNone0.042707s0.083799s
Success
mmap_aligned.cSuccessNone0.044701s0.100496s
Success
mmap_complicated.cSuccessNone0.050786s0.100673s
Success
mmap_file.cSuccessNone0.050589s0.093237s
Success
mmap_shared.cSuccessNone0.050250s0.097193s
Success
mmaptest.cSuccessNone0.045742s0.086933s
Success
mprotect.cSuccessNone0.044363s0.083430s
Success
mprotect_boundary.cSuccessNone0.044651s0.099164s
Success
mprotect_end_region.cSuccessNone0.043629s0.089961s
Success
mprotect_middle_region.cSuccessNone0.043465s0.092867s
Success
mprotect_multiple_times.cSuccessNone0.043920s0.092340s
Success
mprotect_same_value.cSuccessNone0.043645s0.089526s
Success
mprotect_spanning_regions.cSuccessNone0.044575s0.105895s
Success
munmap_adjacent_shm.cSuccessNone0.045795s0.097612s
Success
sbrk.cSuccessNone0.045922s0.084096s
Success
segfault.cSuccessNone0.052303s0.109110s
Success
shm.cSuccessNone0.049703s0.104131s
Success
shmtest.cSuccessNone0.044621s0.088269s
Success
thread_malloc_sequential.cSuccessNone0.052146s0.111755s
Success
vtable.cSuccessNone0.055595s0.104428s
Success
Networking Tests
accept4.cSuccessNone0.054336s0.105435s
Success
dns_resolve_test.cSuccessNone0.050722s0.092087s
Success
dnstest.cSuccessNone0.049967s0.101864s
Success
epoll_badfd.cSuccessNone0.044908s0.084152s
Success
epoll_edge_triggered.cSuccessNone0.208088s0.440633s
Success
epollcreate1.cSuccessNone0.052098s0.103515s
Success
error_handling_net.cSuccessNone0.058997s0.202936s
Success
getaddrinfo_test.cSuccessNone0.054017s0.134532s
Success
getaddrinfo_unspec.cSuccessNone0.067872s0.136400s
Success
gethostname.cSuccessNone0.043800s0.080847s
Success
getifaddrs.cSuccessNone0.051771s0.093388s
Success
getsockname.cSuccessNone0.055904s0.096288s
Success
getsockopt.cSuccessNone0.054197s0.147609s
Success
ipv6_basic.cSuccessNone0.055198s0.136425s
Success
makepipe.cSuccessNone0.043207s0.079448s
Success
nonblocking_eagain.cSuccessNone0.055876s0.152805s
Success
pipe.cSuccessNone0.053212s0.102669s
Success
pipe2.cSuccessNone0.051504s0.094441s
Success
pipeinput.cSuccessNone0.053342s0.111034s
Success
pipeinput2.cSuccessNone0.054822s0.112163s
Success
pipeonestring.cSuccessNone0.053302s0.110747s
Success
pipepong.cSuccessNone0.053017s0.112532s
Success
pipewrite.cSuccessNone0.046738s0.094224s
Success
poll.cSuccessNone0.051073s0.090384s
Success
recvfrom-sendto.cSuccessNone0.052331s0.100891s
Success
sendmsg_recvmsg_test.cSuccessNone0.052185s0.102668s
Success
serverclient.cSuccessNone0.050875s0.096756s
Success
shutdown.cSuccessNone0.053370s0.098838s
Success
shutdown_fork.cSuccessNone0.052492s0.101018s
Success
simple-select.cSuccessNone0.053627s0.111886s
Success
simple_epoll.cSuccessNone0.052259s0.097578s
Success
socket.cSuccessNone0.051857s0.089172s
Success
socket_cloexec.cSuccessNone0.049209s0.088743s
Success
socket_options_advanced.cSuccessNone0.057368s0.165986s
Success
socketepoll.cSuccessNone0.050054s0.092351s
Success
socketpair.cSuccessNone0.049802s0.097538s
Success
socketselect.cSuccessNone0.050533s0.096411s
Success
udp_send_recv.cSuccessNone0.158862s0.252722s
Success
uds-getsockname.cSuccessNone0.050728s0.090862s
Success
uds-nb-select.cSuccessNone2.060006s2.146426s
Success
uds-serverclient.cSuccessNone0.054345s0.120196s
Success
uds-socketselect.cSuccessNone0.052282s0.096068s
Success
writev_socket.cSuccessNone0.056627s0.132243s
Success
Process Tests
barrier_test.cSuccessNone0.050003s0.095095s
Success
chain_thread.cSuccessNone1.052812s1.101981s
Success
ctor_syscall_test.cSuccessNone0.041059s0.079591s
Success
cxa_atexit_test.cSuccessNone0.047727s0.085662s
Success
execve_shebang.cSuccessNone0.051897s0.092349s
Success
exit.cSuccessNone0.048590s0.085191s
Success
exit_failure.cSuccessNone0.050043s0.091994s
Success
exit_group_thread.cSuccessNone0.052550s0.101798s
Success
flockfile_test.cSuccessNone0.051394s0.104241s
Success
fork2malloc.cSuccessNone0.052746s0.100525s
Success
fork_select.cSuccessNone0.050528s0.104907s
Success
fork_simple.cSuccessNone0.048948s0.094216s
Success
fork_syscall.cSuccessNone0.056043s0.215765s
Success
fork_tls_ctype.cSuccessNone0.053876s0.119767s
Success
forkandopen.cSuccessNone0.053070s0.110258s
Success
forkdup.cSuccessNone0.055640s0.100336s
Success
forkexecuid.cSuccessNone0.050171s0.106679s
Success
forkexecv-arg.cSuccessNone0.050018s0.096098s
Success
forkexecv.cSuccessNone0.048620s0.094036s
Success
forkfiles.cSuccessNone0.052079s0.105789s
Success
forkmalloc.cSuccessNone0.052307s0.096989s
Success
forknodup.cSuccessNone0.052366s0.106656s
Success
function-ptr.cSuccessNone0.045814s0.085727s
Success
getegid_syscall.cSuccessNone0.051905s0.182825s
Success
getgid_syscall.cSuccessNone0.052106s0.189587s
Success
getpid.cSuccessNone0.044283s0.081290s
Success
getpid_syscall.cSuccessNone0.053904s0.202700s
Success
getppid.cSuccessNone0.051596s0.095026s
Success
getppid_syscall.cSuccessNone0.054624s0.164361s
Success
getuid.cSuccessNone0.051823s0.091719s
Success
getuid_syscall.cSuccessNone0.050243s0.128801s
Success
hello-arg.cSuccessNone0.041905s0.080234s
Success
hello.cSuccessNone0.042559s0.078648s
Success
longjmp.cSuccessNone0.042914s0.083307s
Success
mutex.cSuccessNone2.053991s2.099597s
Success
printf_deadlock_smoke.cSuccessNone0.060483s0.124010s
Success
printf_thread_test.cSuccessNone0.049995s0.100707s
Success
sem_forks.cSuccessNone0.053602s0.108582s
Success
setsid.cSuccessNone0.044223s0.081700s
Success
template.cSuccessNone0.051343s0.112545s
Success
test_exec_nofork.cSuccessNone0.049343s0.093483s
Success
test_unlink_open_file.cSuccessNone0.045905s0.082504s
Success
thread-guard.cSuccessNone0.048912s0.095655s
Success
thread-test.cSuccessNone0.045763s0.088410s
Success
thread.cSuccessNone0.046029s0.086658s
Success
thread_cageid_race.cSuccessNone0.046620s0.108410s
Success
tls_test.cSuccessNone0.063218s0.098955s
Success
uname.cSuccessNone0.044684s0.080882s
Success
wait.cSuccessNone2.048813s2.095386s
Success
waitpid_anychild.cSuccessNone0.054682s0.104900s
Success
waitpid_syscall.cSuccessNone1.051809s1.127010s
Success
waitpid_wnohang.cSuccessNone0.052466s0.097887s
Success
Signal Tests
alarm.cSuccessNone7.050497s7.123014s
Success
eintr_fork_signal.cSuccessNone1.054125s1.108693s
Success
kill.cSuccessNone1.050884s1.098497s
Success
setitimer.cSuccessNone7.051583s7.128086s
Success
sigalrm.cSuccessNone2.051289s2.104793s
Success
sigaltstack.cSuccessNone0.053203s0.101988s
Success
sigchld.cSuccessNone1.051431s1.095265s
Success
signal-fork.cSuccessNone4.053262s4.099670s
Success
signal-simple.cSuccessNone0.052349s0.093506s
Success
signal_SIGCHLD.cSuccessNone0.048699s0.095968s
Success
signal_fork.cSuccessNone0.047827s0.099874s
Success
signal_int_ignored.cSuccessNone2.052066s2.098260s
Success
signal_kill_cleanup.cSuccessNone1.049534s1.095280s
Success
signal_procmask.cSuccessNone0.046614s0.090100s
Success
signal_read_interrupt.cSuccessNone0.555052s0.604186s
Success
signal_recursive.cSuccessNone0.045806s0.093023s
Success
signal_sa_mask.cSuccessNone0.044370s0.087801s
Success
signal_select_interrupt.cSuccessNone0.556127s0.606154s
Success
signal_write_interrupt.cSuccessNone1.053556s1.108693s
Success
sigpipe.cSuccessNone1.053918s1.105042s
Success
sigprocmask.cSuccessNone1.050585s1.095904s
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.042465s0.080711s
Success
Memory Tests
mmap-negative1.cSuccessNone0.133969s0.085380s
Success
mmap-negative2.cSuccessNone0.118331s0.092973s
Success
Signal Tests
signal_resethand.cSuccessNone1.050885s1.095866s
Success

@rennergade rennergade merged commit 4ebfef6 into main Apr 30, 2026
3 checks passed
DanielZ224 pushed a commit that referenced this pull request Apr 30, 2026
* handle error in epoll_wait_syscall()

- replaces unsafe `unwrap()` with error handeling based on Result<>
- returns appropriate error code

* add epoll test that accesses epoll fd after being closed
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