The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=c63c77b3a5312dfd00f7749a07269119da886609
commit c63c77b3a5312dfd00f7749a07269119da886609 Author: Konstantin Belousov <[email protected]> AuthorDate: 2026-09-06 15:11:41 +0000 Commit: Konstantin Belousov <[email protected]> CommitDate: 2026-09-07 15:46:03 +0000 vp_crossmp: weaken the assert and make it more precise Since the vp_crossmp vnode can leak into vn_vptocnp() calls due to nullfs file mounting, not all lock requests are non-sleeping. The requirement for the crossmp locking is that all lock requests should be shared. Then, it does not matter if the requests allow sleeping, since all locks are shared. Also, check the lock type by correctly masking it with LK_TYPE_MASK. Reported and tested by: pho Reviewed by: jah, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D59468 --- sys/kern/vfs_lookup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c index 57b536eab6ea..71d4d3f75721 100644 --- a/sys/kern/vfs_lookup.c +++ b/sys/kern/vfs_lookup.c @@ -133,7 +133,7 @@ crossmp_vop_lock1(struct vop_lock1_args *ap) lk = vp->v_vnlock; flags = ap->a_flags; - KASSERT((flags & (LK_SHARED | LK_NOWAIT)) == (LK_SHARED | LK_NOWAIT), + KASSERT((flags & LK_TYPE_MASK) == LK_SHARED, ("%s: invalid lock request 0x%x for crossmp", __func__, flags)); if ((flags & LK_INTERLOCK) != 0)
