Module Name: src
Committed By: reinoud
Date: Tue Aug 6 08:18:08 UTC 2013
Modified Files:
src/sbin/newfs_udf: udf_write.c
src/usr.sbin/makefs: udf.c
Log Message:
Fix memory leaks found by Coverity and fix memoryleaks in the new code
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sbin/newfs_udf/udf_write.c
cvs rdiff -u -r1.4 -r1.5 src/usr.sbin/makefs/udf.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/newfs_udf/udf_write.c
diff -u src/sbin/newfs_udf/udf_write.c:1.6 src/sbin/newfs_udf/udf_write.c:1.7
--- src/sbin/newfs_udf/udf_write.c:1.6 Mon Aug 5 20:52:08 2013
+++ src/sbin/newfs_udf/udf_write.c Tue Aug 6 08:18:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_write.c,v 1.6 2013/08/05 20:52:08 reinoud Exp $ */
+/* $NetBSD: udf_write.c,v 1.7 2013/08/06 08:18:08 reinoud Exp $ */
/*
* Copyright (c) 2006, 2008, 2013 Reinoud Zandijk
@@ -30,7 +30,7 @@
#endif
#include <sys/cdefs.h>
-__RCSID("$NetBSD: udf_write.c,v 1.6 2013/08/05 20:52:08 reinoud Exp $");
+__RCSID("$NetBSD: udf_write.c,v 1.7 2013/08/06 08:18:08 reinoud Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -783,6 +783,8 @@ udf_do_rootdir(void) {
error = udf_write_dscr_virt(root_dscr,
layout.rootdir, context.metadata_part, 1);
+ free(root_dscr);
+
return error;
}
@@ -891,6 +893,7 @@ udf_do_newfs_postfix(void)
loc++;
error = udf_write_dscr_virt(vat_dscr, loc, metadata_part, 1);
+ free(vat_dscr);
if (error)
return error;
}
Index: src/usr.sbin/makefs/udf.c
diff -u src/usr.sbin/makefs/udf.c:1.4 src/usr.sbin/makefs/udf.c:1.5
--- src/usr.sbin/makefs/udf.c:1.4 Mon Aug 5 18:44:16 2013
+++ src/usr.sbin/makefs/udf.c Tue Aug 6 08:18:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: udf.c,v 1.4 2013/08/05 18:44:16 reinoud Exp $ */
+/* $NetBSD: udf.c,v 1.5 2013/08/06 08:18:08 reinoud Exp $ */
/*
* Copyright (c) 2006, 2008, 2013 Reinoud Zandijk
@@ -30,7 +30,7 @@
#endif
#include <sys/cdefs.h>
-__RCSID("$NetBSD: udf.c,v 1.4 2013/08/05 18:44:16 reinoud Exp $");
+__RCSID("$NetBSD: udf.c,v 1.5 2013/08/06 08:18:08 reinoud Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -880,6 +880,7 @@ udf_copy_file(struct stat *st, char *pat
uint8_t *data;
int nblk;
int i, f;
+ int error;
fnode = cur->inode;
@@ -901,13 +902,13 @@ udf_copy_file(struct stat *st, char *pat
printf(" ");
i = 0;
+ error = 0;
while (chunk) {
rd = read(f, data, chunk);
if (rd != chunk) {
warn("Short read of file %s\n", cur->name);
- close(f);
- free(data);
- return errno;
+ error = errno;
+ break;
}
printf("\b%c", "\\|/-"[i++ % 4]); fflush(stdout);fflush(stderr);
@@ -927,12 +928,13 @@ udf_copy_file(struct stat *st, char *pat
udf_set_link_cnt(dscr, fnode->nlink);
udf_write_dscr_virt(dscr, udf_rw32(icb->loc.lb_num),
udf_rw16(icb->loc.part_num), 1);
+ free(dscr);
/* remember our location for hardlinks */
cur->inode->fsuse = malloc(sizeof(struct long_ad));
memcpy(cur->inode->fsuse, icb, sizeof(struct long_ad));
- return 0;
+ return error;
}
@@ -1069,6 +1071,7 @@ udf_populate_walk(fsinfo_t *fsopts, fsno
udf_write_dscr_virt(dscr, udf_rw32(icb.loc.lb_num),
udf_rw16(icb.loc.part_num), 1);
+ free(dscr);
free(softlink_buf);
udf_create_fid(ddoff, fid, cur->name, 0, &icb);
@@ -1088,6 +1091,8 @@ udf_populate_walk(fsinfo_t *fsopts, fsno
udf_write_dscr_virt(dir_dscr, udf_rw32(dir_icb->loc.lb_num),
udf_rw16(dir_icb->loc.part_num), 1);
+ free(dirdata);
+ free(dir_dscr);
return retval;
}
@@ -1122,10 +1127,11 @@ udf_enumerate_and_estimate(const char *d
/* calculate strict minimal size */
udf_estimate_walk(fsopts, root, path, stats);
- printf("ndirs\t\t%d\n", stats->ndirs);
- printf("nfiles\t\t%d\n", stats->nfiles);
- printf("ndata_blocks\t%d\n", stats->ndatablocks);
- printf("nmetadata_blocks\t%d\n", stats->nmetadatablocks);
+ printf("ndirs %d\n", stats->ndirs);
+ printf("nfiles %d\n", stats->nfiles);
+ printf("ndata_blocks %d\n", stats->ndatablocks);
+ printf("nmetadata_blocks %d\n", stats->nmetadatablocks);
+ printf("\n");
/* adjust for options : free file nodes */
if (fsopts->freefiles) {