Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 29 Jan 2006 05:04:35 -0800
From:      Luigi Rizzo <rizzo@icir.org>
To:        current@freebsd.org
Subject:   for review: sys/dev/md/md.c patch
Message-ID:  <20060129050435.A5945@xorpc.icir.org>

next in thread | raw e-mail | index | archive | help
just discovered, trying to resurrect picobsd on -current,
that the compiler in 6.x/7.x has become smart and, at least
with the default compilation flags, will optimize out
the "end_mfs_root" string from the object.
As a consequence, any checks that the preloaded module
does not overflow the allocated space (looking at the
'MFS Filesystem had better STOP here' string in the patched
object) will fail.

The attached patch fixes the issue. Any objection if i commit it ?

	cheers
	luigi

Index: md.c
===================================================================
RCS file: /prova/home/ncvs/src/sys/dev/md/md.c,v
retrieving revision 1.159
diff -u -p -r1.159 md.c
--- md.c	31 Oct 2005 15:41:19 -0000	1.159
+++ md.c	29 Jan 2006 12:57:22 -0000
@@ -102,8 +102,13 @@ SYSCTL_INT(_debug, OID_AUTO, mddebug, CT
 
 #if defined(MD_ROOT) && defined(MD_ROOT_SIZE)
 /* Image gets put here: */
-static u_char mfs_root[MD_ROOT_SIZE*1024] = "MFS Filesystem goes here";
-static u_char end_mfs_root[] __unused = "MFS Filesystem had better STOP here";
+static struct {
+	u_char start[MD_ROOT_SIZE*1024];
+	u_char end[128];
+} mfs_root = {
+	.start = "MFS Filesystem goes here",
+	.end = "MFS Filesystem had better STOP here",
+};
 #endif
 
 static g_init_t g_md_init;
@@ -1139,7 +1144,7 @@ g_md_init(struct g_class *mp __unused)
 	g_topology_unlock();
 #ifdef MD_ROOT_SIZE
 	sx_xlock(&md_sx);
-	md_preloaded(mfs_root, MD_ROOT_SIZE * 1024);
+	md_preloaded(mfs_root.start, MD_ROOT_SIZE * 1024);
 	sx_xunlock(&md_sx);
 #endif
 	/* XXX: are preload_* static or do they need Giant ? */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060129050435.A5945>