PackageTrack
Sign in Get early access

kvm-ioctls

Safe wrappers over KVM ioctls

0.25.0 4.8M downloads/mo #4601 most downloaded on crates.io rust-vmm/kvm

What this package is like to depend on

Last release 2 months ago

15 Jun 2026

Release timing varies

gaps range from 4 weeks to 8 months

Most releases are documented

notes for 26 of 30 stable releases

Nothing withdrawn

no release was ever pulled

7 years old

30 releases · first in 2019

3 releases in the last 12 months

see the full history below

Release timeline

30 releases · Feb 2019 to Jun 2026
2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 30
  1. 0.25.0 15 Jun 2026
    Release notes

    Added

    • Plumb through KVM_CAP_COUNTER_OFFSET as Cap::CounterOffset.
    • Plumb through KVM_CAP_DIRTY_LOG_RING as Cap::DirtyLogRing.
    • [#359] Add support for
      KVM_SET_MSR_FILTER vm ioctl on x86_64.

    Changed

    • Upgrade kvm-bindings to v0.14.1.
    Open source →
    Release notes

    Added

    • Plumb through KVM_CAP_COUNTER_OFFSET as Cap::CounterOffset.
    • Plumb through KVM_CAP_DIRTY_LOG_RING as Cap::DirtyLogRing.
    • [#359] Add support for KVM_SET_MSR_FILTER vm ioctl on x86_64.

    Changed

    • Upgrade kvm-bindings to v0.14.1.
    Open source →
  2. 0.24.0 15 Aug 2025
    Release notes

    Changelog

    v0.24.0

    Added

    • Plumb through KVM_CAP_X2APIC_API as X2ApicApi cap.
    • [#334] Added support for KVM_HAS_DEVICE_ATTR and KVM_SET_DEVICE_ATTR vm ioctl on aarch64.

    Changed

    • Update to Rust edition 2024
    • Update to kvm-bindings 0.14.0
    Open source →
    Release notes

    Added

    • Plumb through KVM_CAP_X2APIC_API as X2ApicApi cap.
    • [#334] Added support for KVM_HAS_DEVICE_ATTR and KVM_SET_DEVICE_ATTR vm ioctl on aarch64.
    Open source →
  3. 0.23.0 23 Jun 2025
    Release notes

    Changelog

    v0.23.0

    Added

    • [#322] Added VcpuFd::nested_state()and VcpuFd::set_nested_state() to work with nested KVM state. Only works on x86. The helper type KvmNestedStateBuffermakes these new functions easily usable.

    Changed

    • Upgrade kvm-bindings to v0.13.0
    Open source →
    Release notes

    Added

    • [#322] Added VcpuFd::nested_state()and VcpuFd::set_nested_state() to work with nested KVM state. Only works on x86. The helper type KvmNestedStateBuffermakes these new functions easily usable.

    Changed

    • Upgrade kvm-bindings to v0.13.0
    Open source →
  4. 0.22.1 25 Sep 2025

    Nothing published for this version

  5. 0.22.0 29 May 2025
    Release notes

    Changelog

    v0.22.0

    Changed

    • [#324] Upgrade kvm-bindings to v0.12.0
    • [#323] Upgrade vmm-sys-util to v0.14.0
    Open source →
    Release notes

    Changed

    • [#324] Upgrade kvm-bindings to v0.12.0
    • [#323] Upgrade vmm-sys-util to v0.14.0
    Open source →
  6. 0.21.0 07 Mar 2025
    Release notes

    Changelog

    v0.21.0

    Added

    • [#310]: Added support for KVM_CAP_XSAVE2 and the KVM_GET_XSAVE2 ioctl.

    Changed

    • [#310]: Changed set_xsave() unsafe because the C kvm_xsave struct was extended to have a flexible array member (FAM) in the end in Linux 5.16 and KVM_SET_XSAVE may copy data beyond the traditional size (i.e. 4096 bytes). If any features are enabled dynamically on Linux 5.16+, it is recommended to use set_xsave2() instead.
    Open source →
    Release notes

    Added

    • [#310]: Added support for KVM_CAP_XSAVE2 and the KVM_GET_XSAVE2 ioctl.

    Changed

    • [#310]: Changed set_xsave() unsafe because the C kvm_xsave struct was extended to have a flexible array member (FAM) in the end in Linux 5.16 and KVM_SET_XSAVE may copy data beyond the traditional size (i.e. 4096 bytes). If any features are enabled dynamically on Linux 5.16+, it is recommended to use set_xsave2() instead.
    • [#325]]: Changed set_gsi_routing() to use the newly created KvmIrqRouting type which is a FamStruct wrapper over kvm_irq_routing. This way we can safely call the ioctl without relying on the caller making sure the memory layout of kvm_irq_routing is sane.
    Open source →
  7. 0.20.0 17 Jan 2025
    Release notes

    Added

    • [#288]: Introduce Cap::GuestMemfd, Cap::MemoryAttributes and Cap::UserMemory2 capabilities enum variants for use with VmFd::check_extension.
    • [#288]: Introduce VmFd::check_extension_raw and VmFd::check_extension_int to allow KVM_CHECK_EXTENSION to return integer.

    Changed

    • [#305]: Updated kvm-bindings to 0.11.0.

    Fixed

    • [#298]: Fixed incorrect usage of ioctl_wit_ref in the create_device method. Replace it with ioctl_wit_mut_ref as the passed parameter may be mutated by the ioctl.
    Open source →
  8. 0.19.1 10 Dec 2024

    Nothing published for this version

  9. 0.19.0 23 Oct 2024
    Release notes

    Added

    • [#275]: Introduce riscv64 ioctls.

    Removed

    • [#289]: Drop x86 32-bit and arm 32-bit support.

    Changed

    • [#273]: DeviceFd::get_device_attr is now marked as unsafe.
    • [#277]: Updated kvm-bindings to 0.9.1.
    Open source →
  10. 0.18.0 02 Aug 2024
    Release notes

    Added

    • [#264]: Added KVM_SET_USER_MEMORY_REGION2, KVM_CREATE_GUEST_MEMFD and KVM_SET_MEMORY_ATTRIBUTES ioctls.
    • [#267]: Added HypercallExit field to VcpuExit::Hypercall and added ExitHypercall to Cap.
    • [#270]: Added MemoryFaultInfo to Cap and propagated MemoryFault exit reason in KVM_RUN.
    Open source →
  11. 0.17.0 23 Apr 2024
    Release notes

    Changed

    • [#255]: Fixed a soundness issue when accessing the kvm_run struct. VcpuFd::run() and VcpuFd::set_kvm_immediate_exit() now take &mut self as a consequence.
    • [#260]: Updated kvm-bindings to 0.8.0.
    Open source →
  12. 0.16.0 03 Jan 2024
    Release notes

    Added

    • [#242] x86: add support for SMI injection via Vcpu::smi() (KVM_SMI ioctl).
    • [#241] Add support for userspace MSR handling.
    • [#246] Add support for userspace NMI injection (KVM_NMI ioctl).
    • [#244] add support for coalesced MMIO (KVM_CAP_COALESCED_MMIO / KVM_CAP_COALESCED_PIO)

    Changed

    • [#234] vcpu: export reg_size as a public method.
    • [#243] derived the Copy trait for IoEventAddress and NoDatamatch.
    Open source →
  13. 0.15.0 08 Aug 2023
    Release notes

    Added

    • [#230] Added check_extension_raw method to use raw integer values instead of Cap enum.
    • [#228] arm64: add support for vCPU SVE feature.
    • [#219] Add Cap::ArmPtrAuthAddress and Cap::ArmPtrAuthGeneric capabilities.
    Open source →
  14. 0.14.0 29 May 2023
    Release notes

    Added

    • [#219] Support for KVM_GET_MSR_FEATURE_INDEX_LIST and KVM_GET_MSRS system ioctls.
    • [#221] Add Cap::ArmPmuV3.

    Changed

    • [#223] aarch64: Updated get/set_one_reg to support different registers sizes through byte slices.
    Open source →
  15. 0.13.0 31 Jan 2023
    Release notes

    Added

    • [#213] Add Kvm::new_with_path() and Kvm::open_with_cloexec_at() to allow using kvm device files other than /dev/kvm.
    Open source →
  16. 0.12.1 29 Oct 2025
    Release notes

    Changelog

    v0.12.1

    Fixed

    • [#298]: Fixed incorrect
      usage of ioctl_with_ref in the create_device method. Replace it
      with ioctl_with_mut_ref as the passed parameter may be mutated by
      the ioctl.
    Open source →
  17. 0.12.0 11 Nov 2022
    Release notes

    Added

    • [#187] Support for KVM_SET_IDENTITY_MAP_ADDR
    • Derive Debug for all exported structs and enums
    • [#189] Expose KVM_SET_ and KVM_HAS_DEVICE_ATTR for vcpu
    • [#191] Add KVM_TRANSLATE support and the translate_gva function that translates guest virtual address to the physical address
    • [#190] Enable usage of sync_regs to allow bulk getting and setting of general purpose registers, reducing the number of ioctls needed.
    • [#198] Return details about KVM_EXIT_FAIL_ENTRY in vCPU run
    • [#199] Add register_irqfd_with_resample so that irqfd + resaplefd can be registered through KVM_IRQFD
    • [#202] Add KVM_CAP_GUEST_DEBUG_HVM_DPS/WPS
    • [#202] Added check_extension_int which allows checking the capabilities that return numbers instead of booleans

    Changed

    • Updated vmm-sys-util to 0.11.0
    • Updated kvm-bindings to 0.6.0
    • Upgraded to rust 2021 edition
    • Switched to specifying dependencies using caret requirements instead of comparision requirements
    • [#195] Do not panic on unsupported KVM_EXIT reason
    • [#196] Expose a mutable reference to the kvm_run structure to allow proper handling of unsupported exit reasons
    • [#200] Fix wrong target_arch gate preventing set_guest_debug from being exported on ARM
    • [#206] use u128 in get/set_on_reg
    Open source →
  18. 0.11.0 18 Nov 2021
    Release notes

    Added

    • [#178] Support for the AMD Security Encrypted Virtualization (SEV) through the following VM ioctls: encrypt_op, encrypt_op_sev, register_enc_memory_region and unregister_enc_memory_region.
    • [#184] DeviceFd now derives Debug.
    Open source →
  19. 0.10.0 24 Aug 2021
    Release notes

    Changed

    • Now depends on kvm-bindings >=0.5.0 which replaced the v4.20 KVM bindings with the v5.13 ones.
    • Updated VcpuExit::Debug to return architecture specific information for the debug event.
    Open source →
  20. 0.9.0 14 May 2021
    Release notes

    Added

    • Support for accessing and controlling the Time Stamp Counter on x86 platforms through the get_tsc_khz and set_tsc_khz functions.

    Changed

    • Updated create_vm on aarch64 to create a VM fd from the KVM fd using the host's maximum IPA size.
    Open source →
  21. 0.8.0 08 Mar 2021
    Release notes

    Added

    • Support for specifying VM type (an opaque platform and architecture specific constant) when creating a VM (KVM_CREATE_VM ioctl) via the Kvm::create_vm_with_type function.

    Changed

    • Now depends on kvm-bindings >=0.4.0 to support use of a newer vmm-sys-utils dependency.
    Open source →
  22. 0.7.0 25 Feb 2021
    Release notes

    Added

    • Support for the system API that returns the maximum allowed vCPU ID (KVM_CAP_MAX_VCPU_ID).
    • Support for KVM_MEMORY_ENCRYPT_OP.

    Fixed

    • [#119]: Disallow invalid number of cpuid entries to be passed to get_supported_cpuid and get_emulated_cpuid.

    Changed

    • [#123]: Updated create_vcpu to use u64 as the parameter for the number of vCPUs.
    Open source →
  23. 0.6.1 04 Mar 2021

    Nothing published for this version

  24. 0.6.0 03 Dec 2020
    Release notes

    Added

    • Support for the vcpu ioctls: KVM_SET_GUEST_DEBUG, KVM_KVMCLOCK_CTRL, and KVM_GET_REG_LIST.
    • Support for the vm ioctl KVM_GET_DEVICE_ATTR.
    • Support for the device ioctl KVM_HAS_DEVICE_ATTR.
    • Support for VcpuExit::Debug.
    • Support for enabling vcpu capabilities using Vcpu::enable_cap.
    • Support for checking Hyper-V (HypervSynic and HypervSynic2), MSI (MsiDevid), and IPA Size (ArmVmIPASize) capabilities. using kvm.check_extension.
    • Support for checking the VM capabilities via Vm::check_extension.
    • Create a VM with flexible IPA size using Kvm::create_vm_with_ipa_size.

    Removed

    • Removed Kvm::new_with_fd_number. The same functionality is offered by the Kvm FromRawFd trait implementation.

    Changed

    • The VM ioctl unregister_ioevent now correctly unregisters the events that correspond to the data match passed as a parameter.
    • The SystemEvent Vcpu Exit now also contains the relevant type and flags.
    • Updated get_dirty_log such that it does not assume the page size is 4K, but instead reads it using libc::sysconf.
    Open source →
  25. 0.5.0 29 Jan 2020
    Release notes

    Added

    • Support for the vcpu ioctls KVM_GET/SET_VCPU_EVENTS and KVM_GET_DIRTY_LOG on aarch64.
    • Support for the vcpu ioctl KVM_IRQ_LINE.
    Open source →
  26. 0.4.0 28 Nov 2019
    Release notes

    Added

    • Support for unregistering ioeventfds through KVM_IOEVENTFD.

    Changed

    • Functions working with event FDs now require vmm_sys_util::eventfd::EventFd in their interface instead of RawFd.
    • Functions working with FAM structs kvm_msr_list and kvm_msrs, were changed to work with their respective safe counterparts MsrList and respectively Msrs.
    • Now exporting kvm_ioctls::Error type definition so that users of this crate can create their own wrapping errors without having to know the Error type used internally by this crate.
    • No longer exporting kvm_ioctls::Result. Users of this crate should not have to use kvm_ioctls::Result outside the crate.
    • kvm_ioctls::Error now works with errno::Error instead of io::Error.

    Removed

    • CpuId safe wrapper over FAM struct kvm_cpuid2. The safe wrapper is now provided by the kvm_bindings crate starting with v0.2.0.
    • KVM_MAX_MSR_ENTRIES and MAX_KVM_CPUID_ENTRIES. Equivalent constants are provided by the kvm_bindings crate starting with v0.2.0.
    Open source →
  27. 0.3.0 28 Oct 2019
    Release notes

    Added

    • Support for setting vcpu kvm_immediate_exit flag
    • Support for the vcpu ioctl KVM_GET_CPUID2
    • Support for the vcpu ioctl KVM_GET_MP_STATE
    • Support for the vcpu ioctl KVM_SET_MP_STATE
    • Support for the vcpu ioctl KVM_GET_VCPU_EVENTS
    • Support for the vcpu ioctl KVM_SET_VCPU_EVENTS
    • Support for the vcpu ioctl KVM_GET_DEBUGREGS
    • Support for the vcpu ioctl KVM_SET_DEBUGREGS
    • Support for the vcpu ioctl KVM_GET_XSAVE
    • Support for the vcpu ioctl KVM_SET_XSAVE
    • Support for the vcpu ioctl KVM_GET_XCRS
    • Support for the vcpu ioctl KVM_SET_XCRS
    • Support for the vm ioctl KVM_GET_IRQCHIP
    • Support for the vm ioctl KVM_SET_IRQCHIP
    • Support for the vm ioctl KVM_GET_CLOCK
    • Support for the vm ioctl KVM_SET_CLOCK
    • Support for the vm ioctl KVM_GET_PIT2
    • Support for the vm ioctl KVM_SET_PIT2
    • Support for the vcpu ioctl KVM_GET_ONE_REG

    Changed

    • Function offering support for KVM_SET_MSRS also returns the number of MSR entries successfully written.
    Open source →
  28. 0.2.0 25 Jun 2019
    Release notes

    Added

    • Add support for KVM_ENABLE_CAP.
    • Add support for KVM_SIGNAL_MSI.

    Fixed

    • Fix bug in KvmRunWrapper. The memory for kvm_run struct was not unmapped after the KvmRunWrapper object got out of scope.
    • Return proper value when receiving the EOI KVM exit.
    • Mark set_user_memory_region as unsafe.
    Open source →
  29. 0.1.0 17 Apr 2019
    Release notes

    First release of the kvm-ioctls crate.

    The kvm-ioctls crate provides safe wrappers over the KVM API, a set of ioctls used for creating and configuring Virtual Machines (VMs) on Linux. The ioctls are accessible through four structures:

    • Kvm - wrappers over system ioctls
    • VmFd - wrappers over VM ioctls
    • VcpuFd - wrappers over vCPU ioctls
    • DeviceFd - wrappers over device ioctls

    The kvm-ioctls can be used on x86_64 and aarch64. Right now the aarch64 support is considered experimental.

    Open source →
  30. 0.0.1 28 Feb 2019

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive