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:
kernel
crates
src
arch
riscv64
x86_64
driver
base
disk
firmware
input
ps2_mouse
net
open_firmware
pci
serial
serial8250
timers
tty
video
virtio
exception
filesystem
include
bindings
init
ipc
lib.rslibs
align.rself.rs
futex
keyboard_parser.rslib_ui
lock_free_flags.rsmutex.rsnotifier.rsprintk.rsrbtree.rsrwlock.rssemaphore.rsspinlock.rsvec_cursor.rswait_queue.rsmm
allocator
c_adapter.rsearly_ioremap.rsmemblock.rsmmio_buddy.rsmod.rsno_init.rspage.rspercpu.rssyscall.rsucontext.rsnet
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> {
|
||||
|
Reference in New Issue
Block a user