Module Name:    src
Committed By:   christos
Date:           Mon Dec 21 00:58:08 UTC 2015

Modified Files:
        src/usr.sbin/makefs: ffs.c
        src/usr.sbin/makefs/ffs: mkfs.c newfs_extern.h

Log Message:
more deterministic ffs for reproducible builds.


To generate a diff of this commit:
cvs rdiff -u -r1.65 -r1.66 src/usr.sbin/makefs/ffs.c
cvs rdiff -u -r1.32 -r1.33 src/usr.sbin/makefs/ffs/mkfs.c
cvs rdiff -u -r1.3 -r1.4 src/usr.sbin/makefs/ffs/newfs_extern.h

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/makefs/ffs.c
diff -u src/usr.sbin/makefs/ffs.c:1.65 src/usr.sbin/makefs/ffs.c:1.66
--- src/usr.sbin/makefs/ffs.c:1.65	Sun Dec 20 17:54:44 2015
+++ src/usr.sbin/makefs/ffs.c	Sun Dec 20 19:58:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs.c,v 1.65 2015/12/20 22:54:44 christos Exp $	*/
+/*	$NetBSD: ffs.c,v 1.66 2015/12/21 00:58:08 christos Exp $	*/
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -71,7 +71,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(__lint)
-__RCSID("$NetBSD: ffs.c,v 1.65 2015/12/20 22:54:44 christos Exp $");
+__RCSID("$NetBSD: ffs.c,v 1.66 2015/12/21 00:58:08 christos Exp $");
 #endif	/* !__lint */
 
 #include <sys/param.h>
@@ -466,6 +466,7 @@ ffs_create_image(const char *image, fsin
 	char	*buf;
 	int	i, bufsize;
 	off_t	bufrem;
+	time_t	tstamp;
 	int	oflags = O_RDWR | O_CREAT;
 
 	assert (image != NULL);
@@ -530,7 +531,15 @@ ffs_create_image(const char *image, fsin
 		/* make the file system */
 	if (debug & DEBUG_FS_CREATE_IMAGE)
 		printf("calling mkfs(\"%s\", ...)\n", image);
-	fs = ffs_mkfs(image, fsopts);
+
+	if (stampst.st_ino == 1)
+		tstamp = stampst.st_ctime;
+	else
+		tstamp = start_time.tv_sec;
+
+	srandom(tstamp);
+
+	fs = ffs_mkfs(image, fsopts, tstamp);
 	fsopts->superblock = (void *)fs;
 	if (debug & DEBUG_FS_CREATE_IMAGE) {
 		time_t t;
@@ -1111,7 +1120,6 @@ ffs_write_inode(union dinode *dp, uint32
 	    initediblk < ufs_rw32(cgp->cg_niblk, fsopts->needswap)) {
 		memset(buf, 0, fs->fs_bsize);
 		dip = (struct ufs2_dinode *)buf;
-		srandom(time(NULL));
 		for (i = 0; i < FFS_INOPB(fs); i++) {
 			dip->di_gen = random() / 2 + 1;
 			dip++;

Index: src/usr.sbin/makefs/ffs/mkfs.c
diff -u src/usr.sbin/makefs/ffs/mkfs.c:1.32 src/usr.sbin/makefs/ffs/mkfs.c:1.33
--- src/usr.sbin/makefs/ffs/mkfs.c:1.32	Sat Oct 19 13:16:37 2013
+++ src/usr.sbin/makefs/ffs/mkfs.c	Sun Dec 20 19:58:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: mkfs.c,v 1.32 2013/10/19 17:16:37 christos Exp $	*/
+/*	$NetBSD: mkfs.c,v 1.33 2015/12/21 00:58:08 christos Exp $	*/
 
 /*
  * Copyright (c) 2002 Networks Associates Technology, Inc.
@@ -48,7 +48,7 @@
 static char sccsid[] = "@(#)mkfs.c	8.11 (Berkeley) 5/3/95";
 #else
 #ifdef __RCSID
-__RCSID("$NetBSD: mkfs.c,v 1.32 2013/10/19 17:16:37 christos Exp $");
+__RCSID("$NetBSD: mkfs.c,v 1.33 2015/12/21 00:58:08 christos Exp $");
 #endif
 #endif
 #endif /* not lint */
@@ -122,7 +122,7 @@ static int     avgfilesize;	   /* expect
 static int     avgfpdir;	   /* expected number of files per directory */
 
 struct fs *
-ffs_mkfs(const char *fsys, const fsinfo_t *fsopts)
+ffs_mkfs(const char *fsys, const fsinfo_t *fsopts, time_t tstamp)
 {
 	int fragsperinode, optimalfpg, origdensity, minfpg, lastminfpg;
 	int32_t cylno, i, csfrags;
@@ -445,7 +445,7 @@ ffs_mkfs(const char *fsys, const fsinfo_
 	sblock.fs_state = 0;
 	sblock.fs_clean = FS_ISCLEAN;
 	sblock.fs_ronly = 0;
-	sblock.fs_id[0] = start_time.tv_sec;
+	sblock.fs_id[0] = tstamp;
 	sblock.fs_id[1] = random();
 	sblock.fs_fsmnt[0] = '\0';
 	csfrags = howmany(sblock.fs_cssize, sblock.fs_fsize);
@@ -461,9 +461,9 @@ ffs_mkfs(const char *fsys, const fsinfo_
 	sblock.fs_cstotal.cs_nifree = sblock.fs_ncg * sblock.fs_ipg - UFS_ROOTINO;
 	sblock.fs_cstotal.cs_ndir = 0;
 	sblock.fs_dsize -= csfrags;
-	sblock.fs_time = start_time.tv_sec;
+	sblock.fs_time = tstamp;
 	if (Oflag <= 1) {
-		sblock.fs_old_time = start_time.tv_sec;
+		sblock.fs_old_time = tstamp;
 		sblock.fs_old_dsize = sblock.fs_dsize;
 		sblock.fs_old_csaddr = sblock.fs_csaddr;
 		sblock.fs_old_cstotal.cs_ndir = sblock.fs_cstotal.cs_ndir;
@@ -515,7 +515,7 @@ ffs_mkfs(const char *fsys, const fsinfo_
 
 	printf("super-block backups (for fsck -b #) at:");
 	for (cylno = 0; cylno < sblock.fs_ncg; cylno++) {
-		initcg(cylno, start_time.tv_sec, fsopts);
+		initcg(cylno, tstamp, fsopts);
 		if (cylno % nprintcols == 0)
 			printf("\n");
 		printf(" %*lld,", printcolwidth,
@@ -528,7 +528,7 @@ ffs_mkfs(const char *fsys, const fsinfo_
 	 * Now construct the initial file system,
 	 * then write out the super-block.
 	 */
-	sblock.fs_time = start_time.tv_sec;
+	sblock.fs_time = tstamp;
 	if (Oflag <= 1) {
 		sblock.fs_old_cstotal.cs_ndir = sblock.fs_cstotal.cs_ndir;
 		sblock.fs_old_cstotal.cs_nbfree = sblock.fs_cstotal.cs_nbfree;

Index: src/usr.sbin/makefs/ffs/newfs_extern.h
diff -u src/usr.sbin/makefs/ffs/newfs_extern.h:1.3 src/usr.sbin/makefs/ffs/newfs_extern.h:1.4
--- src/usr.sbin/makefs/ffs/newfs_extern.h:1.3	Tue Oct 20 21:07:47 2009
+++ src/usr.sbin/makefs/ffs/newfs_extern.h	Sun Dec 20 19:58:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: newfs_extern.h,v 1.3 2009/10/21 01:07:47 snj Exp $	*/
+/*	$NetBSD: newfs_extern.h,v 1.4 2015/12/21 00:58:08 christos Exp $	*/
 /* From: NetBSD: extern.h,v 1.3 2000/12/01 12:03:27 simonb Exp $ */
 
 /*
@@ -26,7 +26,7 @@
  */
 
 /* prototypes */
-struct fs	*ffs_mkfs(const char *, const fsinfo_t *);
+struct fs	*ffs_mkfs(const char *, const fsinfo_t *, time_t);
 void		ffs_write_superblock(struct fs *, const fsinfo_t *);
 void		ffs_rdfs(daddr_t, int, void *, const fsinfo_t *);
 void		ffs_wtfs(daddr_t, int, void *, const fsinfo_t *);

Reply via email to