Module Name:    src
Committed By:   martin
Date:           Fri Dec  6 19:36:22 UTC 2019

Modified Files:
        src/usr.sbin/sysinst: disklabel.c

Log Message:
Sanitize disk type and packname a bit more - when using existing disklabel
partitions we might run into trouble later when filing this label (unescaped)
in disktab format otherwise.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/usr.sbin/sysinst/disklabel.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/sysinst/disklabel.c
diff -u src/usr.sbin/sysinst/disklabel.c:1.15 src/usr.sbin/sysinst/disklabel.c:1.16
--- src/usr.sbin/sysinst/disklabel.c:1.15	Tue Nov 12 16:33:14 2019
+++ src/usr.sbin/sysinst/disklabel.c	Fri Dec  6 19:36:22 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disklabel.c,v 1.15 2019/11/12 16:33:14 martin Exp $	*/
+/*	$NetBSD: disklabel.c,v 1.16 2019/12/06 19:36:22 martin Exp $	*/
 
 /*
  * Copyright 2018 The NetBSD Foundation, Inc.
@@ -281,13 +281,10 @@ disklabel_write_to_disk(struct disk_part
 	assert(parts->l.d_ncylinders != 0);
 	assert(parts->l.d_secpercyl != 0);
 
-	sprintf(fname, "/tmp/disklabel.%u", getpid());
-	f = fopen(fname, "w");
-	if (f == NULL)
-		return false;
-
 	/* make sure we have a 0 terminated packname */
 	strlcpy(packname, parts->l.d_packname, sizeof packname);
+	if (packname[0] == 0)
+		strcpy(packname, "fictious");
 
 	/* fill typename with disk name prefix, if not already set */
 	if (strlen(parts->l.d_typename) == 0) {
@@ -299,6 +296,12 @@ disklabel_write_to_disk(struct disk_part
 		}
 	}
 	parts->l.d_typename[sizeof(parts->l.d_typename)-1] = 0;
+	for (d = parts->l.d_typename; *d; d++) {
+		if (isalnum((unsigned char)*d) || *d == '-')
+			continue;
+		*d = 0;
+		break;
+	}
 
 	/* we need a valid disk type name, so enforce an arbitrary if
 	 * above did not yield a usable one */
@@ -306,6 +309,11 @@ disklabel_write_to_disk(struct disk_part
 		strncpy(parts->l.d_typename, "SCSI",
 		    sizeof(parts->l.d_typename));
 
+	sprintf(fname, "/tmp/disklabel.%u", getpid());
+	f = fopen(fname, "w");
+	if (f == NULL)
+		return false;
+
 	lp = parts->l.d_partitions;
 	scripting_fprintf(NULL, "cat <<EOF >%s\n", fname);
 	scripting_fprintf(f, "%s|NetBSD installation generated:\\\n",

Reply via email to