🔧 校验文件描述符是否存在

This commit is contained in:
fslongjin 2022-04-27 21:00:05 +08:00
parent b3ad8405a4
commit d9399944e8

View File

@ -218,7 +218,9 @@ uint64_t sys_close(struct pt_regs *regs)
// 校验文件描述符范围 // 校验文件描述符范围
if (fd_num < 0 || fd_num > PROC_MAX_FD_NUM) if (fd_num < 0 || fd_num > PROC_MAX_FD_NUM)
return -EBADF; return -EBADF;
// 文件描述符不存在
if (current_pcb->fds[fd_num] == NULL)
return -EBADF;
struct vfs_file_t *file_ptr = current_pcb->fds[fd_num]; struct vfs_file_t *file_ptr = current_pcb->fds[fd_num];
uint64_t ret; uint64_t ret;
// If there is a valid close function // If there is a valid close function
@ -242,7 +244,7 @@ uint64_t sys_close(struct pt_regs *regs)
uint64_t sys_read(struct pt_regs *regs) uint64_t sys_read(struct pt_regs *regs)
{ {
int fd_num = (int)regs->r8; int fd_num = (int)regs->r8;
void *buf = (void*)regs->r9; void *buf = (void *)regs->r9;
int64_t count = (int64_t)regs->r10; int64_t count = (int64_t)regs->r10;
// kdebug("sys read: fd=%d", fd_num); // 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) if (fd_num < 0 || fd_num > PROC_MAX_FD_NUM)
return -EBADF; return -EBADF;
// 文件描述符不存在
if (current_pcb->fds[fd_num] == NULL)
return -EBADF;
if (count < 0) if (count < 0)
return -EINVAL; return -EINVAL;