[PATCH 1/2] discover/platform-powerpc: Avoid confusing gateway and URL

Samuel Mendoza-Jonas sam at mendozajonas.com
Mon Feb 26 16:27:27 AEDT 2018


If we have a static network config with a URL set but not a gateway we
can confuse the URL as the gateway due to how we write the network
string in NVRAM.

To avoid changing the parameter format if we only have one of the two
tokens check whether or not it's actually a URL; the gateway and the URL
will have distinct formats.

Signed-off-by: Samuel Mendoza-Jonas <sam at mendozajonas.com>
---
 discover/platform-powerpc.c | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c
index ed5733e..dc4abb8 100644
--- a/discover/platform-powerpc.c
+++ b/discover/platform-powerpc.c
@@ -16,6 +16,7 @@
 #include <log/log.h>
 #include <process/process.h>
 #include <types/types.h>
+#include <url/url.h>
 
 #include "hostboot.h"
 #include "platform.h"
@@ -287,7 +288,7 @@ static int parse_one_interface_config(struct config *config,
 		char *confstr)
 {
 	struct interface_config *ifconf;
-	char *tok, *saveptr;
+	char *tok, *tok_gw, *tok_url, *saveptr;
 
 	ifconf = talloc_zero(config, struct interface_config);
 
@@ -320,18 +321,26 @@ static int parse_one_interface_config(struct config *config,
 		ifconf->static_config.address =
 			talloc_strdup(ifconf, tok);
 
-		tok = strtok_r(NULL, ",", &saveptr);
-		if (tok) {
-			ifconf->static_config.gateway =
-				talloc_strdup(ifconf, tok);
+		/*
+		 * If a url is set but not a gateway, we can accidentally
+		 * interpret the url as the gateway. To avoid changing the
+		 * parameter format check if the "gateway" is actually a
+		 * pb-url if it's the last token.
+		 */
+		tok_gw = strtok_r(NULL, ",", &saveptr);
+		tok_url = strtok_r(NULL, ",", &saveptr);
+
+		if (tok_gw) {
+			if (tok_url || !is_url(tok_gw))
+				ifconf->static_config.gateway =
+					talloc_strdup(ifconf, tok_gw);
+			else
+					tok_url = tok_gw;
 		}
 
-		tok = strtok_r(NULL, ",", &saveptr);
-		if (tok) {
+		if (tok_url)
 			ifconf->static_config.url =
-				talloc_strdup(ifconf, tok);
-		}
-
+				talloc_strdup(ifconf, tok_url);
 	} else {
 		pb_log("Unknown network configuration method %s\n", tok);
 		goto out_err;
-- 
2.16.2



More information about the Petitboot mailing list