From 12dd3dc0894fa592233111e4dca1796638bf0da3 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 25 Aug 2024 11:58:09 -0300 Subject: [PATCH] mmap: check file permissions before allowing it to be mapped --- kernel-src/sys/syscalls/mmap.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/kernel-src/sys/syscalls/mmap.c b/kernel-src/sys/syscalls/mmap.c index d0b0fd02..27b163d6 100644 --- a/kernel-src/sys/syscalls/mmap.c +++ b/kernel-src/sys/syscalls/mmap.c @@ -68,6 +68,14 @@ syscallret_t syscall_mmap(context_t *context, void *hint, size_t len, int prot, return ret; } + int type = file->vnode->type; + if ((type != V_TYPE_REGULAR && type != V_TYPE_BLKDEV && type != V_TYPE_CHDEV) + || ((prot & PROT_READ) && (file->flags & FILE_READ) == 0) + || ((flags & MAP_SHARED) && (prot & PROT_WRITE) && (file->flags & FILE_WRITE) == 0)) { + ret.errno = EACCES; + goto cleanup; + } + vfd.node = file->vnode; vfd.offset = offset; } @@ -79,6 +87,7 @@ syscallret_t syscall_mmap(context_t *context, void *hint, size_t len, int prot, if (ret.ret == 0) ret.errno = ENOMEM; + cleanup: if (isfile) fd_release(file);