vfs/preallocate: fix file descriptor leak
Fixes #18724.
Change-Id: I1a17a36106d13853888342a397ecd03087b1fdcf
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7299
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
(cherry picked from commit 3433ec7334ed42eb814586c51ecbf039d686aa88)
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7218
Diff
src/system/kernel/fs/vfs.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
@@ -6450,7 +6450,7 @@
static status_t
common_preallocate(int fd, off_t offset, off_t length, bool kernel)
{
struct file_descriptor* descriptor;
CObjectDeleter<struct file_descriptor, void, put_fd> descriptor;
struct vnode* vnode;
if (offset < 0 || length == 0)
@@ -6458,8 +6458,8 @@
if (offset > OFF_MAX - length)
return B_FILE_TOO_LARGE;
descriptor = get_fd_and_vnode(fd, &vnode, kernel);
if (descriptor == NULL || (descriptor->open_mode & O_RWMASK) == O_RDONLY)
descriptor.SetTo(get_fd_and_vnode(fd, &vnode, kernel));
if (!descriptor.IsSet() || (descriptor->open_mode & O_RWMASK) == O_RDONLY)
return B_FILE_ERROR;
switch (vnode->Type() & S_IFMT) {