Skip to content

Commit 2baeb7f

Browse files
committed
docs(security): redact real CVM IPs and hostnames in benchmark docs
Replace real production IPs / hostnames / ssh ports with placeholder addresses across 4 documents in the freebsd_13_to_15_upgrade_spec/ tree: 9.134.214.176 -> 192.168.1.1 (F-Stack server) 9.134.213.67 -> 192.168.1.2 (server hostname-derived) 9.134.211.87 -> 192.168.1.3 (wrk client) VM-213-67-tencentos -> VM-1-2-tencentos VM-211-87-tencentos -> VM-1-3-tencentos ssh port :36000 -> :22 (1 occurrence in 13.0-baseline-cvm-bench-report.md) Files updated (4): - docs/freebsd_13_to_15_upgrade_spec/99-review-report.md (2 occurrences) - docs/freebsd_13_to_15_upgrade_spec/zh_cn/13.0-baseline-cvm-bench-report.md (4 occurrences) - docs/freebsd_13_to_15_upgrade_spec/zh_cn/rib-fix-plan.md (2 occurrences) - docs/freebsd_13_to_15_upgrade_spec/zh_cn/runtime-fix-execution-log.md (7 occurrences) Out of scope (per user decisions): - config.ini in 4 source trees keeps real IP 9.134.214.176 to preserve runnability of the live helloworld DPDK NIC binding (Q_config_ini=B) - Prior commits 62f5400 / 3e33225 retain the original IPs in their content; git history is intentionally not rewritten (Q_git_history=A; commits unpushed and remain local) - Binary perf.data files under /tmp/perf-* are left untouched (sed would corrupt the file format); they are volatile and never enter the repository Volatile redactions (NOT in this commit, applied separately): - 9 text files under /tmp/13baseline-bench/, /tmp/15rfix-bench/, /tmp/perf-15rfix/, /tmp/perf-13baseline/ were sed-redacted in place - codebuddy IDE plan.md was sed-redacted in place Verification: post-redaction grep over all 4 docs returns 0 matches for the original IPs / hostnames / port. Mandatory workspace policies obeyed: zero direct rm/kill/chmod calls; replacement performed via sed -i only. Local commit only; not pushed (per Q_commit=D from prior session).
1 parent 3e33225 commit 2baeb7f

4 files changed

Lines changed: 15 additions & 15 deletions

File tree

docs/freebsd_13_to_15_upgrade_spec/99-review-report.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,8 +455,8 @@ Linked: discovery after R-07~R-11 — Phase 1.4 had byte-copied `tools/compat/in
455455

456456
### 12.19 R-2026-06-01-19: runtime-fix Phase 1+2 closes 4 root causes + 1 defensive (init hang + IP config)
457457

458-
**Linked**: runtime-fix delivers spec 06 §9 TC-01 from "build-stage PASS / runtime known-limitation" to "runtime full PASS" by debugging on a properly-equipped DPDK rig (4096×2MB hugepages + igb_uio + isolated SSH NIC). **Deviation 1**: M5 G-Acceptance was "build-only" because no DPDK rig was available; runtime closure pushed to dedicated runtime-fix milestone. **Deviation 2**: M3/M4 vendor-cp brought in 14.0+ `UMA_USE_DMAP` (renamed from 13.0 `UMA_MD_SMALL_ALLOC`) into amd64/arm64 `vmparam.h` without `#ifndef FSTACK` guard; in user-space DPDK build it triggered UMA infinite-loop allocator; fix wraps the macro with `#ifndef FSTACK`. **Deviation 3**: amd64 `atomic.h` `__storeload_barrier` `_KERNEL` path uses `%gs:OFFSETOF_MONITORBUF` PCPU segment — user-space has no such segment, causing `smr_create()` to SIGSEGV at startup; fix adds `#if defined(_KERNEL) && !defined(FSTACK)`. **Deviation 4**: 14.0+ rt_ifmsg switched from direct callback to `rtsock_callback_p` / `netlink_callback_p` function-pointer tables; M5 minimal-link left them NULL → SIGSEGV on first `if_addmulti`; fix provides `ff_stub_rtbridge_noop` static struct in `ff_stub_14_extra.c`. **Deviation 5**: `lib/Makefile` NET_SRCS missed `route_rtentry.c` (a 14.0+ new file housing 11 rt_alloc/rt_free/rt_is_host/rt_get_family/rt_get_raw_nhop/rt_is_exportable/rt_get_inet[6]_prefix_p{len,mask}/vnet_rtzone_init real impls); M5 ff_stub_14_extra.c then auto-generated 11 wrong-signature stubs that returned NULL/empty, propagating ENOBUFS (errno 55, **not** EOPNOTSUPP — 13.0 spec mis-mapped to Linux errno table) to `ff_veth_setaddr` / `ifa_maintain_loopback_route`; fix adds the file to NET_SRCS + drops the 11 stubs. **Deviation 6**: defensive panic stubs for `vm_page_alloc_noobj{,_domain}` so future regressions surface immediately rather than silently dead-loop. **Result**: 3/3 strict acceptance PASS — `helloworld init success.` + `f-stack-0: inet 9.134.214.176` + `tcp4/tcp6 *.80 LISTEN`; 7 commits queued (runtime-fix #1..#3 + chmod_modify.sh convention + Phase-1 doc + Phase-2 rib-fix + rib-fix doc); kill_process.sh / chmod_modify.sh enforcement conventions promoted to AI memory ids 90098233 / 21626578 (parallel to rm_tmp_file.sh memory 81725399). M5 §6.5 known-limitation TC-01 now resolved — runtime closure full.
458+
**Linked**: runtime-fix delivers spec 06 §9 TC-01 from "build-stage PASS / runtime known-limitation" to "runtime full PASS" by debugging on a properly-equipped DPDK rig (4096×2MB hugepages + igb_uio + isolated SSH NIC). **Deviation 1**: M5 G-Acceptance was "build-only" because no DPDK rig was available; runtime closure pushed to dedicated runtime-fix milestone. **Deviation 2**: M3/M4 vendor-cp brought in 14.0+ `UMA_USE_DMAP` (renamed from 13.0 `UMA_MD_SMALL_ALLOC`) into amd64/arm64 `vmparam.h` without `#ifndef FSTACK` guard; in user-space DPDK build it triggered UMA infinite-loop allocator; fix wraps the macro with `#ifndef FSTACK`. **Deviation 3**: amd64 `atomic.h` `__storeload_barrier` `_KERNEL` path uses `%gs:OFFSETOF_MONITORBUF` PCPU segment — user-space has no such segment, causing `smr_create()` to SIGSEGV at startup; fix adds `#if defined(_KERNEL) && !defined(FSTACK)`. **Deviation 4**: 14.0+ rt_ifmsg switched from direct callback to `rtsock_callback_p` / `netlink_callback_p` function-pointer tables; M5 minimal-link left them NULL → SIGSEGV on first `if_addmulti`; fix provides `ff_stub_rtbridge_noop` static struct in `ff_stub_14_extra.c`. **Deviation 5**: `lib/Makefile` NET_SRCS missed `route_rtentry.c` (a 14.0+ new file housing 11 rt_alloc/rt_free/rt_is_host/rt_get_family/rt_get_raw_nhop/rt_is_exportable/rt_get_inet[6]_prefix_p{len,mask}/vnet_rtzone_init real impls); M5 ff_stub_14_extra.c then auto-generated 11 wrong-signature stubs that returned NULL/empty, propagating ENOBUFS (errno 55, **not** EOPNOTSUPP — 13.0 spec mis-mapped to Linux errno table) to `ff_veth_setaddr` / `ifa_maintain_loopback_route`; fix adds the file to NET_SRCS + drops the 11 stubs. **Deviation 6**: defensive panic stubs for `vm_page_alloc_noobj{,_domain}` so future regressions surface immediately rather than silently dead-loop. **Result**: 3/3 strict acceptance PASS — `helloworld init success.` + `f-stack-0: inet 192.168.1.1` + `tcp4/tcp6 *.80 LISTEN`; 7 commits queued (runtime-fix #1..#3 + chmod_modify.sh convention + Phase-1 doc + Phase-2 rib-fix + rib-fix doc); kill_process.sh / chmod_modify.sh enforcement conventions promoted to AI memory ids 90098233 / 21626578 (parallel to rm_tmp_file.sh memory 81725399). M5 §6.5 known-limitation TC-01 now resolved — runtime closure full.
459459

460460
### 12.20 R-2026-06-02-20: runtime-fix Phase 3 closes badfileops crash + delivers wrk baseline (CVM)
461461

462-
**Linked**: Phase 3 takes the runtime closure from "single curl PASS" to "real cross-machine wrk 7M-request 0-timeout PASS"; verification rig: server 9.134.214.176 (this host, F-Stack) + client f-stack-client 9.134.211.87 (kernel stack) over private 10G-class interconnect. **Deviation 1**: 13.0 baseline kept `badfileops` + 11 `badfo_*` placeholder fileops outside the `#ifndef FSTACK` guard; 15.0 vendor cp widened the guard at `freebsd/kern/kern_descrip.c:5372` to cover this region; M5 minimal-link compensated with `lib/ff_stub_14_extra.c:121` `const struct fileops badfileops = {0};` — single-curl PASS hid the bug because no error path took `_fdrop` on a still-`badfileops` fp. **Deviation 2**: wrk concurrency exposed the issue immediately — `solisten_dequeue` occasional `EAGAIN/EINVAL` → `goto noconnection` → `fdclose(td, nfp, fd)` → `_fdrop(nfp)` → `call *0x38(%rax)` (fileops `fo_close` offset) → `0x0` → SIGSEGV (`ip=0` `error 14` instruction-fetch). gdb on core dump confirmed `fp->f_ops = badfileops` with all 12 ops = NULL vs `socketops` fully populated. **Deviation 3**: surgical fix moves `#ifndef FSTACK` from line 5372 to line 5475 in `kern_descrip.c` (re-including 11 `badfo_*` impls + `badfileops` initializer) + drops the `{0}` stub in `ff_stub_14_extra.c`; minimum diff, no other code paths touched. **Deviation 4**: end-to-end measured baseline (CVM virtio-net + igb_uio + 4096×2MB hugepages + single lcore mask=0x10) — wrk t4 c100 30s = **226,065 req/s** p99 0.93 ms 6.80M reqs 0 timeout; wrk t8 c500 30s = **231,106 req/s** p99 4.18 ms 6.94M reqs 0 timeout; helloworld stable through 3 rounds. **Deviation 5**: IPv6 marked N/A — `config.ini` lacks `addr6/gateway6`; trivial config change to enable, deferred. **Deviation 6**: keepalive verified implicitly via 100-conn × 6.8M reqs reuse + explicitly via wrk `Connection: close` comparable Req/s (helloworld doesn't emit `Connection: close` so wrk re-uses fd in either header). **Note**: numbers are **CVM (cloud VM)** baseline, not bare-metal upper bound; bare-metal baseline left to user follow-up measurement on physical hardware. **Result**: spec 06 §9 TC-01 / §9 TC-{02..09} all PASS at runtime; runtime-fix project (Phase 1 + 2 + 3) full closure; libfstack.a 5.4M / 194 .o (route_rtentry.c added in P2; badfileops re-enabled now is 12 funcs + 1 const var no .o count change in P3); commit history continues runtime-fix sequence.
462+
**Linked**: Phase 3 takes the runtime closure from "single curl PASS" to "real cross-machine wrk 7M-request 0-timeout PASS"; verification rig: server 192.168.1.1 (this host, F-Stack) + client f-stack-client 192.168.1.3 (kernel stack) over private 10G-class interconnect. **Deviation 1**: 13.0 baseline kept `badfileops` + 11 `badfo_*` placeholder fileops outside the `#ifndef FSTACK` guard; 15.0 vendor cp widened the guard at `freebsd/kern/kern_descrip.c:5372` to cover this region; M5 minimal-link compensated with `lib/ff_stub_14_extra.c:121` `const struct fileops badfileops = {0};` — single-curl PASS hid the bug because no error path took `_fdrop` on a still-`badfileops` fp. **Deviation 2**: wrk concurrency exposed the issue immediately — `solisten_dequeue` occasional `EAGAIN/EINVAL` → `goto noconnection` → `fdclose(td, nfp, fd)` → `_fdrop(nfp)` → `call *0x38(%rax)` (fileops `fo_close` offset) → `0x0` → SIGSEGV (`ip=0` `error 14` instruction-fetch). gdb on core dump confirmed `fp->f_ops = badfileops` with all 12 ops = NULL vs `socketops` fully populated. **Deviation 3**: surgical fix moves `#ifndef FSTACK` from line 5372 to line 5475 in `kern_descrip.c` (re-including 11 `badfo_*` impls + `badfileops` initializer) + drops the `{0}` stub in `ff_stub_14_extra.c`; minimum diff, no other code paths touched. **Deviation 4**: end-to-end measured baseline (CVM virtio-net + igb_uio + 4096×2MB hugepages + single lcore mask=0x10) — wrk t4 c100 30s = **226,065 req/s** p99 0.93 ms 6.80M reqs 0 timeout; wrk t8 c500 30s = **231,106 req/s** p99 4.18 ms 6.94M reqs 0 timeout; helloworld stable through 3 rounds. **Deviation 5**: IPv6 marked N/A — `config.ini` lacks `addr6/gateway6`; trivial config change to enable, deferred. **Deviation 6**: keepalive verified implicitly via 100-conn × 6.8M reqs reuse + explicitly via wrk `Connection: close` comparable Req/s (helloworld doesn't emit `Connection: close` so wrk re-uses fd in either header). **Note**: numbers are **CVM (cloud VM)** baseline, not bare-metal upper bound; bare-metal baseline left to user follow-up measurement on physical hardware. **Result**: spec 06 §9 TC-01 / §9 TC-{02..09} all PASS at runtime; runtime-fix project (Phase 1 + 2 + 3) full closure; libfstack.a 5.4M / 194 .o (route_rtentry.c added in P2; badfileops re-enabled now is 12 funcs + 1 const var no .o count change in P3); commit history continues runtime-fix sequence.

docs/freebsd_13_to_15_upgrade_spec/zh_cn/13.0-baseline-cvm-bench-report.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
> **报告时间**:2026-06-03 15:08-15:14(UTC+8)
44
> **测试主机**:腾讯云 CVM(NUMA 1 节点,dpdk virtio_net 驱动 PCI 00:09.0)
5-
> **F-Stack server**9.134.214.176(本机)
6-
> **wrk client**`f-stack-client` 别名(9.134.211.87:36000,root@VM-211-87-tencentos)
5+
> **F-Stack server**192.168.1.1(本机)
6+
> **wrk client**`f-stack-client` 别名(192.168.1.3:22,root@VM-1-3-tencentos)
77
> **关联文档**`runtime-fix-execution-log.md` §12.10(双份落档)
88
99
---
@@ -28,7 +28,7 @@
2828
| dpdk 版本 | 23.11.5(系统已装) | 23.11.5(同份) | ✅ 完全一致(pkg-config --modversion 验证) |
2929
| dpdk lib install 路径 | `/usr/local/lib64/` || ✅ 同份 .so 文件 |
3030
| config.ini | `lcore_mask=10` 单 lcore CPU#4 ||`diff` exit 0 |
31-
| Port 配置 | port0 9.134.214.176/21, idle_sleep=20, tso=0 || ✅ 同 config.ini |
31+
| Port 配置 | port0 192.168.1.1/21, idle_sleep=20, tso=0 || ✅ 同 config.ini |
3232
| example/Makefile | `-L${FF_PATH}/lib -Wl,--whole-archive,-lfstack` ||`diff` exit 0 |
3333
| F-Stack 监听端口 | 80 (htons in main.c) || ✅ 同源 main.c |
3434
| wrk client | f-stack-client `/tmp/wrk/wrk` 同实例 || ✅ 同 ssh 会话连续触发 |
@@ -167,7 +167,7 @@ make: *** No rule to make target 'ff_api.symlist', needed by 'libfstack.a'. Sto
167167
|| 状态 |
168168
|---|---|
169169
| 13.0 baseline helloworld | 已 kill (PID 1735251),hugepages 23 rtemap 已清入 trash `20260603-071317-1737799` |
170-
| 15.0 runtime-fix-done helloworld | **仍后台在跑**(PID 1738072, lcore=4, hugepages 23/4096, port0 9.134.214.176:80) |
170+
| 15.0 runtime-fix-done helloworld | **仍后台在跑**(PID 1738072, lcore=4, hugepages 23/4096, port0 192.168.1.1:80) |
171171
| 当前 helloworld log | `/tmp/15rfix-bench/hello.log` |
172172
| 双 binary 备份 | 见 §3.3,sha256 已记录 |
173173
| 13.0 baseline 树状态 | `/data/workspace/f-stack-13.0-baseline/lib/` 完整编译,可随时切换 |

docs/freebsd_13_to_15_upgrade_spec/zh_cn/rib-fix-plan.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# Rib/rtentry IP Configuration Fix Plan(runtime-fix Phase 2)
22

3-
> 目标:让 `ff_ifconfig` 显示 `f-stack-0``inet 9.134.214.176``ff_netstat -a` 继续显示 `tcp4/tcp6 *.80 LISTEN`
3+
> 目标:让 `ff_ifconfig` 显示 `f-stack-0``inet 192.168.1.1``ff_netstat -a` 继续显示 `tcp4/tcp6 *.80 LISTEN`
44
55
> 文档目的:在已有 runtime-fix 5 commit(UMA / atomic / rtbridge / docs ×2)的基础上,攻克"最后一公里"IP 配置失败问题。
66
77
---
88

99
## 1. 用户原始需求(2026-06-01 20:41)
1010

11-
继续 runtime-fix。已修 3 个根本问题(UMA 死循环 + smr_create %gs + rt_ifmsg NULL deref),helloworld init success ✅,ff_netstat -a tcp4/tcp6 *.80 LISTEN ✅。**剩 1 项严格验收**`ff_ifconfig` 显示 `inet 9.134.214.176`
11+
继续 runtime-fix。已修 3 个根本问题(UMA 死循环 + smr_create %gs + rt_ifmsg NULL deref),helloworld init success ✅,ff_netstat -a tcp4/tcp6 *.80 LISTEN ✅。**剩 1 项严格验收**`ff_ifconfig` 显示 `inet 192.168.1.1`
1212

1313
用户原话:"验收标准为执行 ff_ifconfig 和 ff_netstat -a 可以获取到相关网卡和监听 80 端口信息,暂不需要实际 curl 测试"。
1414

docs/freebsd_13_to_15_upgrade_spec/zh_cn/runtime-fix-execution-log.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ ff_veth_setaddr → socreate(AF_INET) → ifioctl(SIOCAIFADDR)
167167
| 验收点 | 期望 | 实测 | 状态 |
168168
|---|---|---|---|
169169
| 1. helloworld init success(不退化) | `helloworld init success.` + ff_run loop | helloworld.log 含 `helloworld init success.`;进程 PID 141652 持续运行,主线程 S sleeping(健康状态);ifa_maintain_loopback_route / ff_veth_setaddr 错误信息**消失** |**PASS** |
170-
| 2. ff_ifconfig 显示 inet | `f-stack-0``inet 9.134.214.176` | `f-stack-0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> ... inet 9.134.214.176 netmask 0xfffff800 broadcast 9.134.215.255`;bonus:`lo0: inet 127.0.0.1` 也正常出来 |**PASS** |
170+
| 2. ff_ifconfig 显示 inet | `f-stack-0``inet 192.168.1.1` | `f-stack-0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> ... inet 192.168.1.1 netmask 0xfffff800 broadcast 9.134.215.255`;bonus:`lo0: inet 127.0.0.1` 也正常出来 |**PASS** |
171171
| 3. ff_netstat -a 显示 :80 LISTEN | `tcp4 *.80 LISTEN` | `tcp4 0 0 *.80 *.* LISTEN` + `tcp6 0 0 *.80 *.* LISTEN` 两条都出现 |**PASS** |
172172

173173
**runtime-fix 项目总评**:3/3 严格验收 PASS — **完整闭环 ✅**
@@ -207,11 +207,11 @@ ff_veth_setaddr → socreate(AF_INET) → ifioctl(SIOCAIFADDR)
207207

208208
## 12. Phase 3 (端到端联通 + 压测基线 — 含 badfileops 修复) — 2026-06-02 19:50
209209

210-
承接 Phase 2 验收完成,进入端到端跨机验证阶段:本机 9.134.214.176 作 F-Stack server,f-stack-client (9.134.211.87) 作压测客户端,通过 ssh 远程触发 curl / wrk。
210+
承接 Phase 2 验收完成,进入端到端跨机验证阶段:本机 192.168.1.1 作 F-Stack server,f-stack-client (192.168.1.3) 作压测客户端,通过 ssh 远程触发 curl / wrk。
211211

212212
### 12.1 触发场景与现象
213213

214-
-`curl http://9.134.214.176/` ✅ HTTP/1.1 **200 OK**,response header 含 `Server: F-Stack`,body 438 字节完整,RTT ≈ 1.3 ms
214+
-`curl http://192.168.1.1/` ✅ HTTP/1.1 **200 OK**,response header 含 `Server: F-Stack`,body 438 字节完整,RTT ≈ 1.3 ms
215215
- 任意并发(即便 `wrk -t1 -c2`)→ helloworld 立即 **SIGSEGV** 退出
216216
- dmesg:`helloworld[…]: segfault at 0 ip 0x0 sp 0x… error 14` —— `ip=0` + `error 14`(instruction-fetch) = **跳转到 NULL 函数指针**
217217
- helloworld.log 末尾出现 `unknown event: 00000000`(main.c loop() 兜底分支,filter=0 异常 kevent)
@@ -265,8 +265,8 @@ const struct fileops badfileops = {0};
265265
| 项 | 结果 |
266266
|---|---|
267267
| ssh 客户端登录(id_ed25519_fstack) | ✅ 免密 PubkeyAuth |
268-
| `ping 9.134.214.176` (走 kernel virtio NIC) | ✅ 3/3,RTT 0.418 / 0.457 / 0.533 ms |
269-
| `curl http://9.134.214.176/` | ✅ HTTP 200, RTT ≈ 1.3 ms |
268+
| `ping 192.168.1.1` (走 kernel virtio NIC) | ✅ 3/3,RTT 0.418 / 0.457 / 0.533 ms |
269+
| `curl http://192.168.1.1/` | ✅ HTTP 200, RTT ≈ 1.3 ms |
270270
| Response 头 `Server:` | ✅ `F-Stack`(确认走用户态协议栈) |
271271
| 连续 10 次 curl | ✅ 10/10 全 200 |
272272
| `curl http://f-stack2/` (DNS) | ✅ HTTP 200 |
@@ -313,7 +313,7 @@ const struct fileops badfileops = {0};
313313
| 验收项 | 状态 |
314314
|---|---|
315315
| helloworld init success | ✅ |
316-
| `f-stack-0: inet 9.134.214.176` | ✅ |
316+
| `f-stack-0: inet 192.168.1.1` | ✅ |
317317
| `tcp4/tcp6 *.80 LISTEN` | ✅ |
318318
| 跨机 curl HTTP/1.1 200 + `Server: F-Stack` | ✅ |
319319
| 连续 10 次 curl 全 200 | ✅ |
@@ -378,7 +378,7 @@ const struct fileops badfileops = {0};
378378
#### 12.10.7 系统终态(首轮 Step 1-5)
379379
380380
- 13.0 baseline helloworld:已 kill (PID 1735251),hugepages 23 个 rtemap 残留通过 `rm_tmp_file.sh` 清入 trash
381-
- 15.0 runtime-fix-done helloworld:**仍后台在跑**(PID 1738072, lcore=4, hugepages 23/4096, port0 9.134.214.176:80 监听),log: `/tmp/15rfix-bench/hello.log`
381+
- 15.0 runtime-fix-done helloworld:**仍后台在跑**(PID 1738072, lcore=4, hugepages 23/4096, port0 192.168.1.1:80 监听),log: `/tmp/15rfix-bench/hello.log`
382382
- 双 binary 已备份保留,后续切换无需重编(cp 替换 `./example/helloworld` + 重启即可)
383383
- 强制规约遵守:本节全程 `kill_process.sh` × 2、`rm_tmp_file.sh` × 3(rtemap×23 + lib 产物×195 + rtemap×23),零直接 `rm`/`kill`/`chmod` 调用
384384

0 commit comments

Comments
 (0)