From cb089e17fcc6bd4823bd919cce2b9e62631cd570 Mon Sep 17 00:00:00 2001 From: Minep Date: Wed, 9 Nov 2022 21:42:11 +0000 Subject: [PATCH] fix: memory leakage in file descriptor allocation --- lunaix-os/includes/lunaix/fs.h | 3 +++ lunaix-os/kernel/fs/vfs.c | 12 ++++++++++-- lunaix-os/kernel/process/sched.c | 4 +++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lunaix-os/includes/lunaix/fs.h b/lunaix-os/includes/lunaix/fs.h index 539f0a8..4f57e08 100644 --- a/lunaix-os/includes/lunaix/fs.h +++ b/lunaix-os/includes/lunaix/fs.h @@ -341,6 +341,9 @@ vfs_pclose(struct v_file* file, pid_t pid); int vfs_close(struct v_file* file); +void +vfs_free_fd(struct v_fd* fd); + int vfs_fsync(struct v_file* file); diff --git a/lunaix-os/kernel/fs/vfs.c b/lunaix-os/kernel/fs/vfs.c index d0fbb1c..f5b6506 100644 --- a/lunaix-os/kernel/fs/vfs.c +++ b/lunaix-os/kernel/fs/vfs.c @@ -300,6 +300,12 @@ vfs_close(struct v_file* file) return vfs_pclose(file, __current->pid); } +void +vfs_free_fd(struct v_fd* fd) +{ + cake_release(fd_pile, fd); +} + int vfs_fsync(struct v_file* file) { @@ -570,7 +576,9 @@ vfs_do_open(const char* path, int options) struct v_inode* o_inode = ofile->inode; if (!errno && !(errno = vfs_alloc_fdslot(&fd))) { - struct v_fd* fd_s = vzalloc(sizeof(*fd_s)); + struct v_fd* fd_s = cake_grab(fd_pile); + memset(fd_s, 0, sizeof(*fd_s)); + ofile->f_pos = ofile->inode->fsize & -((options & FO_APPEND) != 0); fd_s->file = ofile; fd_s->flags = options; @@ -599,7 +607,7 @@ __DEFINE_LXSYSCALL1(int, close, int, fd) goto done_err; } - vfree(fd_s); + cake_release(fd_pile, fd_s); __current->fdtable->fds[fd] = 0; done_err: diff --git a/lunaix-os/kernel/process/sched.c b/lunaix-os/kernel/process/sched.c index caec0e6..c2a2426 100644 --- a/lunaix-os/kernel/process/sched.c +++ b/lunaix-os/kernel/process/sched.c @@ -347,8 +347,10 @@ destroy_process(pid_t pid) for (size_t i = 0; i < VFS_MAX_FD; i++) { struct v_fd* fd = proc->fdtable->fds[i]; - if (fd) + if (fd) { vfs_pclose(fd->file, pid); + vfs_free_fd(fd); + } } vfree(proc->fdtable); -- 2.27.0