installer: Fix reading /proc/cmdline when launched by GRUB

Message ID 20210713154420.451-1-michael.tremer@ipfire.org
State Accepted
Commit 646d6b0670e2b56d007675ad2db1ac7670850382
Headers
Series installer: Fix reading /proc/cmdline when launched by GRUB |

Commit Message

Michael Tremer July 13, 2021, 3:44 p.m. UTC
  The installer was reading the kernel command line and was looking for
certain values which configured the installer.

GRUB appended a trailing newline character which was not accounted for
and caused that the last parameter was not correctly compared to the
list of possible keys.

Fixes: #12656 - core 157: unattended installation don't work as expected on EFI
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
 src/installer/main.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
  

Patch

diff --git a/src/installer/main.c b/src/installer/main.c
index 00d172888..fd20a1f37 100644
--- a/src/installer/main.c
+++ b/src/installer/main.c
@@ -290,18 +290,23 @@  static struct config {
 	.language = DEFAULT_LANG,
 };
 
-static void parse_command_line(struct config* c) {
+static void parse_command_line(FILE* flog, struct config* c) {
 	char buffer[STRING_SIZE];
 	char cmdline[STRING_SIZE];
 
 	FILE* f = fopen("/proc/cmdline", "r");
-	if (!f)
+	if (!f) {
+		fprintf(flog, "Could not open /proc/cmdline: %m");
 		return;
+	}
 
 	int r = fread(&cmdline, 1, sizeof(cmdline) - 1, f);
 	if (r > 0) {
-		char* token = strtok(cmdline, " ");
+		// Remove the trailing newline
+		if (cmdline[r-1] == '\n')
+			cmdline[r-1] = '\0';
 
+		char* token = strtok(cmdline, " ");
 		while (token) {
 			strncpy(buffer, token, sizeof(buffer));
 			char* val = buffer;
@@ -403,7 +408,7 @@  int main(int argc, char *argv[]) {
 	snprintf(title, sizeof(title), "%s - %s", DISTRO_NAME, DISTRO_SLOGAN);
 
 	// Parse parameters from the kernel command line
-	parse_command_line(&config);
+	parse_command_line(flog, &config);
 
 	if (config.unattended) {
 		splashWindow(title, _("Warning: Unattended installation will start in 10 seconds..."), 10);