]> xenbits.xensource.com Git - 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>
Fri, 29 Apr 2016 10:30:06 +0000 (06:30 -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

src/rpc/virnetclient.c

index 781e74cbe08cd4d1e7072f7536f03a6c73e7765e..d8ed15b7e2c77dbaa261d40e27b267a1cb637fca 100644 (file)
@@ -1184,6 +1184,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;