[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




 


Rackspace

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