--- 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.",