Skip to content

docs(docs): root-cause and record the phantom pad in a dual remap#11

Merged
NicolasPogorzelski merged 1 commit into
mainfrom
docs/evdev-enumeration-leak
Jul 15, 2026
Merged

docs(docs): root-cause and record the phantom pad in a dual remap#11
NicolasPogorzelski merged 1 commit into
mainfrom
docs/evdev-enumeration-leak

Conversation

@NicolasPogorzelski

Copy link
Copy Markdown
Owner

What

Documents the phantom fifth controller Steam lists when two DualSense are both in
ps5-xbox, and records the decision to defer the fix.

Root cause (hardware-verified, 2026-07-15)

  • The hidraw gate holds on both pads (both nodes 000, no holder) — hidraw is not the leak.
  • The phantom is the second-emulated pad's evdev node: Steam re-opens and lists it during
    the driver rebind of the second ps5-xbox transition. EVIOCGRAB still holds it, so it is
    inertevtest reports the node grabbed, no events leak, no double input.
  • EVIOCGRAB hides events, not enumeration; Steam reads the VID/PID off the evdev node and
    lists it regardless of the grab. Always the second pad, position- not device-specific.

Why deferred

The daemon is a --user service sharing Steam's UID, so any evdev permission/ACL barrier that
blocks Steam also locks out the remapper's own grab. The only robust fix (born-gated evdev node

  • a root helper that hands the grabbed fd to the daemon via SCM_RIGHTS + a raw-read remapper
    path) expands a security-sensitive privileged surface for a cosmetic list entry. Decision:
    document and defer
    ; escalate only if a pending game-side slot test shows functional harm.

Changes (docs only, no runtime change)

  • docs/decisions/evdev-enumeration-leak.md — full analysis, decision, rejected alternatives
  • docs/troubleshooting.md — symptom + inert-case verification
  • ROADMAP.md — status entry and known-limitation backlog item

Repo validation (scripts/validate-repo.sh) passes, including internal-link checks.

Two DualSense both in ps5-xbox make Steam list a fifth, inert PlayStation
pad. Hardware verification shows the hidraw gate holds on both pads (both
nodes 000, no holder); the leak is the second pad's evdev node, re-opened
by Steam during the second transition's driver rebind. EVIOCGRAB keeps it
input-dead, so it is cosmetic, not double input.

No lightweight robust fix exists: the daemon is a --user service sharing
Steam's UID, so an evdev permission/ACL barrier that blocks Steam also
locks out the remapper's own grab. Decision: document and defer; escalate
to a root fd-passing grab (born-gated evdev node + SCM_RIGHTS) only if a
game-side slot test shows functional harm (stolen player slot).

- docs/decisions/evdev-enumeration-leak.md: full analysis and decision
- docs/troubleshooting.md: symptom + inert-case verification
- ROADMAP.md: status entry and known-limitation backlog item
@NicolasPogorzelski
NicolasPogorzelski merged commit 31c80c0 into main Jul 15, 2026
2 checks passed
@NicolasPogorzelski
NicolasPogorzelski deleted the docs/evdev-enumeration-leak branch July 15, 2026 14:34
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