mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
Fix file descriptor leak in daemon.
This commit is contained in:
@@ -384,6 +384,10 @@ commandv (char **stdoutput, char **stderror, char * const* const argv)
|
||||
pid = fork ();
|
||||
if (pid == -1) {
|
||||
perror ("fork");
|
||||
close (so_fd[0]);
|
||||
close (so_fd[1]);
|
||||
close (se_fd[0]);
|
||||
close (se_fd[1]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -415,6 +419,8 @@ commandv (char **stdoutput, char **stderror, char * const* const argv)
|
||||
r = select (MAX (so_fd[0], se_fd[0]) + 1, &rset2, NULL, NULL, NULL);
|
||||
if (r == -1) {
|
||||
perror ("select");
|
||||
close (so_fd[0]);
|
||||
close (se_fd[0]);
|
||||
waitpid (pid, NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@@ -423,6 +429,8 @@ commandv (char **stdoutput, char **stderror, char * const* const argv)
|
||||
r = read (so_fd[0], buf, sizeof buf);
|
||||
if (r == -1) {
|
||||
perror ("read");
|
||||
close (so_fd[0]);
|
||||
close (se_fd[0]);
|
||||
waitpid (pid, NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@@ -444,6 +452,8 @@ commandv (char **stdoutput, char **stderror, char * const* const argv)
|
||||
r = read (se_fd[0], buf, sizeof buf);
|
||||
if (r == -1) {
|
||||
perror ("read");
|
||||
close (so_fd[0]);
|
||||
close (se_fd[0]);
|
||||
waitpid (pid, NULL, 0);
|
||||
return -1;
|
||||
}
|
||||
@@ -462,6 +472,9 @@ commandv (char **stdoutput, char **stderror, char * const* const argv)
|
||||
}
|
||||
}
|
||||
|
||||
close (so_fd[0]);
|
||||
close (se_fd[0]);
|
||||
|
||||
/* Make sure the output buffers are \0-terminated. Also remove any
|
||||
* trailing \n characters from the error buffer (not from stdout).
|
||||
*/
|
||||
|
||||
@@ -51,6 +51,14 @@ main_loop (int _sock)
|
||||
sock = _sock;
|
||||
|
||||
for (;;) {
|
||||
#if 0
|
||||
/* Most common errors are leaked memory and leaked file descriptors,
|
||||
* so run this between each command:
|
||||
*/
|
||||
if (verbose)
|
||||
system ("ls -l /proc/self/fd");
|
||||
#endif
|
||||
|
||||
/* Read the length word. */
|
||||
xread (sock, lenbuf, 4);
|
||||
xdrmem_create (&xdr, lenbuf, 4, XDR_DECODE);
|
||||
|
||||
Reference in New Issue
Block a user