fix: kernel: cnode: use checked shift right when matching guard

This commit is contained in:
Paul Pan 2024-06-17 00:42:23 +08:00
parent b62c378a38
commit acaa1b9f46

View File

@ -108,7 +108,8 @@ impl<'a> CNodeCap<'a> {
}); });
} }
let get_guard = || (cap_ptr >> (bits_remaining - guard_bits)) & MASK!(guard_bits); let get_guard =
|| cap_ptr.checked_shr((bits_remaining - guard_bits) as u32).unwrap_or_default() & MASK!(guard_bits);
if guard_bits > bits_remaining || get_guard() != cap_guard { if guard_bits > bits_remaining || get_guard() != cap_guard {
return Err(LookupFailure::GuardMismatch { return Err(LookupFailure::GuardMismatch {
bits_left: bits_remaining, bits_left: bits_remaining,