Skip to content

bug: pre-Haswell CI uses QEMU 8.2.2 with a known internal SIGSEGV #7902

Description

@Xuanwo

Description

The pre-Haswell SIGILL check (qemu Nehalem) job added by #6630 to protect #6618 intermittently crashes inside QEMU while running the lance-linalg library tests. The job is intended to catch AVX2/FMA instructions that leak past runtime dispatch when using the x86-64-v2 baseline, but these failures are QEMU SIGSEGVs, not guest SIGILLs or Rust test failures.

Observed failures:

Both runs reached the same point after 174 of 196 tests had reported success and then terminated with:

qemu-x86_64: QEMU internal SIGSEGV {code=MAPERR, addr=0x20}

This is not deterministic for the Lance code. A later PR #7901 run checked out a merge into ecfded9ea4ba3c4019ad06cfb5c763d883008535, used the same lance_linalg-53b3c7e1ba32f66c test binary, and passed all 196 tests:

https://github.com/lance-format/lance/actions/runs/29890725574/job/88830518681

Steps to reproduce

The current workflow effectively runs:

sudo apt update
sudo apt install -y protobuf-compiler libssl-dev qemu-user
export RUSTFLAGS='-C target-cpu=x86-64-v2'
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER='qemu-x86_64 -cpu Nehalem'
cargo test --release -p lance-linalg --lib --no-run
cargo test --release -p lance-linalg --lib

Environment:

  • GitHub Actions ubuntu-24.04, x86_64
  • qemu-user 1:8.2.2+ds-0ubuntu1.17
  • Rust / lance-linalg 9.1.0-beta.8

Root cause

QEMU issue https://gitlab.com/qemu-project/qemu/-/issues/2170 reports the same x86_64 user-mode crash signature in open_self_maps when the guest accesses /proc/self/maps. Upstream fixed it in https://gitlab.com/qemu-project/qemu/-/commit/4ef1f559f270c66b3ffc23f6c845ff3d008c6356.

The fix is absent from QEMU v8.2.2 and present from v8.2.3 onward. Ubuntu Noble's current qemu-user package remains based on v8.2.2 and does not carry this patch. The failed jobs did not capture a QEMU core dump or -strace, so the exact guest call that reached open_self_maps is not proven, but the version and failure signature match the known upstream defect.

Expected behavior

The job should complete the lance-linalg test suite or fail on a genuine guest SIGILL / test failure. The emulator itself should not crash.

Proposed fix

Pin or install a QEMU version containing 4ef1f559 (at least v8.2.3) for the qemu-pre-haswell job while preserving qemu-x86_64 -cpu Nehalem, and print qemu-x86_64 --version in the job log.

Disabling backtraces or serializing the tests may reduce exposure, but those would be mitigations rather than a fix for the affected QEMU version.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions