Repository navigation
Releases
Releases · firecracker-microvm/firecracker
Firecracker v1.18.0
Added
- #6393: Added support for Nitro Sandboxes. Firecracker can now launch and manage isolated VMs that the Nitro Hypervisor carves out of the parent EC2 instance, as an alternative to KVM. Firecracker drives the Nitro Enclaves driver (
/dev/nitro_enclaves) instead of/dev/kvm, and keeps its existing API, jailer and virtio device model. A sandbox is configured with the newPUT /enclaveAPI, in confidential or direct mode. See the Nitro Sandboxes documentation.
Firecracker v1.17.0
Added
- #5891: Added support for virtio device reset.
- #5983: Add two optional metrics fields, set via
PUT /metricsor a config file:emit_idemits the microVM instance id under a top-levelidfield, andpropertiesemits operator-defined key-value pairs under a top-levelpropertiesfield. Each is opt-in and independent. See metrics documentation. - #6003: Added a new option
Transparentfor thehuge_pagessetting. If set, Firecracker will use transparent huge pages for the guest memory viamadvise(MADV_HUGEPAGE). Guest memory must be a multiple of 2MB when using this option. - #6013, #6017, #6021: Added official support for 6.18 microVM guest kernels.
- #6037: Added support for booting
bzImageguest kernels on x86_64, in addition to the existing uncompressed ELF (vmlinux) images. The kernel image format is detected automatically, so no configuration change is required. - #6064: Added the
huge_pagesfield toPUT /snapshot/load, allowing the restored microVM to reuse the snapshot's host page configuration or selectNone,Transparent, or2M. - #6109: Added an optional
sync_snapshot_filesfield to thePUT /snapshot/createAPI, defaulting totrue. It controls whether the snapshot state and guest memory files are synced to disk (fsync) before the request returns. Setting it tofalsereturns without waiting for the writeback, making snapshot creation faster at the cost of durability across a host crash; the data stays in the host page cache, so same-host reads still see the full contents. Block device backing files are alwaysfsync'd regardless. See snapshot documentation. - #6116: On aarch64, enable
KVM_CAP_ARM_WRITABLE_IMP_ID_REGSwhen the host kernel offers it (Linux 6.15 and later), adding support for custom CPU templates that modify the implementation ID registers (MIDR_EL1,REVIDR_EL1,AIDR_EL1). Such templates previously failed at boot withFailed to set register ... Invalid argumentbecause KVM rejects the write unless the capability is enabled on the VM. - #6145: Added official support for AWS Graviton5 (m9g.metal-48xl) instances.
- #6098: Added new VIRTIO_BLK_F_BLK_SIZE and VIRTIO_BLK_F_TOPOLOGY features to the virtio-block device. More information is in the new block documentation.
- #6142: Add opt-in virtio-blk discard support for writable
SyncIO engine drives through thediscarddrive configuration field. See the block discard documentation.
Changed
- #6115: Changed the T2S CPU template to set the
FB_CLEARbit ofMSR_IA32_ARCH_CAPABILITIESto 1. This lets guest kernels recognize that theVERWinstruction clears fill buffers, including on host kernels before v6.4 that cannot exposeFLUSH_L1D. - #6172: Gate CLIRD_EL1 override to only happen on host kernels equal or newer than 6.10 release. This aliviates the guest performance regression seen on host kernels in range [6.3..6.10) correlated to incorrect cpu cache topology presented to the guest.
Fixed
- #6100: Fixed the vsock device permanently suppressing RX (host-to-guest) delivery after a bare pause/resume cycle (
PATCH /vmwithPausedthenResumed, without a snapshot). The resume kick armed theTRANSPORT_RESETRX gate even though no reset event had been sent, so the guest could never acknowledge it and every new host-initiated connection made after the resume hung forever. The gate is now part of the persisted device state and the resume kick respects it instead of arming it. - #6174: Fixed
virtio-memleaving unplugged memory writable by the VMM, and potentially unmapped, on microVMs restored from a snapshot memory file. Firecracker now maps each slot straight to the protection it should have, with theMAP_NORESERVEflag, and aborts if the re-map fails. - #6174: Fixed
virtio-memdiscarding the whole hotpluggable region on everyUNPLUG_ALLrequest, even when nothing was plugged. The discard is now skipped when the range has no plugged blocks. - #6176: Fixed
virtio-memleaving its block accounting inconsistent with the KVM memory slots if a plug or unplug request failed part way through. Firecracker now commits each slot's state only after its KVM update succeeds, so a partial failure leaves the block state and the KVM slots reflecting exactly the slots that were updated. - #5956: Fixed a TOCTOU race in the aarch64 jailer when setting ownership of the CPU cache and
MIDR_EL1information files copied into the chroot. - #6076: Fixed memory hotplug sizes silently wrapping when converted from MiB to bytes.
requested_size_mibonPATCH /hotplug/memoryandtotal_size_mib,block_size_mibandslot_size_mibonPUT /hotplug/memoryare now bounded to 32 bits. Values above that previously wrapped to a smaller byte count, so a large enough request was accepted as a 0-byte region instead of being rejected. - #6031, #6041, #6077: Fixed the vsock device re-arming its host-stream
EPOLLINinterest while received data was still awaiting a guest RX buffer, which could busy-spin the event thread until the guest posted buffers. The device now drains the host stream fully across successive RX operations instead of one packet per event loop iteration, reducing the host-side CPU cost per gigabit of host-to-guest traffic by up to ~50% and improving host-to-guest throughput by ~44% (median) in most configurations. On single-vcpu microVMs on the newest Intel hosts (m7i, m8i), host-to-guest throughput may instead decrease by ~15% (median), where the single guest vCPU rather than the host becomes the bottleneck. Terminating a connection now also discards its TX buffer, so the device stops advertisingEPOLLOUTfor a host stream it will never write to again, which could otherwise busy-spin the event thread indefinitely. - #6086, #6143: Fixed a deadlock in the logger: a signal handler that logs while the interrupted thread is already logging would hang the VMM and its API socket. This is reachable whenever a
SIGPIPEis raised by Firecracker's own log write, for example when logging tostdoutand the reader of that pipe exits. The logger now uses anRwLock, andsigpipe_handleronly increments thesignals.sigpipemetric instead of logging, so it no longer emits aReceived signal 13, code 0.line. - #6120: Fixed a bug caused by a KVM behavior change introduced in Linux 6.13, which requires guest CPUID to be set before userspace reads CPUID-dependent MSRs. On x86_64 with Linux 6.18 host kernels, Firecracker read the base values of those MSRs before setting guest CPUID, so KVM returned zero for such MSRs and CPU templates consequently used zero for bits configured for passthrough. Firecracker now sets guest CPUID before reading MSRs to be modified by CPU templates, so passthrough bits retain their KVM-provided values and features such as eIBRS remain exposed to the guest.
Firecracker v1.16.2
Changed
- #6172: Gate CLIRD_EL1 override to only happen on host kernels equal or newer than 6.10 release. This aliviates the guest performance regression seen on host kernels in range [6.3..6.10) correlated to incorrect cpu cache topology presented to the guest.
- #6100: Bumped the snapshot format version. Snapshots created by this version cannot be loaded by 1.16.0 or 1.16.1, and snapshots created by those versions cannot be loaded by this one.
Fixed
- #6100: Fixed the vsock device permanently suppressing RX (host-to-guest) delivery after a bare pause/resume cycle (
PATCH /vmwithPausedthenResumed, without a snapshot). The resume kick armed theTRANSPORT_RESETRX gate even though no reset event had been sent, so the guest could never acknowledge it and every new host-initiated connection made after the resume hung forever. The gate is now part of the persisted device state and the resume kick respects it instead of arming it. - #6174: Fixed
virtio-memleaving unplugged memory writable by the VMM, and potentially unmapped, on microVMs restored from a snapshot memory file. Firecracker now maps each slot straight to the protection it should have, with theMAP_NORESERVEflag, and aborts if the re-map fails. - #6174: Fixed
virtio-memdiscarding the whole hotpluggable region on everyUNPLUG_ALLrequest, even when nothing was plugged. The discard is now skipped when the range has no plugged blocks. - #6176: Fixed
virtio-memleaving its block accounting inconsistent with the KVM memory slots if a plug or unplug request failed part way through. Firecracker now commits each slot's state only after its KVM update succeeds, so a partial failure leaves the block state and the KVM slots reflecting exactly the slots that were updated. - #5956: Fixed a TOCTOU race in the aarch64 jailer when setting ownership of the CPU cache and
MIDR_EL1information files copied into the chroot. - #6076: Fixed memory hotplug sizes silently wrapping when converted from MiB to bytes.
requested_size_mibonPATCH /hotplug/memoryandtotal_size_mib,block_size_mibandslot_size_mibonPUT /hotplug/memoryare now bounded to 32 bits. Values above that previously wrapped to a smaller byte count, so a large enough request was accepted as a 0-byte region instead of being rejected. - #6031, #6041, #6077: Fixed the vsock device re-arming its host-stream
EPOLLINinterest while received data was still awaiting a guest RX buffer, which could busy-spin the event thread until the guest posted buffers. The device now drains the host stream fully across successive RX operations instead of one packet per event loop iteration, reducing the host-side CPU cost per gigabit of host-to-guest traffic by up to ~50% and improving host-to-guest throughput by ~44% (median) in most configurations. On single-vcpu microVMs on the newest Intel hosts (m7i, m8i), host-to-guest throughput may instead decrease by ~15% (median), where the single guest vCPU rather than the host becomes the bottleneck. Terminating a connection now also discards its TX buffer, so the device stops advertisingEPOLLOUTfor a host stream it will never write to again, which could otherwise busy-spin the event thread indefinitely. - #6086, #6143: Fixed a deadlock in the logger: a signal handler that logs while the interrupted thread is already logging would hang the VMM and its API socket. This is reachable whenever a
SIGPIPEis raised by Firecracker's own log write, for example when logging tostdoutand the reader of that pipe exits. The logger now uses anRwLock, andsigpipe_handleronly increments thesignals.sigpipemetric instead of logging, so it no longer emits aReceived signal 13, code 0.line. - #6120: Fixed a bug caused by a KVM behavior change introduced in Linux 6.13, which requires guest CPUID to be set before userspace reads CPUID-dependent MSRs. On x86_64 with Linux 6.18 host kernels, Firecracker read the base values of those MSRs before setting guest CPUID, so KVM returned zero for such MSRs and CPU templates consequently used zero for bits configured for passthrough. Firecracker now sets guest CPUID before reading MSRs to be modified by CPU templates, so passthrough bits retain their KVM-provided values and features such as eIBRS remain exposed to the guest.
Firecracker v1.16.1
Fixed
- #5959: Reverted the use of
O_NOFOLLOWfor the jailer's cgroup and network namespace file operations, so symlinks are again allowed in these paths. - #5958: Fixed a bug that caused vsock guest-to-host connections to time out after snapshot restore, triggered by taking a snapshot with a TX descriptor in-flight. On restore the device now replays the TX queue notification so in-flight TX descriptors are re-processed and notification suppression is re-armed.
Firecracker v1.16.0
Added
- #5786: Added developer preview support for hotplugging and hot-unplugging PCI virtio devices (block, pmem, net) on a running microVM. The guest must manually rescan the PCI bus after hotplug and remove the device before unplug since no automatic notification mechanism is implemented yet. More information can be found in the Device Hotplugging documentation page.
- #5323: Add support for Vsock Unix domain socket path overriding on snapshot restore. More information can be found in the docs.
- #5824: Add optional rate limiting to serial console output, configurable via the
rate_limiterfield onPUT /serial. A new metric is exposed underuart:rate_limiter_dropped_bytes. - #5799: Add per-callsite rate limiting for error, warn, and info level log messages. Each callsite independently allows up to 10 messages per 5-second window. When logging resumes after suppression, a warn-level summary reports the count of suppressed messages. A new
rate_limited_log_countmetric tracks the total number of suppressed messages. - #5789: Add rate-limiter support to virtio-pmem device to allow control over I/O bandwidth generated by the FLUSH requests from the guest.
- #5872: Add notification suppression support in the virtio-vsock device via the EVENT_IDX virtio feature to reduce device overhead.
- #5828: Advertise MTU to the guest via
VIRTIO_NET_F_MTUusing a new optionalmtufield in thenetwork-interfacesAPI. When set, a compatible guest driver will configure the interface with the specified MTU. - #5906: Add
rng-seedFDT node for aarch64 guests which provides an initial random seed for the guest to use. This helps older aarch64 machines which do not have hardware random generators. - Added support for Linux 6.18 host kernels alongside the existing 5.10 and 6.1 host kernels. See the kernel support policy for details.
Fixed
- #5762: Cap virtio-rng per-request entropy to 64 KiB. Previously, a guest could construct a descriptor chain that caused Firecracker to allocate more host memory than the guest actually provided, potentially leading to excessive host memory consumption.
- #5760: Fixed HID (Hardware ID) of VMGenID device so that it aligns with the upstream Linux kernel. This caused the driver not to be bound correctly to the device prior to Linux kernel 6.10.
- #5764: Fixed a bug that caused the guest UART driver to get stuck and stop transmitting after snapshot restore. The bug was triggered by taking a snapshot while a serial transmission was taking place. On restore the driver would wait for a TX interrupt that would never arrive and no output would appear in the serial console.
- #5780: Fixed missing
/sys/devices/system/cpu/cpu*/cache/*in aarch64 guests when running on host kernels >= 6.3 with guest kernels >= 6.1.156. - #5793: Fixed virtio-mem plug/unplug skipping KVM slot updates for memory blocks not aligned to a slot boundary. On plug, this could leave hotplugged memory inaccessible to the guest. On unplug, the guest could retain access to memory that Firecracker considered freed.
- #5794: Bound balloon statistics descriptor length to prevent a guest-controlled oversized descriptor from temporarily stalling the VMM event loop. Only affects microVMs with
stats_polling_interval_s > 0. - #5809: Fixed a bug on host Linux >= 5.16 for x86_64 guests using the
kvm-clockclock source causing the monotonic clock to jump on restore by the wall-clock time elapsed since the snapshot was taken. Users usingkvm-clockthat want to explicitly advance the clock withKVM_CLOCK_REALTIMEcan opt back in using the newclock_realtimeflag inLoadSnapshotAPI. - #5738: Fixed x86_64 snapshot serialization to cover the full KVM custom MSR range (0x4b564d00-0x4b564dff) instead of a small subset. Previously, some KVM MSRs such as MSR_KVM_ASYNC_PF_INT and MSR_KVM_ASYNC_PF_ACK were missing from snapshots, which could cause issues on restore.
- #5818: Enforce the virtio device initialization sequence in the PCI transport, matching the existing MMIO transport behavior. The PCI transport now validates device status transitions, rejects queue configuration writes outside the FEATURES_OK to DRIVER_OK window, rejects feature negotiation outside the DRIVER state, blocks re-initialization after a failed reset, and sets DEVICE_NEEDS_RESET when device activation fails.
- #5818: Reject device status writes that clear previously set bits in the MMIO transport, except for reset.
- #5884: Corrected the OpenAPI spec for
PATCH /balloon/hinting/startandPATCH /balloon/hinting/stopto declare204 No Contentinstead of200, matching the actual runtime response. - #5882: Fixed a race in the vsock device where, after snapshot restore, the RX queue could deliver data to the guest before it had acknowledged the TRANSPORT_RESET event, causing established connections to break.
Firecracker v1.15.1
Fixed
- #5762: Cap virtio-rng per-request entropy to 64 KiB. Previously, a guest could construct a descriptor chain that caused Firecracker to allocate more host memory than the guest actually provided, potentially leading to excessive host memory consumption.
- #5818: Enforce the virtio device initialization sequence in the PCI transport, matching the existing MMIO transport behavior. The PCI transport now validates device status transitions, rejects queue configuration writes outside the FEATURES_OK to DRIVER_OK window, rejects feature negotiation outside the DRIVER state, blocks re-initialization after a failed reset, and sets DEVICE_NEEDS_RESET when device activation fails. This fixes CVE-2026-5747.
- #5818: Reject device status writes that clear previously set bits in the MMIO transport, except for reset.
- #5780: Fixed missing
/sys/devices/system/cpu/cpu*/cache/*in aarch64 guests when running on host kernels >= 6.3 with guest kernels >= 6.1.156. - #5793: Fixed virtio-mem plug/unplug skipping KVM slot updates for memory blocks not aligned to a slot boundary. On plug, this could leave hotplugged memory inaccessible to the guest. On unplug, the guest could retain access to memory that Firecracker considered freed.
- #5794: Bound balloon statistics descriptor length to prevent a guest-controlled oversized descriptor from temporarily stalling the VMM event loop. Only affects microVMs with
stats_polling_interval_s > 0. - #5809: Fixed a bug on host Linux >= 5.16 for x86_64 guests using the
kvm-clockclock source causing the monotonic clock to jump on restore by the wall-clock time elapsed since the snapshot was taken. Users usingkvm-clockthat want to explicitly advance the clock withKVM_CLOCK_REALTIMEcan opt back in using the newclock_realtimeflag inLoadSnapshotAPI.
Firecracker v1.14.4
Fixed
- #5762: Cap virtio-rng per-request entropy to 64 KiB. Previously, a guest could construct a descriptor chain that caused Firecracker to allocate more host memory than the guest actually provided, potentially leading to excessive host memory consumption.
- #5818: Enforce the virtio device initialization sequence in the PCI transport, matching the existing MMIO transport behavior. The PCI transport now validates device status transitions, rejects queue configuration writes outside the FEATURES_OK to DRIVER_OK window, rejects feature negotiation outside the DRIVER state, blocks re-initialization after a failed reset, and sets DEVICE_NEEDS_RESET when device activation fails. This fixes CVE-2026-5747.
- #5818: Reject device status writes that clear previously set bits in the MMIO transport, except for reset.
- #5780: Fixed missing
/sys/devices/system/cpu/cpu*/cache/*in aarch64 guests when running on host kernels >= 6.3 with guest kernels >= 6.1.156. - #5793: Fixed virtio-mem plug/unplug skipping KVM slot updates for memory blocks not aligned to a slot boundary. On plug, this could leave hotplugged memory inaccessible to the guest. On unplug, the guest could retain access to memory that Firecracker considered freed.
- #5794: Bound balloon statistics descriptor length to prevent a guest-controlled oversized descriptor from temporarily stalling the VMM event loop. Only affects microVMs with
stats_polling_interval_s > 0. - #5809: Fixed a bug on host Linux >= 5.16 for x86_64 guests using the
kvm-clockclock source causing the monotonic clock to jump on restore by the wall-clock time elapsed since the snapshot was taken. Users usingkvm-clockthat want to explicitly advance the clock withKVM_CLOCK_REALTIMEcan opt back in using the newclock_realtimeflag inLoadSnapshotAPI.
Firecracker v1.14.3
Fixed
- #5739: Fixed validation of TCP SYN options length when MMDS is enabled.
Firecracker v1.15.0
Added
- #5510, #5593, #5564: Add support for the VMClock device. The implementation supports the snapshot safety features proposed here, but doesn't provide currently any clock-specific information for helping the guest synchronize its clocks. More information can be found in docs.
- #5574, #5671, #5674 #5690 Added Intel Granite Rapids as a supported and tested platform for Firecracker on 6.1 host kernel versions.
Changed
- #5564: which added support for VMClock, uses one extra GSI for the VMClock device itself which reduces the available GSIs for VirtIO devices. New maximum values is 92 devices on Aarch64 and 17 devices on x86.
- #5631: Update binary copy process inside Jailer to disallow symlinks and hardlinks at the destination path and change ownership of the copied binary to the specified uid/gid.
Fixed
- #5698: Fixed the possible ENXIO error which could occur during file open operation if the underlying file is FIFO without active readers already attached.
- #5688: Fixed vsock local port reuse across snapshot restore by saving the last used local port into the snapshot, so users need to regenerate snapshots.
- #5705: Fixed a bug that caused Firecracker to corrupt the memory files of differential snapshots for VMs with multiple memory slots. This affected VMs using memory hot-plugging or any x86 VMs with a memory size larger than 3GiB.
- #5739: Fixed validation of TCP SYN options length when MMDS is enabled.
Firecracker v1.14.2
Fixed
- #5698: Fixed the possible ENXIO error which could occur during file open operation if the underlying file is FIFO without active readers already attached.
- #5705: Fixed a bug that caused Firecracker to corrupt the memory files of differential snapshots for VMs with multiple memory slots. This affected VMs using memory hot-plugging or any x86 VMs with a memory size larger than 3GiB.