
"Richard W.M. Jones" <rjones@redhat.com> wrote:
Here's the final version of the "3 arrays" version of the patch, with the memory corruptor fixed. ... Index: src/qemu_driver.c =================================================================== RCS file: /data/cvs/libvirt/src/qemu_driver.c,v retrieving revision 1.57 diff -u -r1.57 qemu_driver.c --- src/qemu_driver.c 27 Feb 2008 04:37:07 -0000 1.57 +++ src/qemu_driver.c 27 Feb 2008 16:08:34 -0000 @@ -925,6 +930,7 @@ dhcpStartDhcpDaemon(virConnectPtr conn, struct qemud_network *network) { + char buf[PATH_MAX]; char **argv; int ret, i;
@@ -934,6 +940,15 @@ return -1; }
+ /* Touch the DHCP hosts file so it exists before dnsmasq starts up. */ + snprintf (buf, sizeof buf, DHCP_HOSTS_FORMAT, network->def->name); + ret = open (buf, O_CREAT|O_WRONLY, 0644); + if (ret == -1) { + qemudReportError (conn, NULL, NULL, VIR_ERR_SYSTEM_ERROR, + "%s: %s", buf, strerror (errno)); + return -1; + } + argv = NULL; if (qemudBuildDnsmasqArgv(conn, network, &argv) < 0) return -1;
Whoops. You'll want to close that file descriptor. E.g., put this right before "argv = NULL;": if (close (ret)) return -1; It'd be nice to declare a new variable, say fd, for that bit.