|
@@ -435,7 +435,7 @@ impl Syscall {
|
|
let fd = args[0] as i32;
|
|
let fd = args[0] as i32;
|
|
let buf_vaddr = args[1];
|
|
let buf_vaddr = args[1];
|
|
let len = args[2];
|
|
let len = args[2];
|
|
- let virt_addr = VirtAddr::new(buf_vaddr);
|
|
+ let virt_addr: VirtAddr = VirtAddr::new(buf_vaddr);
|
|
// 判断缓冲区是否来自用户态,进行权限校验
|
|
// 判断缓冲区是否来自用户态,进行权限校验
|
|
let res = if from_user && verify_area(virt_addr, len as usize).is_err() {
|
|
let res = if from_user && verify_area(virt_addr, len as usize).is_err() {
|
|
// 来自用户态,而buffer在内核态,这样的操作不被允许
|
|
// 来自用户态,而buffer在内核态,这样的操作不被允许
|
|
@@ -545,7 +545,7 @@ impl Syscall {
|
|
let fd = args[0] as i32;
|
|
let fd = args[0] as i32;
|
|
let buf_vaddr = args[1];
|
|
let buf_vaddr = args[1];
|
|
let len = args[2];
|
|
let len = args[2];
|
|
- let virt_addr = VirtAddr::new(buf_vaddr);
|
|
+ let virt_addr: VirtAddr = VirtAddr::new(buf_vaddr);
|
|
// 判断缓冲区是否来自用户态,进行权限校验
|
|
// 判断缓冲区是否来自用户态,进行权限校验
|
|
let res = if from_user && verify_area(virt_addr, len as usize).is_err() {
|
|
let res = if from_user && verify_area(virt_addr, len as usize).is_err() {
|
|
// 来自用户态,而buffer在内核态,这样的操作不被允许
|
|
// 来自用户态,而buffer在内核态,这样的操作不被允许
|
|
@@ -653,11 +653,7 @@ impl Syscall {
|
|
SYS_CLOCK => Self::clock(),
|
|
SYS_CLOCK => Self::clock(),
|
|
SYS_PIPE => {
|
|
SYS_PIPE => {
|
|
let pipefd = args[0] as *mut c_int;
|
|
let pipefd = args[0] as *mut c_int;
|
|
- match UserBufferWriter::new(
|
|
+ match UserBufferWriter::new(pipefd, core::mem::size_of::<[c_int; 2]>(), from_user) {
|
|
- pipefd,
|
|
|
|
- core::mem::size_of::<[c_int; 2]>() as usize,
|
|
|
|
- from_user,
|
|
|
|
- ) {
|
|
|
|
Err(e) => Err(e),
|
|
Err(e) => Err(e),
|
|
Ok(mut user_buffer) => match user_buffer.buffer::<i32>(0) {
|
|
Ok(mut user_buffer) => match user_buffer.buffer::<i32>(0) {
|
|
Err(e) => Err(e),
|
|
Err(e) => Err(e),
|
|
@@ -884,25 +880,7 @@ impl Syscall {
|
|
SYS_GETTIMEOFDAY => {
|
|
SYS_GETTIMEOFDAY => {
|
|
let timeval = args[0] as *mut PosixTimeval;
|
|
let timeval = args[0] as *mut PosixTimeval;
|
|
let timezone_ptr = args[1] as *mut PosixTimeZone;
|
|
let timezone_ptr = args[1] as *mut PosixTimeZone;
|
|
- match UserBufferWriter::new(timeval, core::mem::size_of::<PosixTimeval>(), true) {
|
|
+ Self::gettimeofday(timeval, timezone_ptr)
|
|
- Err(e) => Err(e),
|
|
|
|
- Ok(_) => {
|
|
|
|
- match UserBufferWriter::new(
|
|
|
|
- timezone_ptr,
|
|
|
|
- core::mem::size_of::<PosixTimeZone>(),
|
|
|
|
- true,
|
|
|
|
- ) {
|
|
|
|
- Err(e) => Err(e),
|
|
|
|
- Ok(_) => {
|
|
|
|
- if !timeval.is_null() {
|
|
|
|
- Self::gettimeofday(timeval, timezone_ptr)
|
|
|
|
- } else {
|
|
|
|
- Err(SystemError::EFAULT)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
SYS_MMAP => {
|
|
SYS_MMAP => {
|
|
let len = page_align_up(args[1]);
|
|
let len = page_align_up(args[1]);
|