[libvirt] [PATCH] Fix crash in virsh after bogus command.

Laine Stump laine at laine.org
Fri Mar 12 05:06:50 UTC 2010


On 03/11/2010 06:00 PM, Chris Lalancette wrote:
> If you ran virsh in interactive mode and ran a command
> that virsh could not parse, it would then SEGV
> on subsequent commands.  The problem is that we are
> freeing the vshCmd structure in the syntaxError label
> at the end of vshCommandParse, but forgetting to
> set ctl->cmd to NULL.  This means that on the next command,
> we would try to free the same structure again, leading
> to badness.  Make sure to set ctl->cmd to NULL after
> freeing it.
>
> Signed-off-by: Chris Lalancette<clalance at redhat.com>
> ---
>   tools/virsh.c |    4 +++-
>   1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index c6e3f2a..eeaddbc 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -8643,8 +8643,10 @@ vshCommandParse(vshControl *ctl, char *cmdstr)
>       return TRUE;
>
>    syntaxError:
> -    if (ctl->cmd)
> +    if (ctl->cmd) {
>           vshCommandFree(ctl->cmd);
> +        ctl->cmd = NULL;
> +    }
>       if (first)
>           vshCommandOptFree(first);
>       VIR_FREE(tkdata);
>    

ACK.

Tricky! This only reveals itself if you put multiple commands on a 
single line (separated by ";"), the first command is valid, and one of 
the subsequent commands on the line is bogus. (Yes, I verified presence 
of the crash before applying, and absence afterwards).




More information about the libvir-list mailing list