Date: Thu, 09 Nov 2000 22:09:32 +0000 From: Tony Finch <dot@dotat.at> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/22727: disklabel crashes if the number of partitions equals MAXPARTITIONS Message-ID: <E13tzsy-0002L8-00@hand.dotat.at>
next in thread | raw e-mail | index | archive | help
>Number: 22727
>Category: bin
>Synopsis: disklabel crashes if the number of partitions equals MAXPARTITIONS
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Nov 09 14:10:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator: Tony Finch <dot@dotat.at>
>Release: FreeBSD 4.2-BETA-20001104 i386
>Organization:
dotat
>Environment:
FreeBSD hand.dotat.at 4.2-BETA-20001104 FreeBSD 4.2-BETA-20001104 #0: Sat Nov 4 22:44:50 UTC 2000 fanf@hand.dotat.at:/FreeBSD/obj/FreeBSD/releng4/sys/DELL-Latitude-CPx i386
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 1606500 0 4.2BSD 1024 8192 16 # (Cyl. 0 - 99)
b: 1606500 1606500 swap # (Cyl. 100 - 199)
c: 23567292 0 unused 0 0 # (Cyl. 0 - 1466*)
e: 1606500 3213000 4.2BSD 1024 8192 16 # (Cyl. 200 - 299)
f: 8032500 4819500 4.2BSD 1024 8192 16 # (Cyl. 300 - 799)
g: 1606500 12852000 ISO9660 # (Cyl. 800 - 899)
h: 1606500 14458500 4.2BSD 1024 8192 16 # (Cyl. 900 - 999)
>Description:
I tried to add another partition to the above configuration and I gave it the
letter 'i'. When I quit the editor, disklabel died from a segmentation fault
on line 841 of disklabel.c because the variable lp had been corrupted. I worked
out that this occurred in getasciilabel() because of an off-by-one error.
While I am here I note that disklabel handles editing the file in a way similar
to the way that crontab used to, until a vulnerability was found recently. I
don't know if it could cause problems, though.
>How-To-Repeat:
>Fix:
Index: disklabel.c
===================================================================
RCS file: /home/ncvs/src/sbin/disklabel/disklabel.c,v
retrieving revision 1.28.2.5
diff -u -r1.28.2.5 disklabel.c
--- disklabel.c 2000/10/31 01:32:23 1.28.2.5
+++ disklabel.c 2000/11/09 22:00:23
@@ -1141,7 +1141,7 @@
if ('a' <= *cp && *cp <= 'z' && cp[1] == '\0') {
unsigned part = *cp - 'a';
- if (part > lp->d_npartitions) {
+ if (part >= lp->d_npartitions) {
fprintf(stderr,
"line %d: bad partition name\n", lineno);
errors++;
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E13tzsy-0002L8-00>
