*** /usr/src/sys/geom/eli/g_eli.c.orig Tue Dec 21 18:09:25 2010
--- /usr/src/sys/geom/eli/g_eli.c Tue Sep 13 09:46:22 2011
***************
*** 24,34 ****
* SUCH DAMAGE.
*/
#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 <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/linker.h>
#include <sys/module.h>
--- 24,34 ----
* SUCH DAMAGE.
*/
#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>
#include <sys/linker.h>
#include <sys/module.h>
***************
*** 975,997 ****
struct g_eli_softc *sc;
sc = gp->softc;
return (g_eli_destroy(sc, FALSE));
}
static int
g_eli_keyfiles_load(struct hmac_ctx *ctx, const char *provider)
{
u_char *keyfile, *data, *size;
char *file, name[64];
int i;
! 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. */
data = preload_search_info(keyfile, MODINFO_ADDR);
if (data == NULL) {
G_ELI_DEBUG(0, "Cannot find key file data for %s.",
name);
return (0);
--- 975,1011 ----
struct g_eli_softc *sc;
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)
{
u_char *keyfile, *data, *size;
char *file, name[64];
int i;
! int did_it = 0;
! #if defined(GELI_KEY_SIZE) && defined(GELI_PROVIDER)
! if (!strcmp(provider, GELI_PROVIDER)) {
! did_it++;
! g_eli_crypto_hmac_update(ctx, _geli_key, GELI_KEY_SIZE);
! }
! snprintf(name, sizeof(name), "%s:geli_keyfile0", GELI_PROVIDER);
! #else
! #error "GELI STUFF NOT DEFINED"
! #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 + 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.",
name);
return (0);