Visitar URL original
Releases · firecracker-microvm/firecracker · GitHub
Skip to content

Releases

Firecracker v1.18.0

Choose a tag to compare

@JamesC1305 JamesC1305 released this 09 Nov 14:08

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 new PUT /enclave API, in confidential or direct mode. See the Nitro Sandboxes documentation.

Firecracker v1.17.0

Choose a tag to compare

@ilstam ilstam released this 10 Sep 14:19

Added

  • #5891: Added support for virtio device reset.
  • #5983: Add two optional metrics fields, set via PUT /metrics or a config file: emit_id emits the microVM instance id under a top-level id field, and properties emits operator-defined key-value pairs under a top-level properties field. Each is opt-in and independent. See metrics documentation.
  • #6003: Added a new option Transparent for the huge_pages setting. If set, Firecracker will use transparent huge pages for the guest memory via madvise(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 bzImage guest 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_pages field to PUT /snapshot/load, allowing the restored microVM to reuse the snapshot's host page configuration or select None, Transparent, or 2M.
  • #6109: Added an optional sync_snapshot_files field to the PUT /snapshot/create API, defaulting to true. It controls whether the snapshot state and guest memory files are synced to disk (fsync) before the request returns. Setting it to false returns 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 always fsync'd regardless. See snapshot documentation.
  • #6116: On aarch64, enable KVM_CAP_ARM_WRITABLE_IMP_ID_REGS when 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 with Failed to set register ... Invalid argument because 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 Sync IO engine drives through the discard drive configuration field. See the block discard documentation.

Changed

  • #6115: Changed the T2S CPU template to set the FB_CLEAR bit of MSR_IA32_ARCH_CAPABILITIES to 1. This lets guest kernels recognize that the VERW instruction clears fill buffers, including on host kernels before v6.4 that cannot expose FLUSH_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 /vm with Paused then Resumed, without a snapshot). The resume kick armed the TRANSPORT_RESET RX 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-mem leaving 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 the MAP_NORESERVE flag, and aborts if the re-map fails.
  • #6174: Fixed virtio-mem discarding the whole hotpluggable region on every UNPLUG_ALL request, even when nothing was plugged. The discard is now skipped when the range has no plugged blocks.
  • #6176: Fixed virtio-mem leaving 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_EL1 information files copied into the chroot.
  • #6076: Fixed memory hotplug sizes silently wrapping when converted from MiB to bytes. requested_size_mib on PATCH /hotplug/memory and total_size_mib, block_size_mib and slot_size_mib on PUT /hotplug/memory are 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 EPOLLIN interest 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 advertising EPOLLOUT for 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 SIGPIPE is raised by Firecracker's own log write, for example when logging to stdout and the reader of that pipe exits. The logger now uses an RwLock, and sigpipe_handler only increments the signals.sigpipe metric instead of logging, so it no longer emits a Received 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

Choose a tag to compare

@ilstam ilstam released this 10 Sep 14:17

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 /vm with Paused then Resumed, without a snapshot). The resume kick armed the TRANSPORT_RESET RX 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-mem leaving 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 the MAP_NORESERVE flag, and aborts if the re-map fails.
  • #6174: Fixed virtio-mem discarding the whole hotpluggable region on every UNPLUG_ALL request, even when nothing was plugged. The discard is now skipped when the range has no plugged blocks.
  • #6176: Fixed virtio-mem leaving 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_EL1 information files copied into the chroot.
  • #6076: Fixed memory hotplug sizes silently wrapping when converted from MiB to bytes. requested_size_mib on PATCH /hotplug/memory and total_size_mib, block_size_mib and slot_size_mib on PUT /hotplug/memory are 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 EPOLLIN interest 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 advertising EPOLLOUT for 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 SIGPIPE is raised by Firecracker's own log write, for example when logging to stdout and the reader of that pipe exits. The logger now uses an RwLock, and sigpipe_handler only increments the signals.sigpipe metric instead of logging, so it no longer emits a Received 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

Choose a tag to compare

@not4s not4s released this 02 Jul 15:03
v1.16.1

Fixed

  • #5959: Reverted the use of O_NOFOLLOW for 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

Choose a tag to compare

@JamesC1305 JamesC1305 released this 04 Jun 15:09

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_limiter field on PUT /serial. A new metric is exposed under uart: 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_count metric 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_MTU using a new optional mtu field in the network-interfaces API. When set, a compatible guest driver will configure the interface with the specified MTU.
  • #5906: Add rng-seed FDT 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-clock clock source causing the monotonic clock to jump on restore by the wall-clock time elapsed since the snapshot was taken. Users using kvm-clock that want to explicitly advance the clock with KVM_CLOCK_REALTIME can opt back in using the new clock_realtime flag in LoadSnapshot API.
  • #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/start and PATCH /balloon/hinting/stop to declare 204 No Content instead of 200, 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

Choose a tag to compare

@JackThomson2 JackThomson2 released this 07 Apr 23:11

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-clock clock source causing the monotonic clock to jump on restore by the wall-clock time elapsed since the snapshot was taken. Users using kvm-clock that want to explicitly advance the clock with KVM_CLOCK_REALTIME can opt back in using the new clock_realtime flag in LoadSnapshot API.

Firecracker v1.14.4

Choose a tag to compare

@JackThomson2 JackThomson2 released this 07 Apr 23:10

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-clock clock source causing the monotonic clock to jump on restore by the wall-clock time elapsed since the snapshot was taken. Users using kvm-clock that want to explicitly advance the clock with KVM_CLOCK_REALTIME can opt back in using the new clock_realtime flag in LoadSnapshot API.

Firecracker v1.14.3

Choose a tag to compare

@JackThomson2 JackThomson2 released this 13 Mar 16:33

Fixed

  • #5739: Fixed validation of TCP SYN options length when MMDS is enabled.

Firecracker v1.15.0

Choose a tag to compare

@JackThomson2 JackThomson2 released this 09 Mar 17:40

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

Choose a tag to compare

@Manciukic Manciukic released this 27 Feb 16:29

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.