steam-runtime-launcher-service: forwarded fd >= 1024 silently lost (steam-runtime-supervisor: cannot open /proc/self/fd/N)

Aperta
#865 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
1-2 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
c, linux, shell

Direzione di ricerca

Start in bin/launcher-service.c at child_setup_func (around lines 414-433), where dup2 and close run on fd_map entries without checking results, then follow fd_map[i].to from lines 525-527. The issue also cites _srt_set_compatible_resource_limits in steam-runtime-tools/utils.c, which lowers the soft RLIMIT_NOFILE to 1024. Done means a forwarded fd of 1024 or higher either launches correctly or fails with a clear error, with no silent loss; check it by reproducing the fd numbers the issue describes.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Your system information
  • Steam Runtime Version: steamrt3c client runtime 3c.0.20260824.257593 (pressure-vessel 0.20260824.0), Steam client 1792618285 (steamdeck_stable channel, "Use experimental SteamRT3 Steam Client" enabled)
  • Distribution (e.g. Ubuntu 18.04): Bazzite 44 (Stable F44.20261026, bazzite-deck image), Fedora Atomic based; reproduced on two machines (desktop and Lenovo Legion Go 2)
  • Link to your full system information (Help -> Steam Runtime Diagnostics) in a Gist: can provide on request
  • Have you checked for system updates?: Yes
  • What compatibility tool are you using?: None (native Linux executable added as a non-Steam shortcut)
  • What versions are listed in steamapps/common/SteamLinuxRuntime/VERSIONS.txt? depot 1.0.20261021.266054, scripts 0.20261007.0
  • What versions are listed in steamapps/common/SteamLinuxRuntime_soldier/VERSIONS.txt? depot 2.0.20261021.266042, pressure-vessel 0.20261007.0
  • What versions are listed in steamapps/common/SteamLinuxRuntime_sniper/VERSIONS.txt? depot 3.0.20261021.266025, pressure-vessel 0.20261007.0
  • What versions are listed in steamapps/common/SteamLinuxRuntime_4/VERSIONS.txt? depot 4.0.20261021.265997, pressure-vessel 0.20261007.0
Please describe your issue in as much detail as possible:

With the steamrt3c 64-bit client, non-Steam shortcuts (and presumably games) fail to launch
once the fd number Steam passes as --forward-fd=N / --edit-env-fd=N is 1024 or higher.
steam-runtime-supervisor reports Failed to open file "/proc/self/fd/N": No such file or directory and exits immediately. Every launch with N < 1024 works; after a Steam restart
launches work again until Steam's fd numbers pass 1023.

Expected: the shortcut launches every time. Actual: once Steam's forwarded fd number is 1024 or higher, every launch fails before the game starts, until Steam is restarted.

Root cause (steam-runtime-tools v0.20260824.0, unchanged on main a41efe20)

  • bin/launcher-service.c:1654 calls _srt_set_compatible_resource_limits (0), which sets
    soft RLIMIT_NOFILE to 1024 (steam-runtime-tools/utils.c:1268-1269, MR !353).
  • bin/launch-client.c:1364 sends the requested target fd number N unchanged.
  • bin/launcher-service.c:525-527 stores it as fd_map[i].to/final, and
    child_setup_func (:414-433) does dup2 (fd_map[i].from, fd_map[i].to); close (fd_map[i].from); without checking the result. In the child the soft limit is 1024, so
    dup2 to N >= 1024 fails with EBADF, the source fd is closed, and the program is executed
    without fd N.
  • steam-runtime-tools/env-overlay.c:869-871 then opens /proc/self/fd/N -> ENOENT.
    This became reachable with --edit-env-fd (13be3db7, 2026-08-07), since the client now
    forwards an fd on every launch.

Suggested fix

In child_setup_func, temporarily raise the soft RLIMIT_NOFILE to cover the highest target
fd (capped at the hard limit), perform the dup2 calls with error checking (fail the launch
loudly instead of continuing), then restore the soft limit to 1024 before exec; existing
fds above the limit stay valid. Optionally have the client pass a low fd number.

Workaround

Restart Steam; or raise the running service's soft limit with
prlimit --pid <srt-launcher-service pid> --nofile=65536: (we saw N up to 3545, so 4096 is not enough in long sessions). Games then inherit soft 65536 instead of 1024.

Steps for reproducing this issue:
  1. Keep Steam running long enough (or open many fds) that console_log.txt shows
    steam-runtime-launch-client ... --forward-fd=N with N >= 1024.
  2. Launch any non-Steam shortcut.
  3. Journal: steam-runtime-supervisor[PID]: E: Failed to open file "/proc/self/fd/N": No such file or directory. Observed N: 1026..3545 (40 failures); all N <= 1017 succeed.
Lingua principale
Shell
Stelle
1.5k
Fork
98
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ValveSoftware/steam-runtime

Tutte le issue di ValveSoftware/steam-runtime

Issue simili

Altre issue su Shell/Bash

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.