fix(dev-new): disable Warden so the Android client can log in #384

Merged
dominik.polakovics merged 1 commit from fix/wow-disable-warden into main 2026-08-26 19:16:10 +02:00

Problem

Logging in from the Android handheld (KONKR Pocket FIT, Snapdragon G3 Gen 3) running the
3.3.5a client under GameHub Lite crashes immediately after authentication:

illegal instruction at 0023:0B4E4360
ERROR #132 0x85100084

Evidence

0B4E4360 is a heap address, well outside Wow.exe's own code region (~0x00400000).
That is dynamically generated code, not the client binary — which is exactly what Warden
is: the worldserver pushes freshly generated x86 to the client each check cycle and
Scan.dll executes it. GameHub translates x86 to ARM64 via FEX, and FEX chokes on
code that appears at runtime. The crash timing matches Warden's first check cycle.

Why disabling it costs nothing here

Warden.ClientCheckFailAction = 0 was already set, so the realm logged check failures
and acted on none of them. The realm is single-user, so the anti-cheat has nothing to
protect; its only observable effect is breaking the handheld client.

Verification

Applied by hand to /var/lib/wow/etc/worldserver.conf on dev-new and restarted
podman-wow-worldserver.service. World port was back up in ~18s, and the container
confirms it reads the value through the /var/lib/wow/etc bind mount:

1187:Warden.Enabled = 0

That manual edit is temporary — wow-config.service reinstalls worldserver.conf
from the Nix store unconditionally on every run (unlike playerbots.conf, which is
guarded). This PR is what makes it survive.

Pre-commit dry-build: :: dev-new OK.

## Problem Logging in from the Android handheld (KONKR Pocket FIT, Snapdragon G3 Gen 3) running the 3.3.5a client under GameHub Lite crashes immediately after authentication: ``` illegal instruction at 0023:0B4E4360 ERROR #132 0x85100084 ``` ## Evidence `0B4E4360` is a heap address, well outside `Wow.exe`'s own code region (~`0x00400000`). That is dynamically generated code, not the client binary — which is exactly what Warden is: the worldserver pushes freshly generated x86 to the client each check cycle and `Scan.dll` executes it. GameHub translates x86 to ARM64 via FEX, and FEX chokes on code that appears at runtime. The crash timing matches Warden's first check cycle. ## Why disabling it costs nothing here `Warden.ClientCheckFailAction = 0` was already set, so the realm logged check failures and acted on none of them. The realm is single-user, so the anti-cheat has nothing to protect; its only observable effect is breaking the handheld client. ## Verification Applied by hand to `/var/lib/wow/etc/worldserver.conf` on `dev-new` and restarted `podman-wow-worldserver.service`. World port was back up in ~18s, and the container confirms it reads the value through the `/var/lib/wow/etc` bind mount: ``` 1187:Warden.Enabled = 0 ``` That manual edit is temporary — `wow-config.service` reinstalls `worldserver.conf` from the Nix store unconditionally on every run (unlike `playerbots.conf`, which is guarded). This PR is what makes it survive. Pre-commit dry-build: `:: dev-new OK`.
Warden pushes freshly generated x86 to the client every check cycle.
Under FEX translation on the Android handheld that faults right after
login with ERROR #132 — an illegal instruction at a heap address well
outside Wow.exe's own code, which is the generated blob rather than the
client.

Warden.ClientCheckFailAction was already 0, so the realm logged check
failures and acted on none of them. The realm is single-user, so the
anti-cheat has nothing to protect and its only observable effect is
breaking the handheld client.
dominik.polakovics deleted branch fix/wow-disable-warden 2026-08-26 19:16:10 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Cloonar/nixos!384
No description provided.