Undefined behaviour in `kvm_ioctls::ioctls::vm::VmFd::create_device`
Moderate severity
GitHub Reviewed
Published
Dec 23, 2024
to the GitHub Advisory Database
•
Updated Dec 23, 2024
Description
Published to the GitHub Advisory Database
Dec 23, 2024
Reviewed
Dec 23, 2024
Last updated
Dec 23, 2024
An issue was identified in the
VmFd::create_device function
, leading to undefined behavior and miscompilations on rustc 1.82.0 and newer due to the function's violation of Rust's pointer safety rules.The function downcasted a mutable reference to its
struct kvm_create_device
argument to an immutable pointer, and then proceeded to pass this pointer to a mutating system call. Rustc 1.82.0 and newer elides subsequent reads of this structure's fields, meaning code will not see the value written by the kernel into thefd
member. Instead, the code will observe the value that this field was initialized to prior to callingVmFd::create_device
(usually, 0).The issue started in kvm-ioctls 0.1.0 and was fixed in 0.19.1 by correctly using
a mutable pointer.
References