Linux toolchain unpack leaves bin/* without execute permission (644)
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 7k
- Forks
- 1.1k
- Avg merge
- 22h 40m
- Merged PRs (30d)
- 46
Description
Summary
After rustup update / toolchain install on Linux, binaries under $RUSTUP_HOME/toolchains/*/bin/ can be installed with mode 644 (-rw-r--r--) instead of 755, causing immediate failures:
error: Permission denied (os error 13)
when invoking cargo, rustc, rustfmt, etc.
Environment
- OS: Linux x86_64 (ext4)
- rustup: 1.29.0 (28d1352db 2026-03-05)
- RUSTUP_HOME:
~/.rustup(default) - umask:
022 - Reproduced: 2026-06-08 after
rustup update stable
Steps to reproduce
rustup --version
rustup update stable # or: rustup toolchain install stable
find "$RUSTUP_HOME/toolchains" -path '*/bin/*' -type f ! -perm -111 -print | head
stat -c '%a %n' "$RUSTUP_HOME/toolchains/stable-x86_64-unknown-linux-gnu/bin/cargo"
cargo --version # may fail with os error 13 if 644
Expected behaviour
Toolchain binaries under toolchains/*/bin/ are executable (mode includes +x, typically 755 with umask 022).
Actual behaviour
Some or all toolchain bin/* files are 644. The rustup shim itself remains executable; only unpacked toolchain components are affected.
Impact
Breaks CI runners and automation that calls cargo/rustfmt immediately after a toolchain refresh.
Workaround
find "$RUSTUP_HOME/toolchains" -path '*/bin/*' -type f ! -perm -111 -exec chmod +x {} +
Additional notes
- Default
~/.rustupwas used (no custom relocation). - Historical toolchains on the same host also showed 644 on
bin/*, suggesting unpack/install rather than backup restore.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce with rustup update stable or rustup toolchain install stable, then inspect $RUSTUP_HOME/toolchains/*/bin/* using find and stat as shown. Trace the toolchain install/unpack path to determine where executable permissions are lost; done means toolchain binaries retain execute permission and cargo --version works immediately after installation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- linux, rust
- Domain
- operating-systems, tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100