astrid-runtime/astrid · error
FUSE service control path is not the kernel endpoint
Error message
FUSE service control path is not the kernel endpoint
What it means
After basic path checks, validate_control_path enforces that the control path is exactly resource_path.join("process-control.sock") — the single canonical endpoint the kernel expects. Any other socket location is rejected so the kernel and service agree on where the process-control socket lives.
Solutions
- Set control_path to exactly resource_path.join("process-control.sock") and let the library derive it rather than configuring it manually
- If a custom location was configured, remove that override and use the default endpoint under the lease resource directory
- Check release notes/config schema for version changes to the endpoint convention
Example fix
// before
let control_path = Path::new("/run/astrid/sockets/control.sock");
// after
let control_path = resource_path.join("process-control.sock"); Defensive patterns
Strategy: validation
Validate before calling
let expected = resource_path.join("process-control.sock");
if control_path != expected { /* use the canonical kernel endpoint */ } Prevention
- Never configure a custom control socket name or location
- Always derive control_path from resource_path
- Watch for endpoint-convention changes across library versions
When it happens
Trigger: Calling validate_launch with control_path set to anything other than <resource_path>/process-control.sock — a different filename, a different directory, or a symlinked alias path.
Common situations: Hand-written config pointing at a custom socket name (e.g. control.sock); a custom socket directory configured for convenience; typos or renamed socket conventions after a library version change.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- FUSE service control path is malformed
- FUSE service mountpoint is malformed
- FUSE service mountpoint overlaps the lease resource
- cannot unmount a relative mountpoint
- capsule materialization target is redirected or not a…
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/1b1822264d958e50.
Report an issue: GitHub.
Appendix: source
Thrown at crates/astrid-storage-provider-fuse/src/service.rs:280
if std::fs::read_dir(mountpoint)?.next().is_some() {
bail!("FUSE service mountpoint is not empty");
}
if mountpoint::mountinfo_contains(mountpoint)? {
bail!("FUSE service mountpoint is already mounted");
}
Ok(())
}
fn validate_control_path(control_path: &Path, resource_path: &Path) -> Result<()> {
if !control_path.is_absolute()
|| control_path
.components()
.any(|component| matches!(component, std::path::Component::ParentDir))
{
bail!("FUSE service control path is malformed");
}
if control_path != resource_path.join("process-control.sock") {
bail!("FUSE service control path is not the kernel endpoint");
}
let parent = control_path
.parent()
.context("FUSE service control path has no parent")?;
platform_fs::validate_private_directory(parent)
.context("validate private FUSE control parent")?;
platform_fs::verify_no_redirects(control_path)
.context("reject redirected FUSE control path")?;
if local_transport::endpoint_is_present(control_path)
.context("inspect FUSE service control endpoint")?
{
bail!("FUSE service control endpoint is already present");
}
Ok(())
}
async fn probe_callback(launch: &StorageProviderServiceLaunchV1) -> Result<()> {
let mut stream = local_transport::connect(&launch.lease.callback_path)View on GitHub (pinned to affd8760f4)