[libvirt] [PATCH] virsh: don't crash if shutdown --mode not provided

virStringSplit requires a non-NULL input, but commit cef78ed forgot to follow the rule. * tools/virsh-domain.c (cmdReboot, cmdShutdown): Avoid NULL deref. --- Pushing under the build-breaker rule. tools/virsh-domain.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 9f1a3d4..f12777c 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -4036,20 +4036,20 @@ cmdShutdown(vshControl *ctl, const vshCmd *cmd) const char *mode = NULL; int flags = 0; int rv; - char **modes, **tmp; + char **modes = NULL, **tmp; if (vshCommandOptString(cmd, "mode", &mode) < 0) { vshError(ctl, "%s", _("Invalid type")); return false; } - if (!(modes = virStringSplit(mode, ",", 0))) { + if (mode && !(modes = virStringSplit(mode, ",", 0))) { vshError(ctl, "%s", _("Cannot parse mode string")); return false; } tmp = modes; - while (*tmp) { + while (tmp && *tmp) { mode = *tmp; if (STREQ(mode, "acpi")) { flags |= VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN; @@ -4112,20 +4112,20 @@ cmdReboot(vshControl *ctl, const vshCmd *cmd) const char *name; const char *mode = NULL; int flags = 0; - char **modes, **tmp; + char **modes = NULL, **tmp; if (vshCommandOptString(cmd, "mode", &mode) < 0) { vshError(ctl, "%s", _("Invalid type")); return false; } - if (!(modes = virStringSplit(mode, ",", 0))) { + if (mode && !(modes = virStringSplit(mode, ",", 0))) { vshError(ctl, "%s", _("Cannot parse mode string")); return false; } tmp = modes; - while (*tmp) { + while (tmp && *tmp) { mode = *tmp; if (STREQ(mode, "acpi")) { flags |= VIR_DOMAIN_REBOOT_ACPI_POWER_BTN; -- 1.7.1

On Fri, Nov 30, 2012 at 02:56:08PM -0700, Eric Blake wrote:
virStringSplit requires a non-NULL input, but commit cef78ed forgot to follow the rule.
* tools/virsh-domain.c (cmdReboot, cmdShutdown): Avoid NULL deref. ---
Pushing under the build-breaker rule.
tools/virsh-domain.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
ACK, thanks for finding this. I guess I forgot to re-run the test suite after the v2 of my series changing virsh. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
participants (2)
-
Daniel P. Berrange
-
Eric Blake