svn commit: r355593 - head/sbin/fsck_ffs
Eric van Gyzen
vangyzen at FreeBSD.org
Tue Dec 10 20:04:08 UTC 2019
Author: vangyzen
Date: Tue Dec 10 20:04:08 2019
New Revision: 355593
URL: https://svnweb.freebsd.org/changeset/base/355593
Log:
fsck_ffs: fix some memory leaks found by Coverity.
Reported by: Coverity
CID: 1380549 1380550 1380551
MFC after: 1 week
Sponsored by: Dell EMC Isilon
Modified:
head/sbin/fsck_ffs/setup.c
Modified: head/sbin/fsck_ffs/setup.c
==============================================================================
--- head/sbin/fsck_ffs/setup.c Tue Dec 10 20:02:57 2019 (r355592)
+++ head/sbin/fsck_ffs/setup.c Tue Dec 10 20:04:08 2019 (r355593)
@@ -474,11 +474,15 @@ calcsb(char *dev, int devfd, struct fs *fs)
if (fsrbuf == NULL)
errx(EEXIT, "calcsb: cannot allocate recovery buffer");
if (blread(devfd, fsrbuf,
- (SBLOCK_UFS2 - secsize) / dev_bsize, secsize) != 0)
+ (SBLOCK_UFS2 - secsize) / dev_bsize, secsize) != 0) {
+ free(fsrbuf);
return (0);
+ }
fsr = (struct fsrecovery *)&fsrbuf[secsize - sizeof *fsr];
- if (fsr->fsr_magic != FS_UFS2_MAGIC)
+ if (fsr->fsr_magic != FS_UFS2_MAGIC) {
+ free(fsrbuf);
return (0);
+ }
memset(fs, 0, sizeof(struct fs));
fs->fs_fpg = fsr->fsr_fpg;
fs->fs_fsbtodb = fsr->fsr_fsbtodb;
@@ -505,11 +509,14 @@ chkrecovery(int devfd)
* Could not determine if backup material exists, so do not
* offer to create it.
*/
+ fsrbuf = NULL;
if (ioctl(devfd, DIOCGSECTORSIZE, &secsize) == -1 ||
(fsrbuf = Malloc(secsize)) == NULL ||
blread(devfd, fsrbuf, (SBLOCK_UFS2 - secsize) / dev_bsize,
- secsize) != 0)
+ secsize) != 0) {
+ free(fsrbuf);
return (1);
+ }
/*
* Recovery material has already been created, so do not
* need to create it again.
@@ -538,12 +545,14 @@ saverecovery(int readfd, int writefd)
char *fsrbuf;
u_int secsize;
+ fsrbuf = NULL;
if (sblock.fs_magic != FS_UFS2_MAGIC ||
ioctl(readfd, DIOCGSECTORSIZE, &secsize) == -1 ||
(fsrbuf = Malloc(secsize)) == NULL ||
blread(readfd, fsrbuf, (SBLOCK_UFS2 - secsize) / dev_bsize,
secsize) != 0) {
printf("RECOVERY DATA COULD NOT BE CREATED\n");
+ free(fsrbuf);
return;
}
fsr = (struct fsrecovery *)&fsrbuf[secsize - sizeof *fsr];
More information about the svn-src-head
mailing list