--- sys/conf/options.orig	2010-12-21 18:09:25.000000000 +0100
+++ sys/conf/options	2011-09-08 18:29:08.000000000 +0200
@@ -76,6 +76,8 @@
 DIRECTIO
 FULL_PREEMPTION	opt_sched.h
 IPI_PREEMPTION	opt_sched.h
+GELI_PROVIDER	opt_geom.h
+GELI_KEY_SIZE	opt_geom.h
 GEOM_AES	opt_geom.h
 GEOM_BDE	opt_geom.h
 GEOM_BSD	opt_geom.h
--- sys/fs/msdosfs/msdosfs_vnops.c.orig	2010-12-21 18:09:25.000000000 +0100
+++ sys/fs/msdosfs/msdosfs_vnops.c	2011-09-08 18:29:08.000000000 +0200
@@ -483,7 +483,8 @@
 		if (error)
 			return error;
 	}
-	if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) {
+	if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL 
+	    || vap->va_birthtime.tv_sec != VNOVAL) {
 		if (vp->v_mount->mnt_flag & MNT_RDONLY)
 			return (EROFS);
 		if (vap->va_vaflags & VA_UTIMES_NULL) {
@@ -504,6 +505,11 @@
 				timespec2fattime(&vap->va_mtime, 0,
 				    &dep->de_MDate, &dep->de_MTime, NULL);
 			}
+			if (vap->va_birthtime.tv_sec !=  VNOVAL) {
+				dep->de_flag &= ~DE_CREATE;
+				timespec2fattime(&vap->va_birthtime, 0,
+				    &dep->de_CDate, &dep->de_CTime, NULL);
+			}
 			dep->de_Attributes |= ATTR_ARCHIVE;
 			dep->de_flag |= DE_MODIFIED;
 		}
--- sys/geom/eli/g_eli.c.orig	2010-12-21 18:09:25.000000000 +0100
+++ sys/geom/eli/g_eli.c	2011-09-14 10:11:33.000000000 +0200
@@ -26,7 +26,7 @@
 
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD: src/sys/geom/eli/g_eli.c,v 1.44.2.3.2.1 2010/12/21 17:09:25 kensmith Exp $");
-
+#include "opt_geom.h"
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -977,6 +977,9 @@
 	sc = gp->softc;
 	return (g_eli_destroy(sc, FALSE));
 }
+#ifdef GELI_KEY_SIZE
+char _geli_key[GELI_KEY_SIZE] = "GELI_KEY_HERE";
+#endif
 
 static int
 g_eli_keyfiles_load(struct hmac_ctx *ctx, const char *provider)
@@ -985,11 +988,22 @@
 	char *file, name[64];
 	int i;
 
-	for (i = 0; ; i++) {
+	int did_it = 0;
+#if defined(GELI_KEY_SIZE) && defined(GELI_PROVIDER)
+	if (!strcmp(provider, GELI_PROVIDER)) {
+		did_it++;
+		printf("GELI:increased did_it ...");	
+		g_eli_crypto_hmac_update(ctx, _geli_key, GELI_KEY_SIZE);
+	}
+	snprintf(name, sizeof(name), "%s:geli_keyfile0", GELI_PROVIDER);
+#endif
+for (i = 0; ; i++) {
 		snprintf(name, sizeof(name), "%s:geli_keyfile%d", provider, i);
 		keyfile = preload_search_by_type(name);
 		if (keyfile == NULL)
-			return (i);	/* Return number of loaded keyfiles. */
+			return (i + did_it);	/* Return number of loaded keyfiles. */
 		data = preload_search_info(keyfile, MODINFO_ADDR);
 		if (data == NULL) {
 			G_ELI_DEBUG(0, "Cannot find key file data for %s.",
  • michaelschoene/hardcode_geli_key.patch.txt
  • Last modified: 2011/09/14 08:24
  • by MichaelSchöne