diff --git a/kernel/syscall/syscall.c b/kernel/syscall/syscall.c index 754792b6..4ea2cb5a 100644 --- a/kernel/syscall/syscall.c +++ b/kernel/syscall/syscall.c @@ -218,7 +218,9 @@ uint64_t sys_close(struct pt_regs *regs) // 校验文件描述符范围 if (fd_num < 0 || fd_num > PROC_MAX_FD_NUM) return -EBADF; - + // 文件描述符不存在 + if (current_pcb->fds[fd_num] == NULL) + return -EBADF; struct vfs_file_t *file_ptr = current_pcb->fds[fd_num]; uint64_t ret; // If there is a valid close function @@ -232,17 +234,17 @@ uint64_t sys_close(struct pt_regs *regs) /** * @brief 从文件中读取数据 - * + * * @param fd_num regs->r8 文件描述符号 * @param buf regs->r9 输出缓冲区 * @param count regs->r10 要读取的字节数 - * - * @return uint64_t + * + * @return uint64_t */ uint64_t sys_read(struct pt_regs *regs) { int fd_num = (int)regs->r8; - void *buf = (void*)regs->r9; + void *buf = (void *)regs->r9; int64_t count = (int64_t)regs->r10; // kdebug("sys read: fd=%d", fd_num); @@ -251,6 +253,10 @@ uint64_t sys_read(struct pt_regs *regs) if (fd_num < 0 || fd_num > PROC_MAX_FD_NUM) return -EBADF; + // 文件描述符不存在 + if (current_pcb->fds[fd_num] == NULL) + return -EBADF; + if (count < 0) return -EINVAL;