]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
rpc: Don't leak fd via CreateXMLWithFiles
authorBen Gray <ben.r.gray@gmail.com>
Sat, 23 Apr 2016 22:38:21 +0000 (18:38 -0400)
committerCole Robinson <crobinso@redhat.com>
Wed, 4 May 2016 22:37:38 +0000 (18:37 -0400)
FD passing APIs like CreateXMLWithFiles or OpenGraphicsFD will leak
file descriptors. The user passes in an fd, which is dup()'d in
virNetClientProgramCall. The new fd is what is transfered to the
server virNetClientIOWriteMessage.

Once all the fds have been written though, the parent msg->fds list
is immediately free'd, so the individual fds are never closed.

This closes each FD as its send to the server, so all fds have been
closed by the time msg->fds is free'd.

https://bugzilla.redhat.com/show_bug.cgi?id=1159766
(cherry picked from commit 5ba48584fbc5079c0ddbc9e9a52c96d7bcef0761)

src/rpc/virnetclient.c

index d0b96b654f38aac03b3e40d2b5370e230e38f207..48da767c74b390f8b7f7156b769f170afd5e973d 100644 (file)
@@ -1176,6 +1176,7 @@ virNetClientIOWriteMessage(virNetClientPtr client,
             if (rv == 0) /* Blocking */
                 return 0;
             thecall->msg->donefds++;
+            VIR_FORCE_CLOSE(thecall->msg->fds[i]);
         }
         thecall->msg->donefds = 0;
         thecall->msg->bufferOffset = thecall->msg->bufferLength = 0;