[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] mini-os: netfront: Fix parsing of IP value provided by Xenstore



Costin Lupu, le ven. 04 sept. 2020 13:40:23 +0300, a ecrit:
> This patch fixes the following issues:
> - commit 1b8ed31f introduced support for reading netmask and gateway values
>   from Xenstore. However it did not take care of the initial scenario when
>   these values are not provided.
> - gateway is not set when passing mask=NULL to _init_netfront()
> - mini-os crashes when IP is not provided at all in the xl config file.
> 
> The current implementation supports only dot-decimal representations of IP,
> netmask and gateway.
> 
> Reported-by: Jan Beulich <jbeulich@xxxxxxxx>
> Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>

Reviewed-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>

> ---
>  netfront.c | 24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/netfront.c b/netfront.c
> index 205484b..d066bd9 100644
> --- a/netfront.c
> +++ b/netfront.c
> @@ -375,11 +375,11 @@ out:
>          rawmac[5] = ldev->rawmac[5];
>       }
>      if (ip)
> -        *ip = strdup(ldev->ip);
> +        *ip = ldev->ip ? strdup(ldev->ip) : NULL;
>      if (mask)
> -        *mask = strdup(ldev->mask);
> +        *mask = ldev->mask ? strdup(ldev->mask) : NULL;
>      if (gw)
> -        *gw = strdup(ldev->gw);
> +        *gw = ldev->gw ? strdup(ldev->gw) : NULL;
>  
>  err:
>      return dev;
> @@ -524,23 +524,23 @@ done:
>          }
>  
>          if (ip) {
> -            char *p;
> -
>              snprintf(path, sizeof(path), "%s/ip", dev->backend);
>              xenbus_read(XBT_NIL, path, ip);
>  
> -            if (mask) {
> +            if (*ip) {
> +                char *p;
> +
>                  p = strchr(*ip, ' ');
>                  if (p) {
>                      *p++ = '\0';
> -                    *mask = p;
> +                    if (mask)
> +                        *mask = p;
>  
> -                    if (gw) {
> -                        p = strchr(p, ' ');
> -                        if (p) {
> -                            *p++ = '\0';
> +                    p = strchr(p, ' ');
> +                    if (p) {
> +                        *p++ = '\0';
> +                        if (gw)
>                              *gw = p;
> -                        }
>                      }
>                  }
>              }
> -- 
> 2.20.1



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.