mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-08-24 09:49:59 +03:00
rpc: avoid freeing uninitialized variable
Detected by Coverity. Both are instances of bad things happening if pipe2 fails; the virNetClientNew failure could free garbage, and virNetSocketNewConnectCommand could close random fds. Note: POSIX doesn't guarantee the contents of fd[0] and fd[1] after pipe failure: http://austingroupbugs.net/view.php?id=467 We may need to introduce a virPipe2 wrapper that guarantees that on pipe failure, the fds are explicitly set to -1, rather than our current state of assuming the fds are unchanged from their value prior to the failed pipe call. * src/rpc/virnetclient.c (virNetClientNew): Initialize variable. * src/rpc/virnetsocket.c (virNetSocketNewConnectCommand): Likewise.
This commit is contained in:
@ -113,7 +113,7 @@ static void virNetClientIncomingEvent(virNetSocketPtr sock,
|
|||||||
static virNetClientPtr virNetClientNew(virNetSocketPtr sock,
|
static virNetClientPtr virNetClientNew(virNetSocketPtr sock,
|
||||||
const char *hostname)
|
const char *hostname)
|
||||||
{
|
{
|
||||||
virNetClientPtr client;
|
virNetClientPtr client = NULL;
|
||||||
int wakeupFD[2] = { -1, -1 };
|
int wakeupFD[2] = { -1, -1 };
|
||||||
|
|
||||||
if (pipe2(wakeupFD, O_CLOEXEC) < 0) {
|
if (pipe2(wakeupFD, O_CLOEXEC) < 0) {
|
||||||
|
@ -511,8 +511,8 @@ int virNetSocketNewConnectCommand(virCommandPtr cmd,
|
|||||||
virNetSocketPtr *retsock)
|
virNetSocketPtr *retsock)
|
||||||
{
|
{
|
||||||
pid_t pid = 0;
|
pid_t pid = 0;
|
||||||
int sv[2];
|
int sv[2] = { -1, -1 };
|
||||||
int errfd[2];
|
int errfd[2] = { -1, -1 };
|
||||||
|
|
||||||
*retsock = NULL;
|
*retsock = NULL;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user