On Fri, Mar 05, 2010 at 11:20:38PM -0500, Laine Stump wrote: > doTunnelSendAll function (used by QEMU migration) uses a 64k buffer on > the stack, which could be problematic. This patch replaces that with a > buffer from the heap. > > While in the neighborhood, this patch also improves error reporting in > the case that saferead fails - previously, virStreamAbort() was called > (resetting errno) before reporting the error. It's been changed to > report the error first. > --- > > Eric noticed that I was inconsistent in the ordering of cleanup > vs. error reporting, so I fixed that in this version. > > src/qemu/qemu_driver.c | 18 +++++++++++++++--- > 1 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c > index bb3edde..5a18938 100644 > --- a/src/qemu/qemu_driver.c > +++ b/src/qemu/qemu_driver.c > @@ -8399,19 +8399,28 @@ cleanup: > } > > > +#define TUNNEL_SEND_BUF_SIZE 65536 > + > static int doTunnelSendAll(virStreamPtr st, > int sock) > { > - char buffer[65536]; > - int nbytes = sizeof(buffer); > + char *buffer; > + int nbytes = TUNNEL_SEND_BUF_SIZE; > + > + if (VIR_ALLOC_N(buffer, TUNNEL_SEND_BUF_SIZE) < 0) { > + virReportOOMError(); > + virStreamAbort(st); > + return -1; > + } > > /* XXX should honour the 'resource' parameter here */ > for (;;) { > nbytes = saferead(sock, buffer, nbytes); > if (nbytes < 0) { > - virStreamAbort(st); > virReportSystemError(errno, "%s", > _("tunnelled migration failed to read from qemu")); > + virStreamAbort(st); > + VIR_FREE(buffer); > return -1; > } > else if (nbytes == 0) > @@ -8421,10 +8430,13 @@ static int doTunnelSendAll(virStreamPtr st, > if (virStreamSend(st, buffer, nbytes) < 0) { > qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", > _("Failed to write migration data to remote libvirtd")); > + VIR_FREE(buffer); > return -1; > } > } > > + VIR_FREE(buffer); > + > if (virStreamFinish(st) < 0) > /* virStreamFinish set the error for us */ > return -1; ACK, that needed to be fixed ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list