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.
Description
The
pre-Haswell SIGILL check (qemu Nehalem)job added by #6630 to protect #6618 intermittently crashes inside QEMU while running thelance-linalglibrary tests. The job is intended to catch AVX2/FMA instructions that leak past runtime dispatch when using thex86-64-v2baseline, but these failures are QEMUSIGSEGVs, not guestSIGILLs or Rust test failures.Observed failures:
mainatecfded9ea4ba3c4019ad06cfb5c763d883008535: https://github.com/lance-format/lance/actions/runs/29888040858/job/88822634214Both runs reached the same point after 174 of 196 tests had reported success and then terminated with:
This is not deterministic for the Lance code. A later PR #7901 run checked out a merge into
ecfded9ea4ba3c4019ad06cfb5c763d883008535, used the samelance_linalg-53b3c7e1ba32f66ctest 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:
Environment:
ubuntu-24.04, x86_64qemu-user 1:8.2.2+ds-0ubuntu1.17lance-linalg 9.1.0-beta.8Root cause
QEMU issue https://gitlab.com/qemu-project/qemu/-/issues/2170 reports the same x86_64 user-mode crash signature in
open_self_mapswhen 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-userpackage 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 reachedopen_self_mapsis not proven, but the version and failure signature match the known upstream defect.Expected behavior
The job should complete the
lance-linalgtest suite or fail on a genuine guestSIGILL/ test failure. The emulator itself should not crash.Proposed fix
Pin or install a QEMU version containing
4ef1f559(at least v8.2.3) for theqemu-pre-haswelljob while preservingqemu-x86_64 -cpu Nehalem, and printqemu-x86_64 --versionin 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.