Panic in page_size if platform of docker base image does not match
Hello rustix Team,
I create this issue as a result of hunting down a panic in wasmtime https://github.com/bytecodealliance/wasmtime/issues/10802. Now that I have a minimal reproducing example, I wonder if this even should be supported, yet I leave that judgement to you.
This is the panic we see:
thread 'main' panicked at /root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rustix-1.0.7/src/backend/linux_raw/param/auxv.rs:302:68:
called `Option::unwrap()` on a `None` value
As suggested by @alexcrichton the reproducing code is simple:
use rustix;
fn main() {
let page_size = rustix::param::page_size();
eprintln!("{page_size}");
}
The environment to reproduce it, uses this container file:
FROM --platform=linux/amd64 ubuntu:24.04
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y pkg-config libssl-dev curl build-essential && \
rm -rf /var/lib/apt/lists/*
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init && \
sh rustup-init -y --profile minimal
ENV PATH="/root/.cargo/bin:${PATH}"
WORKDIR /usr/local/src
ENV CARGO_INCREMENTAL=0
WORKDIR /build
# Build application
COPY . .
RUN cargo build --release
CMD ["cargo", "run", "--release"]
On my ARM Mac Book Pro M3 executing:
podman build . --tag mre --platform linux/arm64
podman run mre
Reproduces the above error.
The actual production code hit by this, did not actually specify a platform in the containerfile though. It simply used a base image build on an x86_64 platform
Not sure if this is an issue with rustix, or Rossetta or if this is supposed to work at all. Yet I thought you folks may be interessted.
Best, Markus
Hi,
I could reproduce this without the --platform linux/arm64 flag on the build command. It seems the --platform parameter of the FROM instruction is the one being used for the build anyway.
Interesting. Would anyone who can reproduce this be able to test with this patch?
For example, add this to your Cargo.toml:
[patch.crates-io]
rustix = { git = "https://github.com/bytecodealliance/rustix", rev = "06125d4cd41d0484d19f71a15d55e7d8cb2194e4" }
@sunfishcode I can report that the behaviour (panic because of Option::unwrap) remains, even with the patch.
Unified my GitHub accounts. I am the ghost above.
We also got this with a customer running our gateway which uses wasmtime on macos with docker. Linux/arm64.
I've now posted https://github.com/bytecodealliance/rustix/pull/1484 with a more likely fix.