svn commit: r243699 - stable/8/sbin/umount
Eitan Adler
eadler at FreeBSD.org
Fri Nov 30 03:48:46 UTC 2012
Author: eadler
Date: Fri Nov 30 03:48:45 2012
New Revision: 243699
URL: http://svnweb.freebsd.org/changeset/base/243699
Log:
MFC r243082:
Fix memory leak in umount.c
PR: bin/172553
Approved by: cperciva (implicit)
Modified:
stable/8/sbin/umount/umount.c
Directory Properties:
stable/8/sbin/umount/ (props changed)
Modified: stable/8/sbin/umount/umount.c
==============================================================================
--- stable/8/sbin/umount/umount.c Fri Nov 30 03:48:45 2012 (r243698)
+++ stable/8/sbin/umount/umount.c Fri Nov 30 03:48:45 2012 (r243699)
@@ -357,8 +357,10 @@ umountfs(struct statfs *sfs)
do_rpc = 1;
}
- if (!namematch(ai))
+ if (!namematch(ai)) {
+ free(orignfsdirname);
return (1);
+ }
/* First try to unmount using the file system ID. */
snprintf(fsidbuf, sizeof(fsidbuf), "FSID:%d:%d", sfs->f_fsid.val[0],
sfs->f_fsid.val[1]);
@@ -367,13 +369,16 @@ umountfs(struct statfs *sfs)
if (errno != ENOENT || sfs->f_fsid.val[0] != 0 ||
sfs->f_fsid.val[1] != 0)
warn("unmount of %s failed", sfs->f_mntonname);
- if (errno != ENOENT)
+ if (errno != ENOENT) {
+ free(orignfsdirname);
return (1);
+ }
/* Compatibility for old kernels. */
if (sfs->f_fsid.val[0] != 0 || sfs->f_fsid.val[1] != 0)
warnx("retrying using path instead of file system ID");
if (unmount(sfs->f_mntonname, fflag) != 0) {
warn("unmount of %s failed", sfs->f_mntonname);
+ free(orignfsdirname);
return (1);
}
}
@@ -391,6 +396,7 @@ umountfs(struct statfs *sfs)
if (clp == NULL) {
warnx("%s: %s", hostp,
clnt_spcreateerror("MOUNTPROG"));
+ free(orignfsdirname);
return (1);
}
clp->cl_auth = authsys_create_default();
@@ -401,6 +407,7 @@ umountfs(struct statfs *sfs)
if (clnt_stat != RPC_SUCCESS) {
warnx("%s: %s", hostp,
clnt_sperror(clp, "RPCMNT_UMOUNT"));
+ free(orignfsdirname);
return (1);
}
/*
@@ -413,10 +420,10 @@ umountfs(struct statfs *sfs)
hostp, nfsdirname);
free_mtab();
}
- free(orignfsdirname);
auth_destroy(clp->cl_auth);
clnt_destroy(clp);
}
+ free(orignfsdirname);
return (0);
}
More information about the svn-src-all
mailing list