NVIDIA / NVIDIA/OpenShell

bug(vm): per-sandbox Unix socket paths exceed macOS sun_path limit

Open
#3,452 1 comment 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

state:triage-needed
Dominant language
Rust
Stars
8.7k
Forks
1.3k
Avg merge
2d 11h
Merged PRs (30d)
253

Description

User Story

As a developer running the VM compute driver on macOS, I want per-sandbox Unix socket paths to fit within the OS sun_path limit so that sandbox creation does not fail with a socket bind error.

Problem Statement

The VM driver constructs per-sandbox Unix socket paths by joining {state_dir}/sandboxes/{sandbox_id}/{socket_name}. Sandbox IDs are UUID v4 strings (36 chars), and state_dir depends on the user's home directory. On macOS, struct sockaddr_un.sun_path is 104 bytes (103 usable). With the default state_dir (~/.local/state/openshell/vm-driver), the resulting socket path reaches 107 bytes — 3 bytes over the limit — and bind() fails.

/Users/benoitf/.local/state/openshell/vm-driver/sandboxes/3eb2ad45-bead-4c2e-bd10-1a4a7f3a2721/control.sock
└─────────────────────────────────── 107 bytes ──────────────────────────────────────┘

Path length breakdown:

/Users/benoitf/.local/state/openshell/vm-driver   (47)
/sandboxes/                                        (11)
3eb2ad45-bead-4c2e-bd10-1a4a7f3a2721               (36)
/control.sock                                      (13)
                                            total = 107 bytes
                                     macOS limit = 104 bytes
                                       over by 3 bytes
Impact / Why This Matters

When this happens, VM sandbox creation fails at the control socket bind step. The error surfaces as a low-level socket error, not as a clear path-length diagnostic.

The current workaround is to manually configure a short state_dir (e.g. /tmp/os-vm). or rename control.sock for ctl.sock for my case (as I reduced 3 extra chars)
This is non-obvious, fragile, and breaks persistence expectations. Any user whose home directory path is longer than /Users/benoitf (15 chars) would be even further over the limit.

Linux is less affected (108-byte limit) but not immune with deep state directories or longer usernames.

Acceptance Criteria
  • Per-sandbox Unix socket paths fit within 103 usable bytes on macOS for any reasonable state_dir
  • The fix does not break sandbox state directory layout or persistence/restore
  • Existing sandbox directories remain discoverable (sandbox ID must still be recoverable from the filesystem)
  • The gateway compute-driver socket path (run/compute-driver.sock) remains unaffected
Reproduction Steps
  1. On macOS, start the gateway with --compute-driver vm using the default state_dir (~/.local/state/openshell/vm-driver)
  2. Run openshell sandbox create --name test --from ubuntu:24.04
  3. Observe the sandbox creation fails at the control socket bind
Environment
  • OpenShell: development build (current main branch)
  • OS: macOS (Apple Silicon) — sun_path is 104 bytes
  • Runtime: VM compute driver (libkrun)
Logs
Error: bind() failed for /Users/benoitf/.local/state/openshell/vm-driver/sandboxes/3eb2ad45-bead-4c2e-bd10-1a4a7f3a2721/control.sock

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the VM compute driver’s per-sandbox socket path construction and reproduce the macOS bind failure using the default state_dir. Trace how sandbox directories are created and restored, then verify that the revised paths stay within the macOS limit, preserve discovery and persistence, and leave run/compute-driver.sock unchanged.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, rust
Domain
backend, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.