summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authordbj <dbj@NetBSD.org>2003-11-08 05:35:11 +0000
committerdbj <dbj@NetBSD.org>2003-11-08 05:35:11 +0000
commit2f1fc21f9ca2f37f1468cdaa32ceea034bd2cfc2 (patch)
treeed55d77ee07309b9e4dd3fa87f60f4a5eff01c13 /sys
parent3b34d70c1dcc9bb4891a21c37c93f8f739b8aa43 (diff)
fix minor memory leaks in error paths of ffs_mountfs
Diffstat (limited to 'sys')
-rw-r--r--sys/ufs/ffs/ffs_vfsops.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index 59611bec39f..6f7ee49c8ae 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_vfsops.c,v 1.127 2003/11/05 10:18:38 hannken Exp $ */
+/* $NetBSD: ffs_vfsops.c,v 1.128 2003/11/08 05:35:11 dbj Exp $ */
/*
* Copyright (c) 1989, 1991, 1993, 1994
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.127 2003/11/05 10:18:38 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.128 2003/11/08 05:35:11 dbj Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -758,6 +758,7 @@ next_sblock:
if (sblock_try[i] == -1) {
error = EINVAL;
+ fs = NULL;
goto out;
}
@@ -775,7 +776,7 @@ next_sblock:
#else
if ((mp->mnt_flag & MNT_RDONLY) == 0) {
error = EROFS;
- goto out2;
+ goto out;
}
#endif
}
@@ -869,7 +870,7 @@ next_sblock:
cred, &bp);
if (error) {
free(fs->fs_csp, M_UFSMNT);
- goto out2;
+ goto out;
}
#ifdef FFS_EI
if (needswap)
@@ -935,9 +936,9 @@ next_sblock:
}
}
return (0);
-out2:
- free(fs, M_UFSMNT);
out:
+ if (fs)
+ free(fs, M_UFSMNT);
devvp->v_specmountpoint = NULL;
if (bp)
brelse(bp);
@@ -945,6 +946,10 @@ out:
(void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, cred, p);
VOP_UNLOCK(devvp, 0);
if (ump) {
+#ifdef SUPPORT_FS_42POSTBLFMT_WRITE
+ if (ump->um_opostsave != NULL)
+ free(ump->um_opostsave, M_UFSMNT);
+#endif
free(ump, M_UFSMNT);
mp->mnt_data = NULL;
}