Closed
Description
PR #89582 (commit 910692d) created a regression in File::read_to_end on the Rust Nightly channel (1.57.0 Nightly). This is before main(), it impacts cdylib projects.
Code
lib.rs
use std::io::prelude::*;
// init_rtld_audit_interface
#[used]
#[allow(non_upper_case_globals)]
#[link_section = ".init_array"]
static init_rtld_audit_interface: unsafe extern "C" fn(i32, *const *const i8, *const *const i8) = {
#[link_section = ".text.startup"]
unsafe extern "C" fn init_rtld_audit_interface(_argc: i32, _argv: *const *const i8, _envp: *const *const i8) { read_proc_environ(); }
init_rtld_audit_interface
};
// la_version
#[no_mangle]
unsafe extern "C" fn la_version(version: u32) -> u32 { version }
fn read_proc_environ() {
let mut environ = std::fs::File::open("/proc/self/environ").expect("Lost track of environment");
let mut environ_contents: Vec<u8> = vec![];
environ.read_to_end(&mut environ_contents).expect("Unexpected null reference");
}
Cargo.toml
# General info
[package]
name = "readenv"
version = "0.1.0"
edition = "2021"
# Build targets
[lib]
name = "readenv"
path = "lib.rs"
crate-type = ["cdylib"]
Makefile
test:
@echo "Rust nightly-10-09"
cargo +nightly-2021-10-09 build --lib --release;LD_AUDIT=${PWD}/target/release/libreadenv.so /usr/bin/test || true
@echo "Rust nightly-10-10"
cargo +nightly-2021-10-10 build --lib --release;LD_AUDIT=${PWD}/target/release/libreadenv.so /usr/bin/test || true
I expected to see this happen: (no output)
Rust nightly-10-09
cargo +nightly-2021-10-09 build --lib --release;LD_AUDIT=/home/user/readenv/target/release/libreadenv.so /usr/bin/test || true
Compiling readenv v0.1.0 (/home/user/readenv)
Finished release [optimized] target(s) in 0.55s
Rust nightly-10-10
cargo +nightly-2021-10-10 build --lib --release;LD_AUDIT=/home/user/readenv/target/release/libreadenv.so /usr/bin/test || true
Compiling readenv v0.1.0 (/home/user/readenv)
Finished release [optimized] target(s) in 0.44s
Instead, this happened: Segmentation fault
Rust nightly-10-09
cargo +nightly-2021-10-09 build --lib --release;LD_AUDIT=/home/user/readenv/target/release/libreadenv.so /usr/bin/test || true
Compiling readenv v0.1.0 (/home/user/readenv)
Finished release [optimized] target(s) in 0.55s
Rust nightly-10-10
cargo +nightly-2021-10-10 build --lib --release;LD_AUDIT=/home/user/readenv/target/release/libreadenv.so /usr/bin/test || true
Compiling readenv v0.1.0 (/home/user/readenv)
Finished release [optimized] target(s) in 0.44s
Segmentation fault
Version it worked on
It most recently worked on: Rust 1.57.0-nightly, nightly-2021-10-09-aarch64-unknown-linux-gnu
Version with regression
Regression occurred in: Rust 1.57.0-nightly, nightly-2021-10-10-aarch64-unknown-linux-gnu
rustc --version --verbose
:
rustc 1.57.0-nightly (a8f2463c6 2021-10-09)
binary: rustc
commit-hash: a8f2463c68a6532d74a13ec402ec5b513e4e2726
commit-date: 2021-10-09
host: aarch64-unknown-linux-gnu
release: 1.57.0-nightly
LLVM version: 13.0.0
@rustbot modify labels: +regression-from-stable-to-nightly -regression-untriaged