Skip to content

copy_handler_table_to_cage: 1. Fix incorrect argument usage 2. Overwrite target cage table.#1113

Open
stupendoussuperpowers wants to merge 3 commits intomainfrom
fix-copy-handler
Open

copy_handler_table_to_cage: 1. Fix incorrect argument usage 2. Overwrite target cage table.#1113
stupendoussuperpowers wants to merge 3 commits intomainfrom
fix-copy-handler

Conversation

@stupendoussuperpowers
Copy link
Copy Markdown
Contributor

@stupendoussuperpowers stupendoussuperpowers commented Apr 25, 2026

Adds 1 fix and 1 change:

Fix:
copy_handler_table_to_cage in 3i mismatched the argument orders in glibc, fixed that, and updated the usage in fork_syscall to match this.

Change (needs discussion if this passes CI):
Right now copy handler table to cage merges source into target cage's handler table, for the fs-tee-grate, it's useful to have a functionality where we completely overwrite the target handler table with that of source's. This essentially let's us rewrite a cage's parent cage as far as the inheritance of handler tables is concerned.

As as example -

tee-grate %{ grateA %} %{ grateB %} target. 
(1)             (2)        (3)       (4)

If these are run linearly, 3 inherits all handlers on 2, if we have the ability to overrwrite handler tables, we can copy 1 into 3 and 3 now for all routing purposes behaves as if it's a direct child of 1.

My questions are:

  1. Was the decision to merge these two tables deliberate, and if so, for which use case?

  2. Does this change break any key assumptions we have about this function?

@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.055015s4.280056s
Success
thread.cSuccessNone0.048964s4.347170s
Success
tls_test.cSuccessNone0.055826s4.385426s
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.049033s0.144547s
Success
chdir_getcwd.cSuccessNone0.050319s0.099506s
Success
chmod.cSuccessNone0.055105s0.104797s
Success
clock_gettime_highlevel.cSuccessNone0.122665s0.301791s
Success
clock_gettime_simple.cSuccessNone0.045970s0.090601s
Success
cloexec.cSuccessNone0.054158s0.108223s
Success
close.cSuccessNone0.062066s0.122252s
Success
creat_access.cSuccessNone0.053251s0.100410s
Success
doubleclose.cSuccessNone0.045866s0.085885s
Success
dup.cSuccessNone0.047871s0.098899s
Success
dup2.cSuccessNone0.051985s0.098906s
Success
dup3.cSuccessNone0.050250s0.097669s
Success
dupwrite.cSuccessNone0.052204s0.095141s
Success
etc_conf.cSuccessNone0.048297s0.103646s
Success
fchdir.cSuccessNone0.054839s0.107260s
Success
fchmod.cSuccessNone0.053976s0.105076s
Success
fcntl.cSuccessNone0.052367s0.106525s
Success
fdatasync.cSuccessNone0.051303s0.093881s
Success
filetest.cSuccessNone0.051860s0.093710s
Success
filetest1000.cSuccessNone0.061976s0.111376s
Success
flock.cSuccessNone0.060022s0.127853s
Success
fstat.cSuccessNone0.054673s0.105896s
Success
fstatfs.cSuccessNone0.048127s0.092830s
Success
fsync.cSuccessNone0.052312s0.093949s
Success
ftruncate.cSuccessNone0.056399s0.209973s
Success
getcwd.cSuccessNone0.049173s0.092248s
Success
getpgid.cSuccessNone0.047346s0.087942s
Success
getrandom.cSuccessNone0.052381s0.100702s
Success
ioctl.cSuccessNone0.054538s0.102210s
Success
link.cSuccessNone0.055815s0.151738s
Success
locale_test.cSuccessNone0.063708s0.556656s
Success
lseek.cSuccessNone0.056437s0.210366s
Success
lstat.cSuccessNone0.056105s0.114177s
Success
mkdir_rmdir.cSuccessNone0.052854s0.097695s
Success
mkfifo_test.cSuccessNone0.057138s0.133695s
Success
mknod.cSuccessNone0.051799s0.105207s
Success
nocancel_io.cSuccessNone0.055746s0.124586s
Success
open.cSuccessNone0.047101s0.088094s
Success
openat.cSuccessNone0.048821s0.096252s
Success
path_conversion_safety.cSuccessNone0.056801s0.123966s
Success
ppoll.cSuccessNone0.055723s0.107640s
Success
pread_pwrite.cSuccessNone0.050100s0.106229s
Success
preadv_pwritev.cSuccessNone0.054297s0.112529s
Success
printf.cSuccessNone0.045051s0.083759s
Success
prlimit64.cSuccessNone0.046629s0.091989s
Success
read.cSuccessNone0.053522s0.104896s
Success
readbytes.cSuccessNone0.049802s0.092931s
Success
readdir_basic.cSuccessNone0.056262s0.115873s
Success
readlink.cSuccessNone0.052784s0.103556s
Success
readlinkat.cSuccessNone0.054403s0.109919s
Success
readv_writev_test.cSuccessNone0.053879s0.109154s
Success
rename.cSuccessNone0.055451s0.101192s
Success
sc-writev.cSuccessNone0.050825s0.097988s
Success
stat.cSuccessNone0.053940s0.103570s
Success
statfs.cSuccessNone0.047872s0.093555s
Success
symlink.cSuccessNone0.055303s0.129357s
Success
sync_file_range.cSuccessNone0.050912s0.094188s
Success
timespec_time_t_compat.cSuccessNone0.050421s0.092354s
Success
truncate.cSuccessNone0.054669s0.108907s
Success
unlink.cSuccessNone0.055408s0.141493s
Success
unlinkat.cSuccessNone0.054802s0.115211s
Success
write.cSuccessNone0.047136s0.086040s
Success
writeloop.cSuccessNone0.055102s0.096189s
Success
writepartial.cSuccessNone0.053128s0.092793s
Success
writev.cSuccessNone0.053953s0.105294s
Success
Math Tests
math_link_smoke.cSuccessNone0.057146s0.092960s
Success
math_tests.cSuccessNone0.060538s0.112259s
Success
Memory Tests
brk.cSuccessNone0.050771s0.096680s
Success
fork_large_memory.cSuccessNone0.081965s0.331920s
Success
malloc.cSuccessNone0.048846s0.088643s
Success
malloc_large.cSuccessNone0.049749s0.093561s
Success
memcpy.cSuccessNone0.048747s0.089737s
Success
memory_error_test.cSuccessNone0.054806s0.127988s
Success
mmap.cSuccessNone0.046359s0.090249s
Success
mmap_aligned.cSuccessNone0.048239s0.106523s
Success
mmap_complicated.cSuccessNone0.053194s0.107617s
Success
mmap_file.cSuccessNone0.053353s0.099553s
Success
mmap_shared.cSuccessNone0.052267s0.102647s
Success
mmaptest.cSuccessNone0.049312s0.094735s
Success
mprotect.cSuccessNone0.047750s0.091380s
Success
mprotect_boundary.cSuccessNone0.048413s0.106844s
Success
mprotect_end_region.cSuccessNone0.047283s0.097569s
Success
mprotect_middle_region.cSuccessNone0.047697s0.100645s
Success
mprotect_multiple_times.cSuccessNone0.047257s0.101110s
Success
mprotect_same_value.cSuccessNone0.046781s0.096074s
Success
mprotect_spanning_regions.cSuccessNone0.048143s0.114128s
Success
munmap_adjacent_shm.cSuccessNone0.049689s0.103843s
Success
sbrk.cSuccessNone0.049404s0.090740s
Success
segfault.cSuccessNone0.054201s0.114135s
Success
shm.cSuccessNone0.052627s0.107737s
Success
shmtest.cSuccessNone0.047781s0.095665s
Success
thread_malloc_sequential.cSuccessNone0.054341s0.118455s
Success
vtable.cSuccessNone0.057499s0.110295s
Success
Networking Tests
accept4.cSuccessNone0.057424s0.112703s
Success
dns_resolve_test.cSuccessNone0.052293s0.099129s
Success
dnstest.cSuccessNone0.053171s0.109149s
Success
epoll_edge_triggered.cSuccessNone0.209223s0.437532s
Success
epollcreate1.cSuccessNone0.054404s0.107496s
Success
error_handling_net.cSuccessNone0.060195s0.207399s
Success
getaddrinfo_test.cSuccessNone0.057064s0.140537s
Success
getaddrinfo_unspec.cSuccessNone0.060700s0.105789s
Success
gethostname.cSuccessNone0.047191s0.087020s
Success
getifaddrs.cSuccessNone0.055283s0.100756s
Success
getsockname.cSuccessNone0.057298s0.102736s
Success
getsockopt.cSuccessNone0.056550s0.152872s
Success
ipv6_basic.cSuccessNone0.057487s0.143266s
Success
makepipe.cSuccessNone0.047225s0.086001s
Success
nonblocking_eagain.cSuccessNone0.057924s0.158631s
Success
pipe.cSuccessNone0.054829s0.107320s
Success
pipe2.cSuccessNone0.054965s0.101271s
Success
pipeinput.cSuccessNone0.056148s0.118313s
Success
pipeinput2.cSuccessNone0.055726s0.117520s
Success
pipeonestring.cSuccessNone0.056293s0.117242s
Success
pipepong.cSuccessNone0.055039s0.118726s
Success
pipewrite.cSuccessNone0.049703s0.100351s
Success
poll.cSuccessNone0.053062s0.095211s
Success
recvfrom-sendto.cSuccessNone0.054759s0.106320s
Success
sendmsg_recvmsg_test.cSuccessNone0.054087s0.108695s
Success
serverclient.cSuccessNone0.054059s0.104536s
Success
shutdown.cSuccessNone0.055975s0.105424s
Success
shutdown_fork.cSuccessNone0.054390s0.107235s
Success
simple-select.cSuccessNone0.055900s0.118169s
Success
simple_epoll.cSuccessNone0.053911s0.102748s
Success
socket.cSuccessNone0.052433s0.096440s
Success
socket_cloexec.cSuccessNone0.052883s0.094912s
Success
socket_options_advanced.cSuccessNone0.058383s0.170064s
Success
socketepoll.cSuccessNone0.053697s0.097844s
Success
socketpair.cSuccessNone0.052368s0.105597s
Success
socketselect.cSuccessNone0.053161s0.104905s
Success
udp_send_recv.cSuccessNone0.160519s0.256656s
Success
uds-getsockname.cSuccessNone0.054005s0.098247s
Success
uds-nb-select.cSuccessNone2.064121s2.149960s
Success
uds-serverclient.cSuccessNone0.057168s0.125937s
Success
uds-socketselect.cSuccessNone0.054468s0.102361s
Success
writev_socket.cSuccessNone0.056997s0.138753s
Success
Process Tests
barrier_test.cSuccessNone0.052792s0.101844s
Success
chain_thread.cSuccessNone1.054820s1.106483s
Success
ctor_syscall_test.cSuccessNone0.045544s0.087308s
Success
cxa_atexit_test.cSuccessNone0.050371s0.091335s
Success
execve_shebang.cSuccessNone0.053493s0.097007s
Success
exit.cSuccessNone0.051785s0.091457s
Success
exit_failure.cSuccessNone0.053106s0.098497s
Success
exit_group_thread.cSuccessNone0.055008s0.106392s
Success
flockfile_test.cSuccessNone0.053525s0.110569s
Success
fork2malloc.cSuccessNone0.054965s0.105872s
Success
fork_select.cSuccessNone0.052907s0.111388s
Success
fork_simple.cSuccessNone0.051252s0.098272s
Success
fork_syscall.cSuccessNone0.058378s0.222078s
Success
fork_tls_ctype.cSuccessNone0.056153s0.125887s
Success
forkandopen.cSuccessNone0.055114s0.116329s
Success
forkdup.cSuccessNone0.056864s0.106130s
Success
forkexecuid.cSuccessNone0.052134s0.112256s
Success
forkexecv-arg.cSuccessNone0.052775s0.101950s
Success
forkexecv.cSuccessNone0.051170s0.101524s
Success
forkfiles.cSuccessNone0.055802s0.109207s
Success
forkmalloc.cSuccessNone0.054416s0.102422s
Success
forknodup.cSuccessNone0.055073s0.110821s
Success
function-ptr.cSuccessNone0.049297s0.090852s
Success
getegid_syscall.cSuccessNone0.054225s0.184928s
Success
getgid_syscall.cSuccessNone0.054681s0.194213s
Success
getpid.cSuccessNone0.047242s0.088158s
Success
getpid_syscall.cSuccessNone0.055294s0.207745s
Success
getppid.cSuccessNone0.054261s0.100813s
Success
getppid_syscall.cSuccessNone0.056602s0.171361s
Success
getuid.cSuccessNone0.053424s0.095928s
Success
getuid_syscall.cSuccessNone0.053636s0.136061s
Success
hello-arg.cSuccessNone0.045651s0.086871s
Success
hello.cSuccessNone0.045867s0.084706s
Success
longjmp.cSuccessNone0.046182s0.090193s
Success
mutex.cSuccessNone2.056571s2.104142s
Success
printf_deadlock_smoke.cSuccessNone0.061032s0.128981s
Success
printf_thread_test.cSuccessNone0.052405s0.107648s
Success
sem_forks.cSuccessNone0.055955s0.113691s
Success
setsid.cSuccessNone0.047148s0.086974s
Success
template.cSuccessNone0.053640s0.119021s
Success
test_exec_nofork.cSuccessNone0.052903s0.100145s
Success
test_unlink_open_file.cSuccessNone0.050188s0.089189s
Success
thread-guard.cSuccessNone0.051237s0.101386s
Success
thread-test.cSuccessNone0.049065s0.093117s
Success
thread.cSuccessNone0.049449s0.092474s
Success
thread_cageid_race.cSuccessNone0.049707s0.113595s
Success
tls_test.cSuccessNone0.052213s0.103574s
Success
uname.cSuccessNone0.047245s0.087473s
Success
wait.cSuccessNone2.051426s2.101651s
Success
waitpid_anychild.cSuccessNone0.054826s0.101338s
Success
waitpid_syscall.cSuccessNone1.054168s1.130874s
Success
waitpid_wnohang.cSuccessNone0.054680s0.103146s
Success
Signal Tests
alarm.cSuccessNone7.052502s7.129516s
Success
eintr_fork_signal.cSuccessNone1.055423s1.113000s
Success
kill.cSuccessNone1.053492s1.103378s
Success
setitimer.cSuccessNone7.053776s7.127727s
Success
sigalrm.cSuccessNone2.053475s2.109241s
Success
sigaltstack.cSuccessNone0.055176s0.106992s
Success
sigchld.cSuccessNone1.055279s1.101310s
Success
signal-fork.cSuccessNone4.055211s4.104666s
Success
signal-simple.cSuccessNone0.055082s0.098219s
Success
signal_SIGCHLD.cSuccessNone0.052266s0.103681s
Success
signal_fork.cSuccessNone0.050923s0.105293s
Success
signal_int_ignored.cSuccessNone2.054240s2.103330s
Success
signal_kill_cleanup.cSuccessNone1.051554s1.102539s
Success
signal_procmask.cSuccessNone0.049379s0.096985s
Success
signal_read_interrupt.cSuccessNone0.556483s0.610277s
Success
signal_recursive.cSuccessNone0.048872s0.100763s
Success
signal_sa_mask.cSuccessNone0.048600s0.094437s
Success
signal_select_interrupt.cSuccessNone0.556985s0.611751s
Success
signal_write_interrupt.cSuccessNone1.055993s1.112041s
Success
sigpipe.cSuccessNone1.055632s1.109996s
Success
sigprocmask.cSuccessNone1.053015s1.101199s
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.045992s0.087434s
Success
Memory Tests
mmap-negative1.cSuccessNone0.149759s0.092257s
Success
mmap-negative2.cSuccessNone0.123760s0.097055s
Success
Signal Tests
signal_resethand.cSuccessNone1.052750s1.101412s
Success

@stupendoussuperpowers
Copy link
Copy Markdown
Contributor Author

CI tests pass on this so not a breaking change, we should discuss whether this change is acceptable since the fs-tee-grate relies on this.

Copy link
Copy Markdown
Member

@Yaxuan-w Yaxuan-w left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change looks good to me. Can you also put a unit test for this?

@stupendoussuperpowers
Copy link
Copy Markdown
Contributor Author

The change looks good to me. Can you also put a unit test for this?

What kind of test should I add? A grate test?

@Yaxuan-w
Copy link
Copy Markdown
Member

What kind of test should I add? A grate test?

Yes.

@github-actions
Copy link
Copy Markdown
Contributor

End-to-End Test Report

Test Preview

Unified Test Report

grate harness

MetricValue
Total13
Success13
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/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/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.051877s4.325772s
Success
thread.cSuccessNone0.045112s4.414330s
Success
tls_test.cSuccessNone0.051810s4.410550s
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.045389s0.135558s
Success
chdir_getcwd.cSuccessNone0.047336s0.094563s
Success
chmod.cSuccessNone0.051612s0.098469s
Success
clock_gettime_highlevel.cSuccessNone0.116760s0.274538s
Success
clock_gettime_simple.cSuccessNone0.041024s0.082500s
Success
cloexec.cSuccessNone0.051603s0.104772s
Success
close.cSuccessNone0.057705s0.114766s
Success
creat_access.cSuccessNone0.049173s0.093793s
Success
doubleclose.cSuccessNone0.041985s0.079414s
Success
dup.cSuccessNone0.041831s0.091561s
Success
dup2.cSuccessNone0.048107s0.091027s
Success
dup3.cSuccessNone0.046445s0.091662s
Success
dupwrite.cSuccessNone0.049520s0.089596s
Success
etc_conf.cSuccessNone0.043917s0.097160s
Success
fchdir.cSuccessNone0.051618s0.101332s
Success
fchmod.cSuccessNone0.051191s0.100641s
Success
fcntl.cSuccessNone0.048316s0.099852s
Success
fdatasync.cSuccessNone0.048404s0.088289s
Success
filetest.cSuccessNone0.050244s0.088866s
Success
filetest1000.cSuccessNone0.055891s0.102792s
Success
flock.cSuccessNone0.057849s0.123120s
Success
fstat.cSuccessNone0.051219s0.099240s
Success
fstatfs.cSuccessNone0.043200s0.084937s
Success
fsync.cSuccessNone0.048607s0.088796s
Success
ftruncate.cSuccessNone0.053148s0.210098s
Success
getcwd.cSuccessNone0.047519s0.087354s
Success
getpgid.cSuccessNone0.042763s0.080803s
Success
getrandom.cSuccessNone0.048453s0.093678s
Success
ioctl.cSuccessNone0.051412s0.096754s
Success
link.cSuccessNone0.052680s0.142746s
Success
locale_test.cSuccessNone0.062573s0.598193s
Success
lseek.cSuccessNone0.053388s0.206351s
Success
lstat.cSuccessNone0.052810s0.108862s
Success
mkdir_rmdir.cSuccessNone0.049564s0.093236s
Success
mkfifo_test.cSuccessNone0.054979s0.128784s
Success
mknod.cSuccessNone0.047947s0.099730s
Success
nocancel_io.cSuccessNone0.052625s0.118093s
Success
open.cSuccessNone0.043613s0.083643s
Success
openat.cSuccessNone0.043946s0.088702s
Success
path_conversion_safety.cSuccessNone0.053894s0.118296s
Success
ppoll.cSuccessNone0.053395s0.103332s
Success
pread_pwrite.cSuccessNone0.046725s0.100310s
Success
preadv_pwritev.cSuccessNone0.051561s0.107355s
Success
printf.cSuccessNone0.041401s0.077682s
Success
prlimit64.cSuccessNone0.042191s0.084083s
Success
read.cSuccessNone0.049937s0.098210s
Success
readbytes.cSuccessNone0.045614s0.086304s
Success
readdir_basic.cSuccessNone0.052546s0.109938s
Success
readlink.cSuccessNone0.048992s0.097401s
Success
readlinkat.cSuccessNone0.051012s0.103417s
Success
readv_writev_test.cSuccessNone0.050822s0.102228s
Success
rename.cSuccessNone0.052207s0.094475s
Success
sc-writev.cSuccessNone0.047037s0.091371s
Success
stat.cSuccessNone0.050399s0.097760s
Success
statfs.cSuccessNone0.043588s0.086823s
Success
symlink.cSuccessNone0.052434s0.122893s
Success
sync_file_range.cSuccessNone0.047123s0.090203s
Success
timespec_time_t_compat.cSuccessNone0.047593s0.088185s
Success
truncate.cSuccessNone0.050907s0.104322s
Success
unlink.cSuccessNone0.052499s0.136317s
Success
unlinkat.cSuccessNone0.051092s0.109095s
Success
write.cSuccessNone0.042653s0.079812s
Success
writeloop.cSuccessNone0.052366s0.090040s
Success
writepartial.cSuccessNone0.050318s0.087871s
Success
writev.cSuccessNone0.050367s0.098289s
Success
Math Tests
math_link_smoke.cSuccessNone0.052882s0.088310s
Success
math_tests.cSuccessNone0.056995s0.106534s
Success
Memory Tests
brk.cSuccessNone0.046778s0.088976s
Success
fork_large_memory.cSuccessNone0.078549s0.323004s
Success
malloc.cSuccessNone0.044747s0.081640s
Success
malloc_large.cSuccessNone0.045522s0.086481s
Success
memcpy.cSuccessNone0.044131s0.083475s
Success
memory_error_test.cSuccessNone0.050933s0.120809s
Success
mmap.cSuccessNone0.041909s0.082296s
Success
mmap_aligned.cSuccessNone0.043092s0.098305s
Success
mmap_complicated.cSuccessNone0.049819s0.099951s
Success
mmap_file.cSuccessNone0.049067s0.093173s
Success
mmap_shared.cSuccessNone0.048382s0.095656s
Success
mmaptest.cSuccessNone0.044589s0.087173s
Success
mprotect.cSuccessNone0.043686s0.084539s
Success
mprotect_boundary.cSuccessNone0.043494s0.098544s
Success
mprotect_end_region.cSuccessNone0.042575s0.089236s
Success
mprotect_middle_region.cSuccessNone0.042382s0.093140s
Success
mprotect_multiple_times.cSuccessNone0.042725s0.091439s
Success
mprotect_same_value.cSuccessNone0.042133s0.088054s
Success
mprotect_spanning_regions.cSuccessNone0.043583s0.105449s
Success
munmap_adjacent_shm.cSuccessNone0.045353s0.097744s
Success
sbrk.cSuccessNone0.044555s0.083458s
Success
segfault.cSuccessNone0.050683s0.106581s
Success
shm.cSuccessNone0.049023s0.101303s
Success
shmtest.cSuccessNone0.043378s0.088393s
Success
thread_malloc_sequential.cSuccessNone0.051342s0.110197s
Success
vtable.cSuccessNone0.054713s0.104074s
Success
Networking Tests
accept4.cSuccessNone0.054761s0.106107s
Success
dns_resolve_test.cSuccessNone0.048850s0.092741s
Success
dnstest.cSuccessNone0.048849s0.101384s
Success
epoll_edge_triggered.cSuccessNone0.207753s0.436492s
Success
epollcreate1.cSuccessNone0.051865s0.102782s
Success
error_handling_net.cSuccessNone0.057787s0.203285s
Success
getaddrinfo_test.cSuccessNone0.052629s0.134194s
Success
getaddrinfo_unspec.cSuccessNone0.050005s0.117308s
Success
gethostname.cSuccessNone0.045173s0.083326s
Success
getifaddrs.cSuccessNone0.051455s0.095494s
Success
getsockname.cSuccessNone0.054509s0.096354s
Success
getsockopt.cSuccessNone0.053884s0.149529s
Success
ipv6_basic.cSuccessNone0.055537s0.135105s
Success
makepipe.cSuccessNone0.042948s0.080514s
Success
nonblocking_eagain.cSuccessNone0.054739s0.151449s
Success
pipe.cSuccessNone0.053561s0.102445s
Success
pipe2.cSuccessNone0.051220s0.094434s
Success
pipeinput.cSuccessNone0.053128s0.112066s
Success
pipeinput2.cSuccessNone0.053763s0.112792s
Success
pipeonestring.cSuccessNone0.052973s0.112874s
Success
pipepong.cSuccessNone0.053568s0.113590s
Success
pipewrite.cSuccessNone0.046337s0.094166s
Success
poll.cSuccessNone0.050793s0.090609s
Success
recvfrom-sendto.cSuccessNone0.054739s0.100889s
Success
sendmsg_recvmsg_test.cSuccessNone0.050980s0.102926s
Success
serverclient.cSuccessNone0.050548s0.097879s
Success
shutdown.cSuccessNone0.052613s0.099395s
Success
shutdown_fork.cSuccessNone0.050593s0.101500s
Success
simple-select.cSuccessNone0.052391s0.112349s
Success
simple_epoll.cSuccessNone0.050607s0.097246s
Success
socket.cSuccessNone0.048597s0.089509s
Success
socket_cloexec.cSuccessNone0.049159s0.090782s
Success
socket_options_advanced.cSuccessNone0.056182s0.166025s
Success
socketepoll.cSuccessNone0.048901s0.091443s
Success
socketpair.cSuccessNone0.048263s0.096812s
Success
socketselect.cSuccessNone0.049568s0.097477s
Success
udp_send_recv.cSuccessNone0.157864s0.254709s
Success
uds-getsockname.cSuccessNone0.050792s0.092482s
Success
uds-nb-select.cSuccessNone2.059271s2.144048s
Success
uds-serverclient.cSuccessNone0.054464s0.121398s
Success
uds-socketselect.cSuccessNone0.050809s0.097575s
Success
writev_socket.cSuccessNone0.053343s0.130874s
Success
Process Tests
barrier_test.cSuccessNone0.048930s0.097102s
Success
chain_thread.cSuccessNone1.051199s1.100501s
Success
ctor_syscall_test.cSuccessNone0.040460s0.079979s
Success
cxa_atexit_test.cSuccessNone0.045797s0.085596s
Success
execve_shebang.cSuccessNone0.050223s0.092238s
Success
exit.cSuccessNone0.048061s0.086056s
Success
exit_failure.cSuccessNone0.049196s0.091991s
Success
exit_group_thread.cSuccessNone0.051665s0.101631s
Success
flockfile_test.cSuccessNone0.050874s0.104015s
Success
fork2malloc.cSuccessNone0.050688s0.100540s
Success
fork_select.cSuccessNone0.049389s0.104704s
Success
fork_simple.cSuccessNone0.048796s0.092757s
Success
fork_syscall.cSuccessNone0.054346s0.216818s
Success
fork_tls_ctype.cSuccessNone0.052297s0.119717s
Success
forkandopen.cSuccessNone0.051827s0.110316s
Success
forkdup.cSuccessNone0.053916s0.101460s
Success
forkexecuid.cSuccessNone0.048895s0.106170s
Success
forkexecv-arg.cSuccessNone0.048992s0.095604s
Success
forkexecv.cSuccessNone0.048415s0.094524s
Success
forkfiles.cSuccessNone0.050959s0.104423s
Success
forkmalloc.cSuccessNone0.050872s0.096042s
Success
forknodup.cSuccessNone0.051354s0.105085s
Success
function-ptr.cSuccessNone0.044686s0.083990s
Success
getegid_syscall.cSuccessNone0.051091s0.180015s
Success
getgid_syscall.cSuccessNone0.051159s0.185829s
Success
getpid.cSuccessNone0.042696s0.081787s
Success
getpid_syscall.cSuccessNone0.052388s0.200211s
Success
getppid.cSuccessNone0.050035s0.095167s
Success
getppid_syscall.cSuccessNone0.053452s0.163299s
Success
getuid.cSuccessNone0.050839s0.091757s
Success
getuid_syscall.cSuccessNone0.049444s0.127782s
Success
hello-arg.cSuccessNone0.040846s0.080537s
Success
hello.cSuccessNone0.040224s0.076724s
Success
longjmp.cSuccessNone0.041878s0.082449s
Success
mutex.cSuccessNone2.053913s2.099212s
Success
printf_deadlock_smoke.cSuccessNone0.059648s0.124153s
Success
printf_thread_test.cSuccessNone0.048664s0.100291s
Success
sem_forks.cSuccessNone0.052439s0.107370s
Success
setsid.cSuccessNone0.044106s0.080903s
Success
template.cSuccessNone0.050527s0.112229s
Success
test_exec_nofork.cSuccessNone0.048722s0.092510s
Success
test_unlink_open_file.cSuccessNone0.044702s0.083469s
Success
thread-guard.cSuccessNone0.048340s0.094892s
Success
thread-test.cSuccessNone0.046527s0.088205s
Success
thread.cSuccessNone0.045849s0.086625s
Success
thread_cageid_race.cSuccessNone0.046085s0.107199s
Success
tls_test.cSuccessNone0.048113s0.096858s
Success
uname.cSuccessNone0.043167s0.080104s
Success
wait.cSuccessNone2.047249s2.095757s
Success
waitpid_anychild.cSuccessNone0.051462s0.096521s
Success
waitpid_syscall.cSuccessNone1.050331s1.124973s
Success
waitpid_wnohang.cSuccessNone0.051406s0.096905s
Success
Signal Tests
alarm.cSuccessNone7.049737s7.126233s
Success
eintr_fork_signal.cSuccessNone1.052311s1.107959s
Success
kill.cSuccessNone1.049859s1.098793s
Success
setitimer.cSuccessNone7.050066s7.123917s
Success
sigalrm.cSuccessNone2.050697s2.103167s
Success
sigaltstack.cSuccessNone0.051905s0.100838s
Success
sigchld.cSuccessNone1.051227s1.099001s
Success
signal-fork.cSuccessNone4.051445s4.098744s
Success
signal-simple.cSuccessNone0.051123s0.092537s
Success
signal_SIGCHLD.cSuccessNone0.048447s0.097626s
Success
signal_fork.cSuccessNone0.047717s0.097494s
Success
signal_int_ignored.cSuccessNone2.050418s2.096428s
Success
signal_kill_cleanup.cSuccessNone1.048212s1.094571s
Success
signal_procmask.cSuccessNone0.045168s0.090512s
Success
signal_read_interrupt.cSuccessNone0.554231s0.604811s
Success
signal_recursive.cSuccessNone0.045166s0.092035s
Success
signal_sa_mask.cSuccessNone0.044352s0.086429s
Success
signal_select_interrupt.cSuccessNone0.554451s0.607193s
Success
signal_write_interrupt.cSuccessNone1.052127s1.107258s
Success
sigpipe.cSuccessNone1.052860s1.103848s
Success
sigprocmask.cSuccessNone1.049405s1.095473s
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.041992s0.081176s
Success
Memory Tests
mmap-negative1.cSuccessNone0.126910s0.094291s
Success
mmap-negative2.cSuccessNone0.113219s0.096788s
Success
Signal Tests
signal_resethand.cSuccessNone1.049878s1.095253s
Success

@stupendoussuperpowers
Copy link
Copy Markdown
Contributor Author

Added the test, re-requesting review.

Copy link
Copy Markdown
Contributor

@rennergade rennergade left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this works. Want to get @JustinCappos approval on this before merge.

@JustinCappos
Copy link
Copy Markdown
Member

My questions are:

  1. Was the decision to merge these two tables deliberate, and if so, for which use case?
  2. Does this change break any key assumptions we have about this function?

The functionality of copying a handler table wasn't well thought out. I was thinking mostly of needing to support fork and perhaps some filter grates. I wanted to make something simple and hard to mess up.

Perhaps something which takes a starting call number and ending call number to map makes sense? Maybe this also needs to apply a change so that all system call number offsets start at their location - the starting call number + some provided argument. (Obviously integer over/underflows need to be carefully checked here.)

As for deleting or merging into the existing table, this also could be an option.

This all is starting to seem a bit more complex. So we need really clear testing if we go this route.

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.

4 participants