From: Ben Kaduk Date: Wed, 29 May 2013 23:18:22 +0000 (-0400) Subject: FBSD: plug refcount leak in pioctl X-Git-Tag: upstream/1.8.0_pre1^2~979 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=2bbba424ad6728a221688f782b4df90bf6da4a63;p=packages%2Fo%2Fopenafs.git FBSD: plug refcount leak in pioctl When gop_lookupname_user returns a non-NULL vnode, the vnode came from afs_GetVCache (by way of afs_lookup) which takes a reference on the vnode entry. There's no need to take another spurious reference here. The existing code already knows that there's a reference in place, as there is an AFS_RELE down where FBSD80_ENV unlocks the vnode if it's locked (that code is also suspicious). Prior to this patch, things like 'fs flush /path/to/file' would leak a reference on that cache entry, preventing clean shutdown. Change-Id: Iefb7be16bb76b709ffd7cfc082ef9078adf9e354 Reviewed-on: http://gerrit.openafs.org/9957 Reviewed-by: Benjamin Kaduk Reviewed-by: Derrick Brashear Tested-by: BuildBot --- diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c index 52788d776..cde09d790 100644 --- a/src/afs/afs_pioctl.c +++ b/src/afs/afs_pioctl.c @@ -1140,10 +1140,6 @@ afs_syscall_pioctl(char *path, unsigned int com, caddr_t cmarg, int follow) vp = (struct vnode *)dp->d_inode; #else code = gop_lookupname_user(path, AFS_UIOUSER, follow, &vp); -#if defined(AFS_FBSD80_ENV) /* XXX check on 7x */ - if (vp != NULL) - VN_HOLD(vp); -#endif /* AFS_FBSD80_ENV */ #endif /* AFS_LINUX22_ENV */ #endif /* AFS_AIX41_ENV */ AFS_GLOCK();