bin/125365: [patch] mdconfig(8) -l overflow for size field

Frank Behrens frank+pr20080707 at harz.behrens.de
Mon Jul 7 12:30:05 UTC 2008


>Number:         125365
>Category:       bin
>Synopsis:       [patch] mdconfig(8) -l overflow for size field
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jul 07 12:30:03 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Frank Behrens
>Release:        FreeBSD 7.0-STABLE-200805150513 i386
>Organization:
>Environment:

>Description:
	mdconfig(8) shows with -l -v the size of configured device. For devices with size > ULONG_MAX no number is shown.
>How-To-Repeat:
	Configute a bigger md device and show details:
# cd /tmp
# truncate -s 1G s.tmp
# truncate -s 10G b.tmp
# mdconfig -a -t vnode -f s.tmp -u 100
# mdconfig -a -t vnode -f b.tmp -u 101
# mdconfig -l -u 100
   1.0G  /tmp/s.tmp
# mdconfig -l -u 101
         /tmp/b.tmp
# mdconfig -d -u 100
# mdconfig -d -u 101
# rm s.tmp b.tmp

	
>Fix:

--- mdconfig_overflow.patch begins here ---
--- mdconfig.c.orig	2008-07-05 17:05:27.481413000 +0200
+++ mdconfig.c	2008-07-07 14:02:04.355862796 +0200
@@ -444,11 +444,11 @@
 md_prthumanval(char *length)
 {
 	char buf[6];
-	uint64_t bytes;
+	unsigned long long bytes;
 	char *endptr;
 
-	bytes = strtoul(length, &endptr, 10);
-	if (bytes == (unsigned)ULONG_MAX || *endptr != '\0')
+	bytes = strtoull(length, &endptr, 10);
+	if (bytes == (unsigned)ULLONG_MAX || *endptr != '\0')
 		return;
 	humanize_number(buf, sizeof(buf) - (bytes < 0 ? 0 : 1),
 	    bytes, "", HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
--- mdconfig_overflow.patch ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list