Module Name:    src
Committed By:   mrg
Date:           Fri Oct  4 21:36:02 UTC 2019

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

Log Message:
add a size_t len to get_iso9660_volname() so it can properly do
bounds checking.

ok martin@


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/usr.sbin/sysinst/util.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/util.c
diff -u src/usr.sbin/sysinst/util.c:1.33 src/usr.sbin/sysinst/util.c:1.34
--- src/usr.sbin/sysinst/util.c:1.33	Wed Oct  2 11:16:04 2019
+++ src/usr.sbin/sysinst/util.c	Fri Oct  4 21:36:02 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: util.c,v 1.33 2019/10/02 11:16:04 maya Exp $	*/
+/*	$NetBSD: util.c,v 1.34 2019/10/04 21:36:02 mrg Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -171,7 +171,8 @@ int have_raid, have_vnd, have_cgd, have_
  */
 
 static int check_for(unsigned int mode, const char *pathname);
-static int get_iso9660_volname(int dev, int sess, char *volname);
+static int get_iso9660_volname(int dev, int sess, char *volname,
+		size_t volnamelen);
 static int get_available_cds(void);
 static int binary_available(const char *prog);
 
@@ -377,7 +378,7 @@ get_via_floppy(void)
  * Get the volume name of a ISO9660 file system
  */
 static int
-get_iso9660_volname(int dev, int sess, char *volname)
+get_iso9660_volname(int dev, int sess, char *volname, size_t volnamelen)
 {
 	int blkno, error, last;
 	char buf[ISO_BLKSIZE];
@@ -394,8 +395,9 @@ get_iso9660_volname(int dev, int sess, c
 		if (isonum_711((const unsigned char *)&vd->type)
 		     == ISO_VD_PRIMARY) {
 			pd = (struct iso_primary_descriptor*)buf;
-			strncpy(volname, pd->volume_id, sizeof pd->volume_id);
-			last = sizeof pd->volume_id-1;
+			strncpy(volname, pd->volume_id, volnamelen - 1);
+			volname[volnamelen - 1] = '\0';
+			last = volnamelen - 1;
 			while (last >= 0
 			    && (volname[last] == ' ' || volname[last] == 0))
 				last--;
@@ -456,7 +458,8 @@ get_available_cds_helper(void *arg, cons
 			dev = open(dname, O_RDONLY, 0);
 			if (dev == -1)
 				continue;
-			error = get_iso9660_volname(dev, sess, volname);
+			error = get_iso9660_volname(dev, sess, volname,
+			    sizeof volname);
 			close(dev);
 			if (error)
 				continue;

Reply via email to