From ea32c72919e4f3feed0c283283f19c223cc6899c Mon Sep 17 00:00:00 2001 From: Cassie Wang Date: Mon, 2 Feb 2026 23:22:02 +0000 Subject: [PATCH] base: Handle errors during unix system_info calls BUG=NONE TEST=./tools/presubmit Change-Id: Ia528b4dcd478be82db3946ee8ef92b9258d895f0 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/7540107 Reviewed-by: Keiichi Watanabe Commit-Queue: Cassie Wang --- base/src/sys/unix/system_info.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/base/src/sys/unix/system_info.rs b/base/src/sys/unix/system_info.rs index e4aa01476..3747385d1 100644 --- a/base/src/sys/unix/system_info.rs +++ b/base/src/sys/unix/system_info.rs @@ -7,14 +7,23 @@ use libc::_SC_IOV_MAX; use libc::_SC_NPROCESSORS_CONF; use libc::_SC_PAGESIZE; +use crate::errno_result; use crate::Result; +// Comes from UIO_MAXIOV in "uio.h" +const IOV_MAX_DEFAULT: usize = 1024; + /// Safe wrapper for `sysconf(_SC_IOV_MAX)`. #[inline(always)] pub fn iov_max() -> usize { // SAFETY: // Trivially safe - unsafe { sysconf(_SC_IOV_MAX) as usize } + let iov_max = unsafe { sysconf(_SC_IOV_MAX) }; + if iov_max < 0 { + IOV_MAX_DEFAULT + } else { + iov_max as usize + } } /// Safe wrapper for `sysconf(_SC_PAGESIZE)`. @@ -22,7 +31,12 @@ pub fn iov_max() -> usize { pub fn pagesize() -> usize { // SAFETY: // Trivially safe - unsafe { sysconf(_SC_PAGESIZE) as usize } + // man sysconf says return value "Must not be less than 1." + let pagesize = unsafe { sysconf(_SC_PAGESIZE) }; + if pagesize <= 0 { + panic!("Error reading system page size, got invalid value."); + } + pagesize as usize } /// Returns the number of online logical cores on the system. @@ -30,5 +44,10 @@ pub fn pagesize() -> usize { pub fn number_of_logical_cores() -> Result { // SAFETY: // Safe because we pass a flag for this call and the host supports this system call - Ok(unsafe { sysconf(_SC_NPROCESSORS_CONF) } as usize) + let nprocs_conf = unsafe { sysconf(_SC_NPROCESSORS_CONF) }; + if nprocs_conf < 0 { + errno_result() + } else { + Ok(nprocs_conf as usize) + } }