rust-lang / rust-lang/rustup

Linux toolchain unpack leaves bin/* without execute permission (644)

Open
#4,900 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

incomplete question
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 ~/.rustup was used (no custom relocation).
  • Historical toolchains on the same host also showed 644 on bin/*, suggesting unpack/install rather than backup restore.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.