{"record":{"id":"1b1822264d958e50","repo":"astrid-runtime/astrid","slug":"fuse-service-control-path-is-not-the-kernel-endpoi","errorCode":null,"errorMessage":"FUSE service control path is not the kernel endpoint","messagePattern":"FUSE service control path is not the kernel endpoint","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-storage-provider-fuse/src/service.rs","lineNumber":280,"sourceCode":"    if std::fs::read_dir(mountpoint)?.next().is_some() {\n        bail!(\"FUSE service mountpoint is not empty\");\n    }\n    if mountpoint::mountinfo_contains(mountpoint)? {\n        bail!(\"FUSE service mountpoint is already mounted\");\n    }\n    Ok(())\n}\n\nfn validate_control_path(control_path: &Path, resource_path: &Path) -> Result<()> {\n    if !control_path.is_absolute()\n        || control_path\n            .components()\n            .any(|component| matches!(component, std::path::Component::ParentDir))\n    {\n        bail!(\"FUSE service control path is malformed\");\n    }\n    if control_path != resource_path.join(\"process-control.sock\") {\n        bail!(\"FUSE service control path is not the kernel endpoint\");\n    }\n    let parent = control_path\n        .parent()\n        .context(\"FUSE service control path has no parent\")?;\n    platform_fs::validate_private_directory(parent)\n        .context(\"validate private FUSE control parent\")?;\n    platform_fs::verify_no_redirects(control_path)\n        .context(\"reject redirected FUSE control path\")?;\n    if local_transport::endpoint_is_present(control_path)\n        .context(\"inspect FUSE service control endpoint\")?\n    {\n        bail!(\"FUSE service control endpoint is already present\");\n    }\n    Ok(())\n}\n\nasync fn probe_callback(launch: &StorageProviderServiceLaunchV1) -> Result<()> {\n    let mut stream = local_transport::connect(&launch.lease.callback_path)","sourceCodeStart":262,"sourceCodeEnd":298,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-storage-provider-fuse/src/service.rs#L262-L298","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nlet control_path = Path::new(\"/run/astrid/sockets/control.sock\");\n\n// after\nlet control_path = resource_path.join(\"process-control.sock\");","handlingStrategy":"validation","validationCode":"let expected = resource_path.join(\"process-control.sock\");\nif control_path != expected { /* use the canonical kernel endpoint */ }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never configure a custom control socket name or location","Always derive control_path from resource_path","Watch for endpoint-convention changes across library versions"],"tags":["fuse","control-socket","path-validation","kernel-endpoint"],"backgroundTag":"invalid-config-value","analyzedSha":"affd8760f44190dbdfbec23403f4c4b642c33112","analyzedAt":"2026-09-09T21:28:12.402Z","contentChangedAt":"2026-09-09T21:28:12.402Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}