svn commit: r293747 - stable/10/sbin/init
Edward Tomasz Napierala
trasz at FreeBSD.org
Tue Jan 12 10:24:09 UTC 2016
Author: trasz
Date: Tue Jan 12 10:24:08 2016
New Revision: 293747
URL: https://svnweb.freebsd.org/changeset/base/293747
Log:
MFC r290689:
Fix resource leaks in error cases.
Sponsored by: The FreeBSD Foundation
Modified:
stable/10/sbin/init/init.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sbin/init/init.c
==============================================================================
--- stable/10/sbin/init/init.c Tue Jan 12 10:19:56 2016 (r293746)
+++ stable/10/sbin/init/init.c Tue Jan 12 10:24:08 2016 (r293747)
@@ -660,6 +660,7 @@ read_file(const char *path, void **bufp,
error = fstat(fd, &sb);
if (error != 0) {
emergency("fstat: %s", strerror(errno));
+ close(fd);
return (error);
}
@@ -667,12 +668,14 @@ read_file(const char *path, void **bufp,
buf = malloc(bufsize);
if (buf == NULL) {
emergency("malloc: %s", strerror(errno));
+ close(fd);
return (error);
}
nbytes = read(fd, buf, bufsize);
if (nbytes != (ssize_t)bufsize) {
emergency("read: %s", strerror(errno));
+ close(fd);
free(buf);
return (error);
}
@@ -691,7 +694,7 @@ read_file(const char *path, void **bufp,
}
static int
-create_file(const char *path, void *buf, size_t bufsize)
+create_file(const char *path, const void *buf, size_t bufsize)
{
ssize_t nbytes;
int error, fd;
@@ -705,13 +708,13 @@ create_file(const char *path, void *buf,
nbytes = write(fd, buf, bufsize);
if (nbytes != (ssize_t)bufsize) {
emergency("write: %s", strerror(errno));
+ close(fd);
return (-1);
}
error = close(fd);
if (error != 0) {
emergency("close: %s", strerror(errno));
- free(buf);
return (-1);
}
@@ -757,6 +760,9 @@ reroot(void)
size_t bufsize, init_path_len;
int error, name[4];
+ buf = NULL;
+ bufsize = 0;
+
name[0] = CTL_KERN;
name[1] = KERN_PROC;
name[2] = KERN_PROC_PATHNAME;
@@ -782,12 +788,6 @@ reroot(void)
}
/*
- * Pacify GCC.
- */
- buf = NULL;
- bufsize = 0;
-
- /*
* Copy the init binary into tmpfs, so that we can unmount
* the old rootfs without committing suicide.
*/
@@ -809,6 +809,7 @@ reroot(void)
out:
emergency("reroot failed; going to single user mode");
+ free(buf);
return (state_func_t) single_user;
}
More information about the svn-src-stable-10
mailing list