JuliusBrussee/caveman · error
native session key sync: %w
Error message
native session key sync: %w
What it means
After a successful write of the session key, file.Sync (fsync) failed before the key was acknowledged. Sync guarantees the key survives a crash before callers rely on it for HMAC session markers; on failure the file is removed so no half-durable key is trusted. Common on filesystems with broken fsync (some network/overlay mounts) or failing disks.
Source
Thrown at proxy/internal/nativeruntime/marker.go:46
if err := os.Chmod(dir, 0o700); err != nil {
return nil, fmt.Errorf("native session key chmod dir: %w", err)
}
path := filepath.Join(dir, "session.key")
key := make([]byte, sessionKeyBytes)
if _, err := rand.Read(key); err != nil {
return nil, fmt.Errorf("native session key random: %w", err)
}
file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0o600)
if err == nil {
if _, writeErr := file.Write(key); writeErr != nil {
_ = file.Close()
_ = os.Remove(path)
return nil, fmt.Errorf("native session key write: %w", writeErr)
}
if syncErr := file.Sync(); syncErr != nil {
_ = file.Close()
_ = os.Remove(path)
return nil, fmt.Errorf("native session key sync: %w", syncErr)
}
if closeErr := file.Close(); closeErr != nil {
return nil, fmt.Errorf("native session key close: %w", closeErr)
}
return key, nil
}
if !errors.Is(err, os.ErrExist) {
return nil, fmt.Errorf("native session key create: %w", err)
}
key, err = os.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("native session key read: %w", err)
}
if len(key) != sessionKeyBytes {
return nil, fmt.Errorf("native session key length = %d, want %d", len(key), sessionKeyBytes)
}
if err := os.Chmod(path, 0o600); err != nil {
return nil, fmt.Errorf("native session key chmod: %w", err)View on GitHub (pinned to 27d5a3981a)
Solutions
- Move the caveman home directory to a local filesystem with working fsync
- Check dmesg/SMART for underlying disk errors if local
- Retry startup after remounting a flaky network volume
Defensive patterns
Strategy: validation
Validate before calling
func fsyncWorks(dir string) error {
f, err := os.CreateTemp(dir, ".fsync-probe-*")
if err != nil { return err }
defer os.Remove(f.Name())
defer f.Close()
return f.Sync()
} Prevention
- Place the caveman home on a local filesystem with real fsync
- Avoid NFS/CIFS/overlay for key material
- Monitor SMART/dmesg for EIO patterns preceding sync failures
When it happens
Trigger: home on NFS/CIFS/overlayfs where fsync returns EIO/ENOTSUP; failing disk or degraded RAID; virtual disk briefly detached.
Common situations: Home directory on a network mount; Docker Desktop file-sharing mounts; early signs of disk failure.
Related errors
- native session key mkdir: %w
- native session key chmod dir: %w
- native session key write: %w
- native session key close: %w
- native session key create: %w
AI-assisted analysis of JuliusBrussee/caveman@27d5a3981a (2026-08-15).
Data as JSON: /api/errors/b7246e9cd9cf3422.
Report an issue: GitHub.