From 98fc4eb23df75e8db24b68bd5f933bb05748a2d5 Mon Sep 17 00:00:00 2001 From: Matheus Date: Tue, 27 Jun 2023 19:54:33 -0300 Subject: [PATCH] file: FDTABLE_LIMIT --- kernel-src/fs/file.c | 8 ++++++++ kernel-src/include/kernel/file.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/kernel-src/fs/file.c b/kernel-src/fs/file.c index fcad21b8..f6035441 100644 --- a/kernel-src/fs/file.c +++ b/kernel-src/fs/file.c @@ -57,6 +57,9 @@ static int getfree(int start) { } static int growtable(int newcount) { + if (newcount > FDTABLE_LIMIT) + return EMFILE; + proc_t *proc = _cpu()->thread->proc; __assert(newcount > proc->fdcount); void *newtable = realloc(proc->fd, sizeof(fd_t) * newcount); @@ -184,6 +187,11 @@ int fd_dup(int oldfd, int newfd, bool exact, int fdflags, int *retfd) { } if (exact) { + if (newfd >= FDTABLE_LIMIT) { + err = EBADF; + goto cleanup; + } + if (newfd >= proc->fdcount) { err = growtable(newfd + 1); if (err) diff --git a/kernel-src/include/kernel/file.h b/kernel-src/include/kernel/file.h index 56e711f1..58480976 100644 --- a/kernel-src/include/kernel/file.h +++ b/kernel-src/include/kernel/file.h @@ -63,4 +63,6 @@ static inline int fileflagstovnodeflags(int flags) { #define O_RSYNC 04010000 #define O_TMPFILE 020000000 +#define FDTABLE_LIMIT 256 + #endif