[libvirt] [PATCH] conf: Resolve corner case on fc_host deletion

John Ferlan jferlan at redhat.com
Wed May 17 10:56:43 UTC 2017


ping^2

Tks,

John

On 04/29/2017 11:36 AM, John Ferlan wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=1420740
> 
> Testing found an inventive way to cause an error at shutdown by providing the
> parent name for the fc host creation using the "same name" as the HBA. Since
> the code thus assumed the parent host name provided was the parent HBA and
> just extracted out the host number and sent that along to the vport_destroy
> this avoided checks made for equality.
> 
> So just add the equality check to that path to resolve.
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  src/conf/node_device_conf.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
> index 85cfd83..3f995da 100644
> --- a/src/conf/node_device_conf.c
> +++ b/src/conf/node_device_conf.c
> @@ -2127,17 +2127,25 @@ virNodeDeviceDeleteVport(virConnectPtr conn,
>          goto cleanup;
>      }
>  
> +    if (virAsprintf(&scsi_host_name, "scsi_%s", name) < 0)
> +        goto cleanup;
> +
>      /* If at startup time we provided a parent, then use that to
>       * get the parent_host value; otherwise, we have to determine
>       * the parent scsi_host which we did not save at startup time
>       */
>      if (fchost->parent) {
> +        /* Someone provided a parent string at startup time that
> +         * was the same as the scsi_host - meaning we have a pool
> +         * backed to an HBA, so there won't be a vHBA to delete */
> +        if (STREQ(scsi_host_name, fchost->parent)) {
> +            ret = 0;
> +            goto cleanup;
> +        }
> +
>          if (virSCSIHostGetNumber(fchost->parent, &parent_host) < 0)
>              goto cleanup;
>      } else {
> -        if (virAsprintf(&scsi_host_name, "scsi_%s", name) < 0)
> -            goto cleanup;
> -
>          if (!(vhba_parent = virNodeDeviceGetParentName(conn, scsi_host_name)))
>              goto cleanup;
>  
> 




More information about the libvir-list mailing list