From e7e7a55250c1b00a82cef3676c6a035b06044cfb Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Wed, 12 Dec 2018 19:24:59 -0500 Subject: [PATCH] kernel/fs: Account for vnode being NULL in vfs_release_posix_lock. When the FD is put() but not freed while O_DISCONNECTED, its "ops" and "vnode" are cleared. Thus it is entirely valid for a non-NULL file FD to have a NULL vnode, so we should just treat such FDs as if the locks had already been cleared (which they should have.) Fixes #14294. --- src/system/kernel/fs/vfs.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/system/kernel/fs/vfs.cpp b/src/system/kernel/fs/vfs.cpp index 64d29413ad..c28608847f 100644 --- a/src/system/kernel/fs/vfs.cpp +++ b/src/system/kernel/fs/vfs.cpp @@ -4891,6 +4891,8 @@ status_t vfs_release_posix_lock(io_context* context, struct file_descriptor* descriptor) { struct vnode* vnode = descriptor->u.vnode; + if (vnode == NULL) + return B_OK; if (HAS_FS_CALL(vnode, release_lock)) return FS_CALL(vnode, release_lock, descriptor->cookie, NULL);