From e01e604ea90756d219bbb65775c841debb2d6454 Mon Sep 17 00:00:00 2001 From: Djordje Lukic Date: Tue, 31 Jan 2023 17:47:17 +0100 Subject: [PATCH] Use saturating_sub instead of - for unsigned ints This fixes a panic if the operation with the unsigned ints would result in a negative number Signed-off-by: Djordje Lukic --- crates/libcgroups/src/systemd/cpu.rs | 2 +- crates/libcgroups/src/v1/hugetlb.rs | 2 +- crates/libcgroups/src/v2/cpu.rs | 2 +- crates/libcgroups/src/v2/hugetlb.rs | 2 +- crates/libcgroups/src/v2/io.rs | 2 +- .../integration_test/src/tests/cgroups/cpu/v1.rs | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/libcgroups/src/systemd/cpu.rs b/crates/libcgroups/src/systemd/cpu.rs index 32aaec048..2bf3d6e02 100644 --- a/crates/libcgroups/src/systemd/cpu.rs +++ b/crates/libcgroups/src/systemd/cpu.rs @@ -77,7 +77,7 @@ pub fn convert_shares_to_cgroup2(shares: u64) -> u64 { return 0; } - 1 + ((shares - 2) * 9999) / 262142 + 1 + ((shares.saturating_sub(2)) * 9999) / 262142 } #[cfg(test)] diff --git a/crates/libcgroups/src/v1/hugetlb.rs b/crates/libcgroups/src/v1/hugetlb.rs index 501cb3778..6419f085a 100644 --- a/crates/libcgroups/src/v1/hugetlb.rs +++ b/crates/libcgroups/src/v1/hugetlb.rs @@ -75,7 +75,7 @@ impl HugeTlb { } fn is_power_of_two(number: u64) -> bool { - (number != 0) && (number & (number - 1)) == 0 + (number != 0) && (number & (number.saturating_sub(1))) == 0 } fn stats_for_page_size(cgroup_path: &Path, page_size: &str) -> Result { diff --git a/crates/libcgroups/src/v2/cpu.rs b/crates/libcgroups/src/v2/cpu.rs index a94ef487f..a88c04238 100644 --- a/crates/libcgroups/src/v2/cpu.rs +++ b/crates/libcgroups/src/v2/cpu.rs @@ -112,7 +112,7 @@ impl Cpu { return 0; } - let weight = 1 + ((shares - 2) * 9999) / 262142; + let weight = 1 + ((shares.saturating_sub(2)) * 9999) / 262142; weight.min(MAX_CPU_WEIGHT) } diff --git a/crates/libcgroups/src/v2/hugetlb.rs b/crates/libcgroups/src/v2/hugetlb.rs index f147dbfd3..256b65bca 100644 --- a/crates/libcgroups/src/v2/hugetlb.rs +++ b/crates/libcgroups/src/v2/hugetlb.rs @@ -62,7 +62,7 @@ impl HugeTlb { } fn is_power_of_two(number: u64) -> bool { - (number != 0) && (number & (number - 1)) == 0 + (number != 0) && (number & (number.saturating_sub(1))) == 0 } fn stats_for_page_size(cgroup_path: &Path, page_size: &str) -> Result { diff --git a/crates/libcgroups/src/v2/io.rs b/crates/libcgroups/src/v2/io.rs index caa99d5cf..167572d79 100644 --- a/crates/libcgroups/src/v2/io.rs +++ b/crates/libcgroups/src/v2/io.rs @@ -89,7 +89,7 @@ impl Io { if v == 0 { return 0; } - 1 + (v - 10) * 9999 / 990 + 1 + (v.saturating_sub(10)) * 9999 / 990 } fn io_max_path(path: &Path) -> PathBuf { diff --git a/tests/rust-integration-tests/integration_test/src/tests/cgroups/cpu/v1.rs b/tests/rust-integration-tests/integration_test/src/tests/cgroups/cpu/v1.rs index 5bf4d708c..724121dad 100644 --- a/tests/rust-integration-tests/integration_test/src/tests/cgroups/cpu/v1.rs +++ b/tests/rust-integration-tests/integration_test/src/tests/cgroups/cpu/v1.rs @@ -35,7 +35,7 @@ fn get_realtime_runtime() -> Option { fn test_cpu_cgroups() -> TestResult { let cgroup_name = "test_cpu_cgroups"; // Kernel counts 0 as a CPU, so on a system with 8 logical cores you will need `0-7` range set. - let cpu_range = format!("0-{}", num_cpus::get() - 1); + let cpu_range = format!("0-{}", num_cpus::get().saturating_sub(1)); let realtime_period = get_realtime_period(); let realtime_runtime = get_realtime_runtime();