test(fuzz): rsyncd.conf, auth response, incremental flist fuzz targets (FCV-3 followups)#4444
Merged
Merged
Conversation
7b85cea to
63b7118
Compare
…s (FCV-3 followups)
63b7118 to
8e7cc64
Compare
This was referenced May 18, 2026
oferchen
added a commit
that referenced
this pull request
May 18, 2026
…#2449) (#4492) Audit confirms the rsyncd.conf parser has no public line / key-value sub-parser in either the standalone `daemon::rsyncd_config` API or the daemon runtime `daemon::sections::config_parsing` pathway. All per-directive, per-bool, and per-list helpers are private to their parser modules; only the whole-file entry points (`RsyncdConfig::parse`, `parse_config_modules`) are reachable. The existing `fuzz/fuzz_targets/rsyncd_conf.rs` target landed in PR #4444 already exercises every line-level branch through the whole-file driver, so FCV-16 is closed with no production-code change.
oferchen
added a commit
that referenced
this pull request
May 18, 2026
…#2449) (#4492) Audit confirms the rsyncd.conf parser has no public line / key-value sub-parser in either the standalone `daemon::rsyncd_config` API or the daemon runtime `daemon::sections::config_parsing` pathway. All per-directive, per-bool, and per-list helpers are private to their parser modules; only the whole-file entry points (`RsyncdConfig::parse`, `parse_config_modules`) are reachable. The existing `fuzz/fuzz_targets/rsyncd_conf.rs` target landed in PR #4444 already exercises every line-level branch through the whole-file driver, so FCV-16 is closed with no production-code change.
oferchen
added a commit
that referenced
this pull request
May 18, 2026
…#2449) (#4492) Audit confirms the rsyncd.conf parser has no public line / key-value sub-parser in either the standalone `daemon::rsyncd_config` API or the daemon runtime `daemon::sections::config_parsing` pathway. All per-directive, per-bool, and per-list helpers are private to their parser modules; only the whole-file entry points (`RsyncdConfig::parse`, `parse_config_modules`) are reachable. The existing `fuzz/fuzz_targets/rsyncd_conf.rs` target landed in PR #4444 already exercises every line-level branch through the whole-file driver, so FCV-16 is closed with no production-code change.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
rsyncd_conf(pre-auth admin attack surface) drivesRsyncdConfig::parse.auth_response(pre-auth) drives bothverify_client_response(challenge-reply verifier) andSecretsFile::parse(admin secrets file). A one-byte selector splits the corpus between the two surfaces.incremental_flist(post-auth, pre-transfer) drivesStreamingFileList::next_readyplusIncrementalFileList::finalizeunder both legacy (protocol 28) and INC_RECURSE (protocol 30 +CF_INC_RECURSE) wire modes.fuzz/corpus/<target>/seed_basic.daemonintofuzz/Cargo.tomlas a new path dep (default features off).cargo fmtover the crate.API substitutions made
The audit prompt sketched the entry points as
daemon::config::parse_conf,daemon::auth::verify_response, andprotocol::flist::incremental::parse_segment. The actual public APIs differ slightly; nearest analogs used:daemon::config::parse_conf(&str)daemon::rsyncd_config::RsyncdConfig::parse(input: &str, path: &Path)daemon::auth::verify_response(&[u8])daemon::auth::verify_client_response(secret: &[u8], challenge: &str, response: &str, protocol_version: Option<u8>)plusdaemon::auth::SecretsFile::parse(&str)protocol::flist::incremental::parse_segment(&[u8])protocol::flist::StreamingFileList::new(FileListReader, Cursor<&[u8]>).next_ready()plusIncrementalFileList::finalize()The goal is bytes-in fuzz coverage of the named attack surface, which is preserved.
Test plan
cargo fmtclean on the three new files (verified via targetedrustfmt).[[bin]]entries infuzz/Cargo.toml.cargo +nightly fuzz build <target>(CI-only).fuzz/corpus/{rsyncd_conf,auth_response,incremental_flist}/seed_basic.