diff options
-rw-r--r-- | kernel/file.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/file.c b/kernel/file.c index fc87c09..116eb97 100644 --- a/kernel/file.c +++ b/kernel/file.c @@ -114,6 +114,8 @@ fileread(struct file *f, uint64 addr, int n) if(f->type == FD_PIPE){ r = piperead(f->pipe, addr, n); } else if(f->type == FD_DEVICE){ + if(f->major < 0 || f->major >= NDEV || !devsw[f->major].read) + return -1; r = devsw[f->major].read(1, addr, n); } else if(f->type == FD_INODE){ ilock(f->ip); @@ -140,6 +142,8 @@ filewrite(struct file *f, uint64 addr, int n) if(f->type == FD_PIPE){ ret = pipewrite(f->pipe, addr, n); } else if(f->type == FD_DEVICE){ + if(f->major < 0 || f->major >= NDEV || !devsw[f->major].write) + return -1; ret = devsw[f->major].write(1, addr, n); } else if(f->type == FD_INODE){ // write a few blocks at a time to avoid exceeding |