From 69a9cd36e635e2d62e4244bb6a9454f9cd93844b Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 30 Jul 2019 23:42:20 -0400 Subject: [PATCH] kernel/fs: Free file descriptors via put_fd(), not free(). FDs are now object_cached, so this triggered an assert-failure panic trying to put them through the regular allocator. Just use put_fd to free these instead, so that there is only one "destruction" path for FDs. Fixes #15213. --- src/system/kernel/fs/vfs.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp index 43b9df947f..d731c88f9e 100644 --- a/src/system/kernel/fs/vfs.cpp +++ b/src/system/kernel/fs/vfs.cpp @@ -2864,7 +2864,8 @@ get_new_fd(int type, struct fs_mount* mount, struct vnode* vnode, io_context* context = get_current_io_context(kernel); fd = new_fd(context, descriptor); if (fd < 0) { - free(descriptor); + descriptor->ops = NULL; + put_fd(descriptor); return B_NO_MORE_FDS; }