mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-10-28 16:04:40 +00:00
agent/rustjail: Fix potentially uninitialized memory read in unsafe code
The previous code only checked the result of with_nix_path(), not statfs(), thus leading to an uninitialized memory read if statfs() failed. No functional change otherwise. Signed-off-by: Aurélien Bombo <abombo@microsoft.com>
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
use anyhow::{anyhow, Context, Result};
|
use anyhow::{anyhow, Context, Result};
|
||||||
use libc::uid_t;
|
use libc::uid_t;
|
||||||
|
use nix::errno::Errno;
|
||||||
use nix::fcntl::{self, OFlag};
|
use nix::fcntl::{self, OFlag};
|
||||||
#[cfg(not(test))]
|
#[cfg(not(test))]
|
||||||
use nix::mount;
|
use nix::mount;
|
||||||
@@ -336,25 +337,19 @@ fn check_proc_mount(m: &Mount) -> Result<()> {
|
|||||||
|
|
||||||
if mount_dest == PROC_PATH {
|
if mount_dest == PROC_PATH {
|
||||||
// only allow a mount on-top of proc if it's source is "proc"
|
// only allow a mount on-top of proc if it's source is "proc"
|
||||||
unsafe {
|
let mount_source = m.source().as_ref().unwrap().display().to_string();
|
||||||
let mut stats = MaybeUninit::<libc::statfs>::uninit();
|
|
||||||
let mount_source = m.source().as_ref().unwrap().display().to_string();
|
|
||||||
if mount_source
|
|
||||||
.with_nix_path(|path| libc::statfs(path.as_ptr(), stats.as_mut_ptr()))
|
|
||||||
.is_ok()
|
|
||||||
{
|
|
||||||
if stats.assume_init().f_type == PROC_SUPER_MAGIC {
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
|
|
||||||
return Err(anyhow!(format!(
|
let mut stats = MaybeUninit::<libc::statfs>::uninit();
|
||||||
|
let statfs_ret = mount_source
|
||||||
|
.with_nix_path(|path| unsafe { libc::statfs(path.as_ptr(), stats.as_mut_ptr()) })?;
|
||||||
|
|
||||||
|
return match Errno::result(statfs_ret) {
|
||||||
|
Ok(_) if unsafe { stats.assume_init().f_type } == PROC_SUPER_MAGIC => Ok(()),
|
||||||
|
Ok(_) | Err(_) => Err(anyhow!(format!(
|
||||||
"{} cannot be mounted to {} because it is not of type proc",
|
"{} cannot be mounted to {} because it is not of type proc",
|
||||||
&mount_source, &mount_dest
|
&mount_source, &mount_dest
|
||||||
)));
|
))),
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if mount_dest.starts_with(PROC_PATH) {
|
if mount_dest.starts_with(PROC_PATH) {
|
||||||
|
|||||||
Reference in New Issue
Block a user