[libvirt] [PATCH] Sanitize qemu monitor output
Daniel P. Berrange
berrange at redhat.com
Tue Dec 2 10:58:13 UTC 2008
On Mon, Dec 01, 2008 at 05:36:34PM -0500, Cole Robinson wrote:
> The attached patch cleans up output we read from the qemu monitor. This
> is a simplified form of a patch I posted awhile ago. From the patch:
>
> /* The monitor doesn't dump clean output after we have written to
> * it. Every character we write dumps a bunch of useless stuff,
> * so the result looks like "cXcoXcomXcommXcommaXcommanXcommand"
> * Try to throw away everything before the first full command
> * occurence, and inbetween the command and the newline starting
> * the response
> */
>
> This extra output makes our qemu log files _huge_ if doing things like
> polling disk/net stats, and prevents us from returning any useful error
> message printed from the monitor (say for media/disk eject, disk/net
> stats, etc).
Yes, this is quite horrific output thanks to QEMU's readline emulation
which we can't turn off.
> I've been running with this patch for a while and haven't hit any issues.
> if (buf && ((tmp = strstr(buf, "\n(qemu) ")) != NULL)) {
> - tmp[0] = '\0';
> + /* Preserve the newline */
> + tmp[1] = '\0';
> +
> + /* The monitor doesn't dump clean output after we have written to
> + * it. Every character we write dumps a bunch of useless stuff,
> + * so the result looks like "cXcoXcomXcommXcommaXcommanXcommand"
> + * Try to throw away everything before the first full command
> + * occurence, and inbetween the command and the newline starting
> + * the response
> + */
> + if ((commptr = strstr(buf, cmd))) {
> + char *dupptr = strchr(commptr, '\n');
> + if (dupptr) {
> + char *tmpbuf = strdup(dupptr);
> + VIR_FREE(buf);
> + buf = strdup(tmpbuf);
> + }
> + }
This loooks a little overly complex to me, doesn't handle alloction failures
in strdup correctly & leaks tmpbuf. Can't we just simplify it to
if ((commptr = strstr(buf, cmd)))
memmove(buf, commptr, strlen(commptr)+1);
avoiding re-allocation entirely ?
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list