+Wed Nov 14 17:28:31 CET 2007 Jim Meyering <meyering@redhat.com>
+
+ Handle failed strdup and malloc.
+ * src/remote_internal.c: Don't dereference NULL after
+ failed strdup or malloc in doRemoteOpen.
+
Wed Nov 14 11:55:00 UTC 2007 Richard W.M. Jones <rjones@redhat.com>
* src/stats_linux.c, src/stats_linux.h, src_xen_internal.c:
sockname = strdup (LIBVIRTD_PRIV_UNIX_SOCKET_RO);
else
sockname = strdup (LIBVIRTD_PRIV_UNIX_SOCKET);
+ if (sockname == NULL) {
+ error (NULL, VIR_ERR_SYSTEM_ERROR, strerror (errno));
+ goto failed;
+ }
}
}
if (no_tty) nr_args += 5; /* For -T -o BatchMode=yes -e none */
command = command ? : strdup ("ssh");
+ if (command == NULL) {
+ error (NULL, VIR_ERR_SYSTEM_ERROR, strerror (errno));
+ goto failed;
+ }
// Generate the final command argv[] array.
// ssh -p $port [-l $username] $hostname $netcat -U $sockname [NULL]
cmd_argv = malloc (nr_args * sizeof (char *));
+ if (cmd_argv == NULL) {
+ error (NULL, VIR_ERR_SYSTEM_ERROR, strerror (errno));
+ goto failed;
+ }
+
j = 0;
cmd_argv[j++] = strdup (command);
cmd_argv[j++] = strdup ("-p");
cmd_argv[j++] = strdup (sockname ? sockname : LIBVIRTD_PRIV_UNIX_SOCKET);
cmd_argv[j++] = 0;
assert (j == nr_args);
+ for (j = 0; j < nr_args; j++)
+ if (cmd_argv[j] == NULL) {
+ error (NULL, VIR_ERR_SYSTEM_ERROR, strerror (ENOMEM));
+ goto failed;
+ }
}
/*FALLTHROUGH*/
// Run the external process.
if (!cmd_argv) {
cmd_argv = malloc (2 * sizeof (char *));
+ if (cmd_argv == NULL) {
+ error (NULL, VIR_ERR_SYSTEM_ERROR, strerror (errno));
+ goto failed;
+ }
cmd_argv[0] = command;
cmd_argv[1] = 0;
}