Title: Fixing Steam's "Download failed: http error 0" on Asahi Linux
Date: 2026-03-18 00:45

Thanks to the [amazing
work](https://asahilinux.org/2024/10/aaa-gaming-on-asahi-linux/) of the [Asahi
Team](https://asahilinux.org/community/), [Steam](https://steampowered.com) is
running on my arm64 Linux on my Apple M2. Unfortunately, it seems that a recent
update broke the ability for Steam to speak to the internet, with logs looking
this like:

```
[2026-03-17 23:11:20] Set status message: Checking for available updates...
[  0%] Checking for available updates...
[2026-03-17 23:11:20] Set percent complete: -1
[2026-03-17 23:11:20] Manifest download: waiting for download to finish
[2026-03-17 23:11:20] Manifest download: finished
[2026-03-17 23:11:20] Download failed: http error 0 (client-update.fastly.steamstatic.com/steam_client_ubuntu12)
[2026-03-17 23:11:20] Downloading manifest: https://client-update.akamai.steamstatic.com/steam_client_ubuntu12
[2026-03-17 23:11:20] Manifest download: send request
[2026-03-17 23:11:20] Manifest download: waiting for download to finish
[2026-03-17 23:11:20] Manifest download: finished
[2026-03-17 23:11:20] Download failed: http error 0 (client-update.akamai.steamstatic.com/steam_client_ubuntu12)
[2026-03-17 23:11:20] Downloading manifest: https://client-update.steamstatic.com/steam_client_ubuntu12
[2026-03-17 23:11:20] Manifest download: send request
[2026-03-17 23:11:21] Manifest download: waiting for download to finish
[2026-03-17 23:11:21] Manifest download: finished
[2026-03-17 23:11:21] Download failed: http error 0 (client-update.steamstatic.com/steam_client_ubuntu12)
[2026-03-17 23:11:21] DownloadManifest - exhausted list of download hosts
[2026-03-17 23:11:21] failed to load manifest from buffer.
[2026-03-17 23:11:21] Failed to load manifest
[2026-03-17 23:11:21] Error: Download failed: http error 0
[2026-03-17 23:11:21] Saving metrics to disk (/home/jvoisin/.local/share/Steam/package/steam_client_metrics.bin)
[2026-03-17 23:11:21] Verifying installation...
[2026-03-17 23:11:21] Verifying all executable checksums
[2026-03-17 23:11:21] Set percent complete: -1
[2026-03-17 23:11:21] Set status message: Verifying installation...
[----] Verifying installation...
```

A quick look at `journalctl` shows that SELinux doesn't like what `passt` is
trying to do:

```
Mar 17 23:07:26 chernabog audit[2093303]: AVC avc:  denied  { execstack } for  pid=2093303 comm="passt" scontext=unconfined_u:unconfined_r:passt_t:s0-s0:c0.c1023 tcontext=unconfined_u:unconfined_r:passt_t:s0-s0:c0.c1023 tclass=process permissive=0
```

[Passt](https://passt.top/passt/about/) is a piece of software providing
user-mode networking for virtual machines, and apparently got stuck in the 90s
because it requires an executable stack, sigh.

The easiest way to fix this is to <del>read the ~250-pages long [SELinux
notebook](https://github.com/SELinuxProject/selinux-notebook)</del> use
[`ausearch`](https://linux.die.net/man/8/ausearch) and to throw its output to
[`audit2allow`](https://linux.die.net/man/1/audit2allow):

```console
# ausearch -c 'passt' --raw | audit2allow -M local-passt
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i local-passt.pp

# cat local-passt.te

module local-passt 1.0;

require {
	type passt_t;
	class udp_socket getattr;
	class process { execmem execstack };
}

#============= passt_t ==============

#!!!! This avc is allowed in the current policy
allow passt_t self:process execstack;
allow passt_t self:process execmem;

#!!!! This avc is allowed in the current policy
allow passt_t self:udp_socket getattr;
# semodule -i local-passt.pp
libsemanage.semanage_direct_install_info: Overriding local-passt module at lower priority 300 with module at priority 400.
#
```

And that's it, Steam should now be able to reach the information superhighway
again.

