From 5a74b292f63a67478b9c57e902945cd9c07858c3 Mon Sep 17 00:00:00 2001 From: sjmiller609 <7516283+sjmiller609@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:24:14 +0000 Subject: [PATCH] Pin qboot firmware for QEMU microvm guests --- lib/hypervisor/qemu/config.go | 4 ++++ lib/hypervisor/qemu/config_test.go | 1 + 2 files changed, 5 insertions(+) diff --git a/lib/hypervisor/qemu/config.go b/lib/hypervisor/qemu/config.go index f00b1a5af..030ac06fb 100644 --- a/lib/hypervisor/qemu/config.go +++ b/lib/hypervisor/qemu/config.go @@ -29,6 +29,10 @@ func buildArgs(cfg hypervisor.VMConfig, machine MachineType) []string { // Do not allow a host qemu.conf to add devices outside microvm's // documented eight virtio-mmio-device limit. args = append(args, "-no-user-config") + // Pin upstream's default microvm firmware. Some distros point + // bios-microvm.bin at SeaBIOS instead, whose ACPI tables omit the + // IOAPICs and crash the guest kernel during early boot. + args = append(args, "-bios", "qboot.rom") } // CPU configuration diff --git a/lib/hypervisor/qemu/config_test.go b/lib/hypervisor/qemu/config_test.go index 71e8080af..27d69b2e1 100644 --- a/lib/hypervisor/qemu/config_test.go +++ b/lib/hypervisor/qemu/config_test.go @@ -249,6 +249,7 @@ func TestBuildArgs_MicroVM(t *testing.T) { args := buildArgs(cfg, MachineTypeMicroVM) assert.Contains(t, args, "microvm,accel=kvm") assert.Contains(t, args, "-no-user-config") + assert.Contains(t, args, "qboot.rom") assert.Contains(t, args, "virtio-blk-device,drive=drive0") assert.Contains(t, args, "virtio-net-device,netdev=net0,mac=02:00:00:ab:cd:ef") assert.Contains(t, args, "vhost-vsock-device,guest-cid=123")