bin/71404: [PATCH] Only make one active partition in sysinstall(8)

Xin LI delphij at
Sun Sep 5 09:50:23 PDT 2004

>Number:         71404
>Category:       bin
>Synopsis:       [PATCH] Only make one active partition in sysinstall(8)
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Sep 05 16:50:20 GMT 2004
>Originator:     Xin LI
>Release:        FreeBSD 5.2-delphij i386
The FreeBSD Simplified Chinese Project
System: FreeBSD 5.2-delphij FreeBSD 5.2-delphij #0: Tue Aug 17 14:22:25 CST 2004 delphij at i386

	The handling of active partition in sysinstall(8) contained a minor
flaw that allows two partitions to be marked as "active" in the same time.
Before having a user shoot his or her feet, I think it would be a good idea
not permitting this at all.
	Run sysinstall(8), Configure -> Fdisk ->  (choose a disk having more
than one partition) -> try to use "S" on more than one partition.


	The attached patch would reset active states in the whole partition
chain and hence won't allow two partitions to be set "active" at the same
time.  Might be a good candidate for the upcoming 5.3-RELEASE.

	Along with the functional patch I have added a "CHUNK_INFO_ENTRIES"
define to make it easier to have consist code.

--- patch-sysinstall::disks.c begins here ---
Index: disks.c
RCS file: /home/fcvs/src/usr.sbin/sysinstall/disks.c,v
retrieving revision 1.152
diff -u -r1.152 disks.c
--- disks.c	2 Aug 2004 23:18:48 -0000	1.152
+++ disks.c	5 Sep 2004 16:39:22 -0000
@@ -74,7 +74,8 @@
 #define CHUNK_START_ROW		5
 /* Where we keep track of MBR chunks */
-static struct chunk *chunk_info[16];
+static struct chunk *chunk_info[CHUNK_INFO_ENTRIES];
 static int current_chunk;
 static void	diskPartitionNonInteractive(Device *dev);
@@ -312,6 +313,7 @@
     char *cp, *p;
     int rv, key = 0;
+    int i;
     Boolean chunking;
     char *msg = NULL;
 #ifdef PC98
@@ -535,6 +537,10 @@
 	case 'S':
+	    /* Clear active states so we won't have two */
+	    for (i = 0; (chunk_info[i] != NULL) && (i < CHUNK_INFO_ENTRIES); i++)
+		chunk_info[i]->flags &= !CHUNK_ACTIVE;
 	    /* Set Bootable */
 	    chunk_info[current_chunk]->flags |= CHUNK_ACTIVE;
--- patch-sysinstall::disks.c ends here ---


More information about the freebsd-bugs mailing list