From edac853e8935164113bda594865cd48c91893d11 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Tue, 25 Jun 2024 19:20:03 +0200 Subject: VFS: dup2 fixes --- kernel/fs/vfs.c | 4 ++++ kernel/lib/relist.c | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'kernel') diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c index 7c97cb2..ffecc5d 100644 --- a/kernel/fs/vfs.c +++ b/kernel/fs/vfs.c @@ -412,6 +412,10 @@ vfs_vm_object_t *vfs_get_vm_object(int fd, u64 length, u64 offset) { } int vfs_dup2(int org_fd, int new_fd) { + if (org_fd == new_fd) { + return -EINVAL; + } + vfs_fd_t *orig; if (!relist_get(¤t_task->file_descriptors, org_fd, (void **)&orig, NULL)) { diff --git a/kernel/lib/relist.c b/kernel/lib/relist.c index 2e45429..5c03ab2 100644 --- a/kernel/lib/relist.c +++ b/kernel/lib/relist.c @@ -129,8 +129,7 @@ int relist_set(struct relist *list, u32 index, void *value) { assert(0); return 0; } - int is_used = (list->bitmap[index / 64] & ((u64)1 << (index % 64))); - assert(is_used); + list->bitmap[index / 64] |= ((u64)1 << (index % 64)); list->entries[index] = value; return 1; } -- cgit v1.2.3