Skip to content

Fix VSOCK address reuse on reconnect - #403

Open
milouz1985 wants to merge 1 commit into
libfuse:masterfrom
milouz1985:codex/fix-vsock-reconnect
Open

milouz1985 wants to merge 1 commit into
libfuse:masterfrom
milouz1985:codex/fix-vsock-reconnect

Conversation

@milouz1985

Copy link
Copy Markdown

Summary

Fix VSOCK reconnection failures caused by modifying the stored CID:PORT address during connection setup.

Problem

connect_vsock() replaces the colon separator with a null terminator when parsing the CID. This permanently modifies the stored address, which is reused for subsequent connections.

After a connection interruption, reconnection attempts fail because the address can no longer be parsed, leaving the FUSE mount active but returning I/O errors.

Fix

Parse the CID without modifying the original VSOCK address.

Add three regression tests covering:

  • Reusing the address after a successful connection.
  • Retrying after socket creation fails.
  • Retrying after connection establishment fails.

Validation

  • Meson/Ninja build with -Dwerror=true: passed.
  • Meson unit tests: 2/2 passed.
  • Python integration tests: 28/28 passed.
  • Manual VSOCK reconnection test between a Proxmox VE host and an Unraid VM: passed.

The manual test confirmed that SSHFS reconnects after the SFTP server is interrupted and restarted, without remounting the filesystem.

connect_vsock() overwrites the colon in sshfs.vsock, so subsequent
connection attempts cannot parse the saved address, even when the first
socket() or connect() call fails.

Let strtoul() stop at the colon and keep the address const, preserving the
existing CID and port parsing behavior.

Add Linux unit tests that reuse the same address after a successful
connection, a socket() failure and a connect() failure. Mock the socket
calls so no VSOCK device or FUSE mount is needed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant