From 7d580ef99d2a52250b384afd49c7f87ab66a8c84 Mon Sep 17 00:00:00 2001 From: Val213 <112376067+val213@users.noreply.github.com> Date: Sun, 31 Mar 2024 18:01:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dget=5Framdom=E7=9A=84?= =?UTF-8?q?=E9=95=BF=E5=BA=A6=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98()=20(#67?= =?UTF-8?q?7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/src/syscall/misc.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/kernel/src/syscall/misc.rs b/kernel/src/syscall/misc.rs index 281c9811..2f2dce77 100644 --- a/kernel/src/syscall/misc.rs +++ b/kernel/src/syscall/misc.rs @@ -1,11 +1,11 @@ -use alloc::vec::Vec; -use system_error::SystemError; - use crate::{ arch::{mm::LockedFrameAllocator, rand::rand}, libs::rand::GRandFlags, mm::allocator::page_frame::FrameAllocator, }; +use alloc::vec::Vec; +use core::cmp; +use system_error::SystemError; use super::{user_access::UserBufferWriter, Syscall}; @@ -63,7 +63,6 @@ impl Syscall { } /// ## 将随机字节填入buf - /// /// ### 该系统调用与linux不一致,因为目前没有其他随机源 pub fn get_random(buf: *mut u8, len: usize, flags: GRandFlags) -> Result { if flags.bits() == (GRandFlags::GRND_INSECURE.bits() | GRandFlags::GRND_RANDOM.bits()) { @@ -75,8 +74,11 @@ impl Syscall { let mut ret = Vec::new(); let mut count = 0; while count < len { + // 对 len - count 的长度进行判断,remain_len 小于4则循环次数和 remain_len 相等 + let remain_len = len - count; + let step = cmp::min(remain_len, 4); let rand = rand(); - for offset in 0..4 { + for offset in 0..step { ret.push((rand >> (offset * 2)) as u8); count += 1; }