Skip to content

Make fuzz budgets deterministic #118

Description

@suraciii

Problem

The final remote master proof for
884351d1b130ece20ede99c300995677ff202f9b failed in hosted run
31499798759.

Linux stable completed 421,658 executions of FuzzParseGrainMarker, then the
Go fuzz coordinator reported context deadline exceeded at the normal
ten-second -fuzztime boundary. No product assertion failed and no failing
corpus entry was written. The matrix then canceled Linux 1.25, and aggregate CI
failed. macOS and Windows passed.

This is the duration-boundary race tracked in
golang/go#75804 and fixed upstream
by golang/go#79199. The fix is not in
the required Go 1.25 or Go 1.26.5 lanes.

Required Change

Use Go's supported fixed-iteration -fuzztime=Nx mode for the release gate.
Set every budget above both the failed hosted run and the earlier successful
ten-second run:

  • FuzzReadFrame: 1,600,000 iterations.
  • FuzzDecodeRequestContext: 225,000 iterations.
  • FuzzParseGrainMarker: 2,250,000 iterations.

Hard-code the budgets in the release commands so caller-provided Make
variables cannot weaken them. Update the design before the Makefile and release
command contract. Preserve real fuzz failures and record the measured basis.

Do not retry, ignore context deadline exceeded, skip fuzzing, reduce coverage,
or weaken the gate.

Acceptance

  • The release design states the fixed per-target budgets and why they replace
    wall-clock fuzz deadlines.
  • Every budget exceeds the earlier successful execution count.
  • make fuzz runs all three seed corpora and reaches every fixed iteration
    budget.
  • The fail-closed release-command test requires the exact commands and budgets.
  • A real fuzz callback failure remains a command failure.
  • make ci and make external pass locally from a cold test cache on the exact
    candidate commit.
  • The exact PR head and resulting remote master both pass hosted Linux 1.25,
    Linux stable, macOS, Windows, and aggregate CI.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions