diff options
author | asomers <asomers@FreeBSD.org> | 2017-04-26 14:50:06 +0000 |
---|---|---|
committer | asomers <asomers@FreeBSD.org> | 2017-04-26 14:50:06 +0000 |
commit | f2d320b630bff35d490704e312716f86604633ef (patch) | |
tree | 93318074d7a43eed2796b5840eec466c85fd87a9 /sbin | |
parent | 68f68f2b9f1b96d4fadc6e8a171c0345f4daf49e (diff) | |
download | FreeBSD-src-f2d320b630bff35d490704e312716f86604633ef.zip FreeBSD-src-f2d320b630bff35d490704e312716f86604633ef.tar.gz |
MFC r316530, r316535
r316530:
Fix clearing geom metadata if DIOCGSECTORSIZE fails
An unhandled error case would result in passing SIZE_MAX to malloc.
While I'm here, remove an unnecessary NULL check before free
Reported by: Coverity
CID: 1017793
Sponsored by: Spectra Logic Corp
r316535:
Fix memory leak in "gpart bootcode"
Also, annotate that gpart_issue never returns
Reported by: Coverity
CID: 1007105
Sponsored by: Spectra Logic Corp
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/geom/class/part/geom_part.c | 5 | ||||
-rw-r--r-- | sbin/geom/misc/subr.c | 5 |
2 files changed, 5 insertions, 5 deletions
diff --git a/sbin/geom/class/part/geom_part.c b/sbin/geom/class/part/geom_part.c index 4f57f00..c6bd6d4 100644 --- a/sbin/geom/class/part/geom_part.c +++ b/sbin/geom/class/part/geom_part.c @@ -81,7 +81,7 @@ static int gpart_autofill(struct gctl_req *); static int gpart_autofill_resize(struct gctl_req *); static void gpart_bootcode(struct gctl_req *, unsigned int); static void *gpart_bootfile_read(const char *, ssize_t *); -static void gpart_issue(struct gctl_req *, unsigned int); +static _Noreturn void gpart_issue(struct gctl_req *, unsigned int); static void gpart_show(struct gctl_req *, unsigned int); static void gpart_show_geom(struct ggeom *, const char *, int); static int gpart_show_hasopt(struct gctl_req *, const char *, const char *); @@ -1270,6 +1270,7 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl) gpart_issue(req, fl); geom_deletetree(&mesh); + free(partcode); } static void @@ -1290,7 +1291,7 @@ gpart_print_error(const char *errstr) warnx("%s", errmsg); } -static void +static _Noreturn void gpart_issue(struct gctl_req *req, unsigned int fl __unused) { char buf[4096]; diff --git a/sbin/geom/misc/subr.c b/sbin/geom/misc/subr.c index f7b2764..cf0d9b0 100644 --- a/sbin/geom/misc/subr.c +++ b/sbin/geom/misc/subr.c @@ -336,7 +336,7 @@ g_metadata_clear(const char *name, const char *magic) goto out; } sectorsize = g_sectorsize(fd); - if (sectorsize == 0) { + if (sectorsize <= 0) { error = errno; goto out; } @@ -365,8 +365,7 @@ g_metadata_clear(const char *name, const char *magic) } (void)g_flush(fd); out: - if (sector != NULL) - free(sector); + free(sector); g_close(fd); return (error); } |