94 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Index: sys/kern/vfs_lookup.c
 | |
| ===================================================================
 | |
| --- sys/kern/vfs_lookup.c	(revision 273277)
 | |
| +++ sys/kern/vfs_lookup.c	(working copy)
 | |
| @@ -121,6 +121,16 @@
 | |
|   *		if symbolic link, massage name in buffer and continue
 | |
|   *	}
 | |
|   */
 | |
| +static void
 | |
| +namei_cleanup_cnp(struct componentname *cnp)
 | |
| +{
 | |
| +	uma_zfree(namei_zone, cnp->cn_pnbuf);
 | |
| +#ifdef DIAGNOSTIC
 | |
| +	cnp->cn_pnbuf = NULL;
 | |
| +	cnp->cn_nameptr = NULL;
 | |
| +#endif
 | |
| +}
 | |
| +
 | |
|  int
 | |
|  namei(struct nameidata *ndp)
 | |
|  {
 | |
| @@ -185,11 +195,7 @@
 | |
|  	}
 | |
|  #endif
 | |
|  	if (error) {
 | |
| -		uma_zfree(namei_zone, cnp->cn_pnbuf);
 | |
| -#ifdef DIAGNOSTIC
 | |
| -		cnp->cn_pnbuf = NULL;
 | |
| -		cnp->cn_nameptr = NULL;
 | |
| -#endif
 | |
| +		namei_cleanup_cnp(cnp);
 | |
|  		ndp->ni_vp = NULL;
 | |
|  		return (error);
 | |
|  	}
 | |
| @@ -256,11 +262,7 @@
 | |
|  			}
 | |
|  		}
 | |
|  		if (error) {
 | |
| -			uma_zfree(namei_zone, cnp->cn_pnbuf);
 | |
| -#ifdef DIAGNOSTIC
 | |
| -			cnp->cn_pnbuf = NULL;
 | |
| -			cnp->cn_nameptr = NULL;
 | |
| -#endif
 | |
| +			namei_cleanup_cnp(cnp);
 | |
|  			return (error);
 | |
|  		}
 | |
|  	}
 | |
| @@ -286,6 +288,7 @@
 | |
|  				if (KTRPOINT(curthread, KTR_CAPFAIL))
 | |
|  					ktrcapfail(CAPFAIL_LOOKUP, NULL, NULL);
 | |
|  #endif
 | |
| +				namei_cleanup_cnp(cnp);
 | |
|  				return (ENOTCAPABLE);
 | |
|  			}
 | |
|  			while (*(cnp->cn_nameptr) == '/') {
 | |
| @@ -298,11 +301,7 @@
 | |
|  		ndp->ni_startdir = dp;
 | |
|  		error = lookup(ndp);
 | |
|  		if (error) {
 | |
| -			uma_zfree(namei_zone, cnp->cn_pnbuf);
 | |
| -#ifdef DIAGNOSTIC
 | |
| -			cnp->cn_pnbuf = NULL;
 | |
| -			cnp->cn_nameptr = NULL;
 | |
| -#endif
 | |
| +			namei_cleanup_cnp(cnp);
 | |
|  			SDT_PROBE(vfs, namei, lookup, return, error, NULL, 0,
 | |
|  			    0, 0);
 | |
|  			return (error);
 | |
| @@ -312,11 +311,7 @@
 | |
|  		 */
 | |
|  		if ((cnp->cn_flags & ISSYMLINK) == 0) {
 | |
|  			if ((cnp->cn_flags & (SAVENAME | SAVESTART)) == 0) {
 | |
| -				uma_zfree(namei_zone, cnp->cn_pnbuf);
 | |
| -#ifdef DIAGNOSTIC
 | |
| -				cnp->cn_pnbuf = NULL;
 | |
| -				cnp->cn_nameptr = NULL;
 | |
| -#endif
 | |
| +				namei_cleanup_cnp(cnp);
 | |
|  			} else
 | |
|  				cnp->cn_flags |= HASBUF;
 | |
|  
 | |
| @@ -378,11 +373,7 @@
 | |
|  		vput(ndp->ni_vp);
 | |
|  		dp = ndp->ni_dvp;
 | |
|  	}
 | |
| -	uma_zfree(namei_zone, cnp->cn_pnbuf);
 | |
| -#ifdef DIAGNOSTIC
 | |
| -	cnp->cn_pnbuf = NULL;
 | |
| -	cnp->cn_nameptr = NULL;
 | |
| -#endif
 | |
| +	namei_cleanup_cnp(cnp);
 | |
|  	vput(ndp->ni_vp);
 | |
|  	ndp->ni_vp = NULL;
 | |
|  	vrele(ndp->ni_dvp);
 |