HomeFreeBSD

Fix several bugs in the FreeBSD rename VOP implementation

Description

Fix several bugs in the FreeBSD rename VOP implementation

  • To avoid a use-after-free, zfsvfs->z_log needs to be loaded after the teardown lock is acquired with ZFS_ENTER().
  • Avoid leaking vnode locks in zfs_rename_relock() and zfs_rename_() when the ZFS_ENTER() macros forces an early return.

Refactor the rename implementation so that ZFS_ENTER() can be used
safely. As a bonus, this lets us use the ZFS_VERIFY_ZP() macro instead
of open-coding its implementation.

Reported-by: Peter Holm <pho@FreeBSD.org>
Tested-by: Peter Holm <pho@FreeBSD.org>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
Signed-off-by: Mark Johnston <markj@FreeBSD.org>
Sponsored-by: The FreeBSD Foundation
Closes #12717

Details

Provenance
markjAuthored on Nov 19 2021, 10:26 PM
Tony Hutter <hutter2@llnl.gov>Committed on Dec 13 2021, 9:22 PM
Parents
rGb96737b83e04: Remove (now unused) td argument from zfs_lookup()
Branches
Unknown
Tags
Unknown