git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] t7528: work around ETOOMANY in OpenSSH 10.1 and newer

From
Jeff King <peff@peff.net>
Date
Oct 23, 2025, 12:43 UTC
Message-ID
<20251023124320.GA1163932@coredump.intra.peff.net>
In-Reply-To
<20251023-b4-pks-t7528-ssh-agent-socket-name-too-long-v1-1-f15eeec199f3@pks.im>
On Thu, Oct 23, 2025 at 09:14:59AM +0200, Patrick Steinhardt wrote:
Show 12 quoted lines
> As it turns out this is caused by a change in OpenSSH 10.1 [1]:
> 
>  * ssh-agent(1), sshd(8): move agent listener sockets from /tmp to
>    under ~/.ssh/agent for both ssh-agent(1) and forwarded sockets
>    in sshd(8).
> 
> Instead of creating the socket in "/tmp", OpenSSH now creates the socket
> in our home directory. And as the home directory gets modified to be
> located in our test output directory we end up with paths that are
> somewhat long. But Linux has a rather short limit of 108 characters for
> socket paths, and other systems have even lower limits, so it is very
> easy now to exceed the limit and run into the above error.

There's a secondary issue, too: even if the path is short enough, the space in "trash directory" of the path will break the shell eval. That's relevant below.

Show 5 quoted lines
> Work around the issue by using `ssh-agent -T`, which instructs it to
> use the old behaviour and create the socket in "/tmp" again. This switch
> has only been introduced with 10.1 though, so for older versions we have
> to fall back to not using it. That's fine though, as older versions know
> to put the socket into "/tmp" already.

OK. I think this is an improvement over the status quo, though it leaves a lot of loose ends, like:

  - what happens if "ssh-agent" does not exist at all; we do not notice
    the error because the eval succeeds anyway (with blank input)
  - one reason we did not notice this immediately is that the failure
    mode is to fall back to using the user's SSH_AUTH_SOCK variable if
    set (i.e., their real agent with their keys in it!). We should
    perhaps be clearing that variable in test-lib.sh.

But those are not really new issues, and I'm OK with just un-breaking things in the most expedient way possible.

Show 5 quoted lines
> An alternative approach would be to abbreviate the socket name itself so
> that we create it as e.g. "sshsock" in the trash directory. But taking
> the above example we'd still end up with a path that is 91 characters
> long. So we wouldn't really have a lot of headroom, and it is quite
> likely that some developers would see the issue on their machines.
I assume you mean here something like:
  ssh-agent "$PWD/sshsock"

Yeah, that is not buying us that much in terms of headroom. Plus it would still run afoul of the space issue, since we know that $PWD will always contain "trash directory".

If we are going to provide a fixed name, I think it would have to be a true relative path like:

  ssh-agent ./sshsock

That does work (and SSH_AUTH_SOCK contains the relative path), but is maybe a bit of a booby trap waiting to spring on somebody who tries to access the agent with a different current working directory.

-Peff
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 2 of 4 in “t7528: work around ETOOMANY in OpenSSH 10.1 and newer”
  1. t7528: work around ETOOMANY in OpenSSH 10.1 and newerPatrick Steinhardt, Oct 23, 2025
  2. Jeff KingOct 23, 2025
  3. Patrick SteinhardtOct 23, 2025
  4. Jeff KingOct 23, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.