4
1
mirror of https://github.com/DragonOS-Community/DragonOS.git synced 2025-06-21 10:36:34 +00:00

修复内核的clippy检查报错 (#637)

修复内核的clippy检查报错
---------

Co-authored-by: Samuel Dai <947309196@qq.com>
Co-authored-by: Donkey Kane <109840258+xiaolin2004@users.noreply.github.com>
Co-authored-by: themildwind <107623059+themildwind@users.noreply.github.com>
Co-authored-by: GnoCiYeH <heyicong@dragonos.org>
Co-authored-by: MemoryShore <105195940+MemoryShore@users.noreply.github.com>
Co-authored-by: 曾俊 <110876916+ZZJJWarth@users.noreply.github.com>
Co-authored-by: sun5etop <146408999+sun5etop@users.noreply.github.com>
Co-authored-by: hmt <114841534+1037827920@users.noreply.github.com>
Co-authored-by: laokengwt <143977175+laokengwt@users.noreply.github.com>
Co-authored-by: TTaq <103996388+TTaq@users.noreply.github.com>
Co-authored-by: Jomo <2512364506@qq.com>
Co-authored-by: Samuel Dai <samuka007@qq.com>
Co-authored-by: sspphh <112558065+sspphh@users.noreply.github.com>
This commit is contained in:
LoGin
2024-03-22 23:26:39 +08:00
committed by GitHub
parent 4695947e1b
commit b5b571e026
175 changed files with 1820 additions and 2155 deletions
kernel
crates
bitmap
unified-init
macros
src
arch
driver
exception
filesystem
include
bindings
init
ipc
lib.rs
libs
mm
net
process
sched
smp
syscall

@ -144,7 +144,7 @@ impl Syscall {
let fd = args[0] as i32;
let buf_vaddr = args[1];
let len = args[2];
let from_user = frame.from_user();
let from_user = frame.is_from_user();
let mut user_buffer_writer =
UserBufferWriter::new(buf_vaddr as *mut u8, len, from_user)?;
@ -155,7 +155,7 @@ impl Syscall {
let fd = args[0] as i32;
let buf_vaddr = args[1];
let len = args[2];
let from_user = frame.from_user();
let from_user = frame.is_from_user();
let user_buffer_reader =
UserBufferReader::new(buf_vaddr as *const u8, len, from_user)?;
@ -178,7 +178,7 @@ impl Syscall {
let offset = args[3];
let mut user_buffer_writer =
UserBufferWriter::new(buf_vaddr as *mut u8, len, frame.from_user())?;
UserBufferWriter::new(buf_vaddr as *mut u8, len, frame.is_from_user())?;
let buf = user_buffer_writer.buffer(0)?;
Self::pread(fd, buf, len, offset)
}
@ -190,7 +190,7 @@ impl Syscall {
let offset = args[3];
let user_buffer_reader =
UserBufferReader::new(buf_vaddr as *const u8, len, frame.from_user())?;
UserBufferReader::new(buf_vaddr as *const u8, len, frame.is_from_user())?;
let buf = user_buffer_reader.read_from_user(0)?;
Self::pwrite(fd, buf, len, offset)
@ -233,7 +233,7 @@ impl Syscall {
let len = args[2];
let virt_addr: VirtAddr = VirtAddr::new(buf_vaddr);
// 判断缓冲区是否来自用户态,进行权限校验
let res = if frame.from_user() && verify_area(virt_addr, len as usize).is_err() {
let res = if frame.is_from_user() && verify_area(virt_addr, len).is_err() {
// 来自用户态而buffer在内核态这样的操作不被允许
Err(SystemError::EPERM)
} else if buf_vaddr == 0 {
@ -256,8 +256,8 @@ impl Syscall {
let virt_argv_ptr = VirtAddr::new(argv_ptr);
let virt_env_ptr = VirtAddr::new(env_ptr);
// 权限校验
if frame.from_user()
&& (verify_area(virt_path_ptr, MAX_PATHLEN as usize).is_err()
if frame.is_from_user()
&& (verify_area(virt_path_ptr, MAX_PATHLEN).is_err()
|| verify_area(virt_argv_ptr, PAGE_4K_SIZE as usize).is_err())
|| verify_area(virt_env_ptr, PAGE_4K_SIZE as usize).is_err()
{
@ -299,10 +299,9 @@ impl Syscall {
let rem = args[1] as *mut TimeSpec;
let virt_req = VirtAddr::new(req as usize);
let virt_rem = VirtAddr::new(rem as usize);
if frame.from_user()
&& (verify_area(virt_req, core::mem::size_of::<TimeSpec>() as usize).is_err()
|| verify_area(virt_rem, core::mem::size_of::<TimeSpec>() as usize)
.is_err())
if frame.is_from_user()
&& (verify_area(virt_req, core::mem::size_of::<TimeSpec>()).is_err()
|| verify_area(virt_rem, core::mem::size_of::<TimeSpec>()).is_err())
{
Err(SystemError::EFAULT)
} else {
@ -376,12 +375,12 @@ impl Syscall {
let sig = args[0] as c_int;
let act = args[1];
let old_act = args[2];
Self::sigaction(sig, act, old_act, frame.from_user())
Self::sigaction(sig, act, old_act, frame.is_from_user())
}
SYS_GETPID => Self::getpid().map(|pid| pid.into()),
SYS_SCHED => Self::sched(frame.from_user()),
SYS_SCHED => Self::sched(frame.is_from_user()),
SYS_DUP => {
let oldfd: i32 = args[0] as c_int;
Self::dup(oldfd)
@ -397,10 +396,10 @@ impl Syscall {
SYS_SOCKET => Self::socket(args[0], args[1], args[2]),
SYS_SETSOCKOPT => {
let optval = args[3] as *const u8;
let optlen = args[4] as usize;
let optlen = args[4];
let virt_optval = VirtAddr::new(optval as usize);
// 验证optval的地址是否合法
if verify_area(virt_optval, optlen as usize).is_err() {
if verify_area(virt_optval, optlen).is_err() {
// 地址空间超出了用户空间的范围,不合法
Err(SystemError::EFAULT)
} else {
@ -421,15 +420,15 @@ impl Syscall {
}
// 验证optlen的地址是否合法
if verify_area(virt_optlen, core::mem::size_of::<u32>() as usize).is_err() {
if verify_area(virt_optlen, core::mem::size_of::<u32>()).is_err() {
// 地址空间超出了用户空间的范围,不合法
return Err(SystemError::EFAULT);
}
return Ok(());
};
let r = security_check();
if r.is_err() {
Err(r.unwrap_err())
if let Err(e) = r {
Err(e)
} else {
Self::getsockopt(args[0], args[1], args[2], optval, optlen as *mut u32)
}
@ -437,10 +436,10 @@ impl Syscall {
SYS_CONNECT => {
let addr = args[1] as *const SockAddr;
let addrlen = args[2] as usize;
let addrlen = args[2];
let virt_addr = VirtAddr::new(addr as usize);
// 验证addr的地址是否合法
if verify_area(virt_addr, addrlen as usize).is_err() {
if verify_area(virt_addr, addrlen).is_err() {
// 地址空间超出了用户空间的范围,不合法
Err(SystemError::EFAULT)
} else {
@ -449,10 +448,10 @@ impl Syscall {
}
SYS_BIND => {
let addr = args[1] as *const SockAddr;
let addrlen = args[2] as usize;
let addrlen = args[2];
let virt_addr = VirtAddr::new(addr as usize);
// 验证addr的地址是否合法
if verify_area(virt_addr, addrlen as usize).is_err() {
if verify_area(virt_addr, addrlen).is_err() {
// 地址空间超出了用户空间的范围,不合法
Err(SystemError::EFAULT)
} else {
@ -462,17 +461,14 @@ impl Syscall {
SYS_SENDTO => {
let buf = args[1] as *const u8;
let len = args[2] as usize;
let len = args[2];
let flags = args[3] as u32;
let addr = args[4] as *const SockAddr;
let addrlen = args[5] as usize;
let addrlen = args[5];
let virt_buf = VirtAddr::new(buf as usize);
let virt_addr = VirtAddr::new(addr as usize);
// 验证buf的地址是否合法
if verify_area(virt_buf, len as usize).is_err() {
// 地址空间超出了用户空间的范围,不合法
Err(SystemError::EFAULT)
} else if verify_area(virt_addr, addrlen as usize).is_err() {
if verify_area(virt_buf, len).is_err() || verify_area(virt_addr, addrlen).is_err() {
// 地址空间超出了用户空间的范围,不合法
Err(SystemError::EFAULT)
} else {
@ -483,7 +479,7 @@ impl Syscall {
SYS_RECVFROM => {
let buf = args[1] as *mut u8;
let len = args[2] as usize;
let len = args[2];
let flags = args[3] as u32;
let addr = args[4] as *mut SockAddr;
let addrlen = args[5] as *mut usize;
@ -510,8 +506,8 @@ impl Syscall {
return Ok(());
};
let r = security_check();
if r.is_err() {
Err(r.unwrap_err())
if let Err(e) = r {
Err(e)
} else {
let buf = unsafe { core::slice::from_raw_parts_mut(buf, len) };
Self::recvfrom(args[0], buf, flags, addr, addrlen as *mut u32)
@ -522,8 +518,11 @@ impl Syscall {
let msg = args[1] as *mut MsgHdr;
let flags = args[2] as u32;
let mut user_buffer_writer =
UserBufferWriter::new(msg, core::mem::size_of::<MsgHdr>(), frame.from_user())?;
let mut user_buffer_writer = UserBufferWriter::new(
msg,
core::mem::size_of::<MsgHdr>(),
frame.is_from_user(),
)?;
let buffer = user_buffer_writer.buffer::<MsgHdr>(0)?;
let msg = &mut buffer[0];
@ -604,8 +603,8 @@ impl Syscall {
return Ok(());
};
let r = security_check();
if r.is_err() {
Err(r.unwrap_err())
if let Err(e) = r {
Err(e)
} else {
let buf = unsafe { core::slice::from_raw_parts_mut(buf, size) };
Self::getcwd(buf).map(|ptr| ptr.data())
@ -617,7 +616,7 @@ impl Syscall {
SYS_GETPPID => Self::getppid().map(|pid| pid.into()),
SYS_FSTAT => {
let fd = args[0] as i32;
let kstat = args[1] as *mut PosixKstat;
let kstat: *mut PosixKstat = args[1] as *mut PosixKstat;
let vaddr = VirtAddr::new(kstat as usize);
// FIXME 由于c中的verify_area与rust中的verify_area重名所以在引入时加了前缀区分
// TODO 应该将用了c版本的verify_area都改为rust的verify_area
@ -784,7 +783,7 @@ impl Syscall {
let mut user_buffer_writer = UserBufferWriter::new(
args[3] as *mut c_int,
core::mem::size_of::<[c_int; 2]>(),
frame.from_user(),
frame.is_from_user(),
)?;
let fds = user_buffer_writer.buffer::<i32>(0)?;
Self::socketpair(args[0], args[1], args[2], fds)
@ -833,7 +832,7 @@ impl Syscall {
let syslog_action_type = args[0];
let buf_vaddr = args[1];
let len = args[2];
let from_user = frame.from_user();
let from_user = frame.is_from_user();
let mut user_buffer_writer =
UserBufferWriter::new(buf_vaddr as *mut u8, len, from_user)?;

@ -49,7 +49,7 @@ pub unsafe fn copy_from_user(dst: &mut [u8], src: VirtAddr) -> Result<usize, Sys
let src: &[u8] = core::slice::from_raw_parts(src.data() as *const u8, dst.len());
// 拷贝数据
dst.copy_from_slice(&src);
dst.copy_from_slice(src);
return Ok(dst.len());
}
@ -95,7 +95,7 @@ pub fn check_and_clone_cstr(
}
buffer.push(c[0]);
}
return Ok(String::from_utf8(buffer).map_err(|_| SystemError::EFAULT)?);
String::from_utf8(buffer).map_err(|_| SystemError::EFAULT)
}
/// 检查并从用户态拷贝一个 C 字符串数组
@ -182,7 +182,7 @@ impl<'a> UserBufferReader<'a> {
/// @return 返回用户空间数据的切片(对单个结构体就返回长度为一的切片)
///
pub fn read_from_user<T>(&self, offset: usize) -> Result<&[T], SystemError> {
return self.convert_with_offset(&self.buffer, offset);
return self.convert_with_offset(self.buffer, offset);
}
/// 从用户空间读取一个指定偏移量的数据(到变量中)
///
@ -190,7 +190,7 @@ impl<'a> UserBufferReader<'a> {
/// @return 返回用户空间数据的引用
///
pub fn read_one_from_user<T>(&self, offset: usize) -> Result<&T, SystemError> {
return self.convert_one_with_offset(&self.buffer, offset);
return self.convert_one_with_offset(self.buffer, offset);
}
/// 从用户空间拷贝数据(到指定地址中)
@ -203,7 +203,7 @@ impl<'a> UserBufferReader<'a> {
dst: &mut [T],
offset: usize,
) -> Result<usize, SystemError> {
let data = self.convert_with_offset(&self.buffer, offset)?;
let data = self.convert_with_offset(self.buffer, offset)?;
dst.copy_from_slice(data);
return Ok(dst.len());
}
@ -218,7 +218,7 @@ impl<'a> UserBufferReader<'a> {
dst: &mut T,
offset: usize,
) -> Result<(), SystemError> {
let data = self.convert_one_with_offset::<T>(&self.buffer, offset)?;
let data = self.convert_one_with_offset::<T>(self.buffer, offset)?;
dst.clone_from(data);
return Ok(());
}
@ -229,9 +229,8 @@ impl<'a> UserBufferReader<'a> {
///
/// - `offset`:字节偏移量
pub fn buffer<T>(&self, offset: usize) -> Result<&[T], SystemError> {
Ok(self
.convert_with_offset::<T>(self.buffer, offset)
.map_err(|_| SystemError::EINVAL)?)
self.convert_with_offset::<T>(self.buffer, offset)
.map_err(|_| SystemError::EINVAL)
}
fn convert_with_offset<T>(&self, src: &[u8], offset: usize) -> Result<&[T], SystemError> {
@ -297,7 +296,7 @@ impl<'a> UserBufferWriter<'a> {
offset: usize,
) -> Result<usize, SystemError> {
let dst = Self::convert_with_offset(self.buffer, offset)?;
dst.copy_from_slice(&src);
dst.copy_from_slice(src);
return Ok(src.len());
}
@ -318,7 +317,7 @@ impl<'a> UserBufferWriter<'a> {
}
pub fn buffer<T>(&'a mut self, offset: usize) -> Result<&mut [T], SystemError> {
Ok(Self::convert_with_offset::<T>(self.buffer, offset).map_err(|_| SystemError::EINVAL)?)
Self::convert_with_offset::<T>(self.buffer, offset).map_err(|_| SystemError::EINVAL)
}
fn convert_with_offset<T>(src: &mut [u8], offset: usize) -> Result<&mut [T], SystemError> {