smoltcp-fuzz
路径:
components/starry-smoltcp/fuzz类型:模糊测试工作区 / 二进制目标集合 分层:组件层 / 协议栈质量保障工具 版本:0.0.1文档依据:Cargo.toml、fuzz/fuzz_targets/*、fuzz/utils.rs
smoltcp-fuzz 不是协议 栈本体,也不是系统镜像里会链接进去的运行时组件。它是围绕 smoltcp 组织的一组 cargo fuzz / libFuzzer 目标,专门用来把异常输入打到报文解析、repr/emit、TCP 头部健壮性、6LoWPAN 等高风险代码路径上。它的目标是发现 panic、越界、死循环、状态机异常和 round-trip 退化,而不是提供可复用 API。
最需要明确的边界是:smoltcp-fuzz 只是开发期质量保障工具,不参与 ArceOS、StarryOS 或 Axvisor 的运行时装配,也不应被理解成“网络测试应用”。
架构设计
设计定位
Cargo.toml 中的 package.metadata.cargo-fuzz = true 已经明确表明:这是一个 cargo fuzz 工作区,而不是普通应用 crate。它的职责很单一:
- 为
smoltcp提供可持续运行的 fuzz harness - 按高风险输入面拆分出多个独立目标
- 把 fuzz 依赖与根工作区的日常构建隔离开
1.2 独立工作区设计
Cargo.toml 中同时存在:
[workspace] members = ["."]- 多个
[[bin]]fuzz 目标
这说明它刻意把自己从主工作区构建路径中隔离。这样做有两个直接好处:
libfuzzer-sys等依赖不会污染普通cargo build/cargo test- 每个 fuzz target 都能作为独立二进制交给 libFuzzer 驱动
1.3 目标拆分方式
当前共有 5 个 fuzz target:
| 目标 | 主要覆盖面 |
|---|---|
packet_parser | 以太网帧 pretty print / parser 路径 |
tcp_headers | 在 loopback + Interface / SocketSet 环境中定向扰动 TCP 头 |
dhcp_header | DHCP 报文 parse -> repr -> emit round-trip |
ieee802154_header | IEEE 802.15.4 头部 parse / emit |
sixlowpan_packet | 6LoWPAN 及其下游多协议 parse / emit |
这种拆法不是按源码目录划分,而是按“高风险输入面”划分,更符合协议栈 fuzz 的实际需求。