astrid-runtime/astrid · error

FUSE service launch exceeds limit

Error message

FUSE service launch exceeds limit

What it means

Request-size guard in run_public_service: the FUSE provider service reads stdin with a take(MAX_REQUEST_BYTES + 1) limit and found more bytes than MAX_REQUEST_BYTES, meaning the launch request (ServiceLaunch JSON) exceeds the protocol's size cap. This indicates a malformed or hostile request from the host process, so the service refuses to launch rather than parsing oversized input.

Solutions

  1. Reduce the launch request size — check for bloated tokens or payload fields
  2. Fix the parent process that is sending an oversized launch envelope
  3. If legitimately large inputs are needed, raise MAX_REQUEST_BYTES deliberately
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/astrid-storage-provider-fuse/src/main.rs:458 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09). Data as JSON: /api/errors/fa46f880b3fa4115. Report an issue: GitHub.

Appendix: source

Thrown at crates/astrid-storage-provider-fuse/src/main.rs:458

                    .await?,
            )?;
        }
    }
    registry::remove_record(&record.mount_id)?;
    cleanup_mountpoint(&record.mountpoint, record.auto_created_mountpoint)?;
    Ok(StorageProviderSuccessV1::Unmounted {
        mount_id: record.mount_id,
    })
}

async fn run_public_service() -> Result<()> {
    let mut bytes = Vec::new();
    std::io::stdin()
        .lock()
        .take(MAX_REQUEST_BYTES + 1)
        .read_to_end(&mut bytes)?;
    if bytes.len() as u64 > MAX_REQUEST_BYTES {
        bail!("FUSE service launch exceeds limit");
    }
    let launch: ServiceLaunch = serde_json::from_slice(&bytes)?;
    let lease = launch.lease.clone();
    let control_path = registry::control_path(&lease.mount_id)?;
    let listener = bind_control_listener(&control_path)?;
    let mut session = match filesystem::start_session(lease.clone(), &launch.mountpoint) {
        Ok(session) => Some(session),
        Err(error) => {
            let _ = cleanup_service_artifacts(
                &control_path,
                &launch.mountpoint,
                launch.auto_created_mountpoint,
            );
            return Err(error);
        },
    };
    let stderr_sink = std::fs::OpenOptions::new()
        .write(true)

View on GitHub (pinned to affd8760f4)