[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2] mini-os: netfront: Fix parsing of IP value provided by Xenstore
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> --- 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |