From d9399944e832d6cb782beb08eb69e3b0bf0a1f3c Mon Sep 17 00:00:00 2001 From: fslongjin Date: Wed, 27 Apr 2022 21:00:05 +0800 Subject: [PATCH] =?UTF-8?q?:wrench:=20=E6=A0=A1=E9=AA=8C=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E7=AC=A6=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/syscall/syscall.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) 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;