diff options
author | Anton Kling <anton@kling.gg> | 2024-06-25 19:20:03 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-06-25 19:20:03 +0200 |
commit | edac853e8935164113bda594865cd48c91893d11 (patch) | |
tree | adcc40c27a658c7601c410f3e49fbc762544979b /kernel | |
parent | 31743482bbdceeb2a0e52ae430ce1afad853e7e9 (diff) |
VFS: dup2 fixes
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/fs/vfs.c | 4 | ||||
-rw-r--r-- | kernel/lib/relist.c | 3 |
2 files changed, 5 insertions, 2 deletions
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; } |