Skip to content

Commit b414304

Browse files
wan9chicodex
andcommitted
test(fspy): retry Chromium zygote handshake
Co-authored-by: GPT-5 Codex <codex@openai.com>
1 parent 73077ce commit b414304

2 files changed

Lines changed: 24 additions & 2 deletions

File tree

.github/workflows/fspy-sigsys-research.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ jobs:
141141
observer_pid=$!
142142
143143
set +e
144-
FSPY_MINIMAL_FILTER=true VITEST_CHROMIUM_SANDBOX=true \
144+
VITEST_CHROMIUM_SANDBOX=true \
145145
DEBUG=vitest:browser:playwright,pw:browser \
146146
timeout 120s "$injector" "$vitest" run \
147147
2>&1 | tee "$probe_dir/bridge.log"

research/ptrace-exec-prototype/recursive_injector.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,33 @@ __asm__(
153153
" mov (%r13,%rcx), %rsi\n"
154154
" mov fspy_recursive_slot_rdx(%rip), %rcx\n"
155155
" mov (%r13,%rcx), %rdx\n"
156+
" mov 40(%rsi), %r8\n" /* preserve msghdr.msg_controllen */
157+
" xor %r10d, %r10d\n" /* one zero-length record may be skipped */
158+
".Lfspy_recvmsg_retry:\n"
156159
" mov fspy_recursive_slot_magic(%rip), %r9\n"
157160
" mov $47, %eax\n" /* __NR_recvmsg */
158161
" syscall\n"
159162
" mov %rax, %r15\n"
160163
" test %rax, %rax\n"
161164
" js .Lfspy_recvmsg_error\n"
162-
" jz .Lfspy_recvmsg_eof\n"
165+
" jnz .Lfspy_recvmsg_positive\n"
166+
" test %r10d, %r10d\n"
167+
" jnz .Lfspy_recvmsg_eof\n"
168+
" mov $1, %r10d\n"
169+
" mov %r8, 40(%rsi)\n"
170+
" lea .Lfspy_recvmsg_retry_message(%rip), %rsi\n"
171+
" mov $34, %edx\n"
172+
" mov $2, %edi\n"
173+
" mov $1, %eax\n" /* __NR_write */
174+
" syscall\n"
175+
" mov fspy_recursive_slot_rsi(%rip), %rcx\n"
176+
" mov (%r13,%rcx), %rsi\n"
177+
" mov fspy_recursive_slot_rdi(%rip), %rcx\n"
178+
" mov (%r13,%rcx), %rdi\n"
179+
" mov fspy_recursive_slot_rdx(%rip), %rcx\n"
180+
" mov (%r13,%rcx), %rdx\n"
181+
" jmp .Lfspy_recvmsg_retry\n"
182+
".Lfspy_recvmsg_positive:\n"
163183
" lea .Lfspy_recvmsg_positive_message(%rip), %rsi\n"
164184
" mov $32, %edx\n"
165185
" jmp .Lfspy_recvmsg_log\n"
@@ -390,6 +410,7 @@ __asm__(
390410
".Lfspy_recvmsg_error_message: .ascii \"fspy: recvmsg returned error\\n\"\n"
391411
".Lfspy_recvmsg_eintr_message: .ascii \"fspy: recvmsg returned EINTR\\n\"\n"
392412
".Lfspy_recvmsg_enoent_message: .ascii \"fspy: recvmsg returned ENOENT\\n\"\n"
413+
".Lfspy_recvmsg_retry_message: .ascii \"fspy: recvmsg skipped zero record\\n\"\n"
393414
".balign 8\n"
394415
"fspy_recursive_slot_rax: .quad 0\n"
395416
"fspy_recursive_slot_rdi: .quad 0\n"
@@ -589,6 +610,7 @@ static void install_filter(void)
589610
FILTER_GATEWAY_BLOCK(SYS_execve, FILTER_TAG),
590611
FILTER_GATEWAY_BLOCK(SYS_execveat, FILTER_TAG),
591612
FILTER_GATEWAY_BLOCK(SYS_rt_sigaction, FILTER_TAG),
613+
FILTER_GATEWAY_BLOCK(SYS_rt_sigprocmask, FILTER_TAG),
592614
BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW),
593615
};
594616
const bool minimal = getenv("FSPY_MINIMAL_FILTER") != NULL;

0 commit comments

Comments
 (0)