rustix icon indicating copy to clipboard operation
rustix copied to clipboard

Panic in page_size if platform of docker base image does not match

Open ghost opened this issue 8 months ago • 4 comments

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

ghost avatar May 21 '25 12:05 ghost

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.

jneuff avatar May 22 '25 08:05 jneuff

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 avatar May 22 '25 16:05 sunfishcode

@sunfishcode I can report that the behaviour (panic because of Option::unwrap) remains, even with the patch.

ghost avatar May 26 '25 11:05 ghost

Unified my GitHub accounts. I am the ghost above.

pacman82 avatar May 27 '25 13:05 pacman82

We also got this with a customer running our gateway which uses wasmtime on macos with docker. Linux/arm64.

pimeys avatar Jun 26 '25 11:06 pimeys

I've now posted https://github.com/bytecodealliance/rustix/pull/1484 with a more likely fix.

sunfishcode avatar Jun 28 '25 20:06 sunfishcode