svn commit: r211927 - head/sys/geom/eli
Pawel Jakub Dawidek
pjd at FreeBSD.org
Sat Aug 28 08:30:21 UTC 2010
Author: pjd
Date: Sat Aug 28 08:30:20 2010
New Revision: 211927
URL: http://svn.freebsd.org/changeset/base/211927
Log:
Correct offset conversion to little endian. It was implemented in version 2,
but because of a bug it was a no-op, so we were still using offsets in native
byte order for the host. Do it properly this time, bump version to 4 and set
the G_ELI_FLAG_NATIVE_BYTE_ORDER flag when version is under 4.
MFC after: 2 weeks
Modified:
head/sys/geom/eli/g_eli.c
head/sys/geom/eli/g_eli.h
Modified: head/sys/geom/eli/g_eli.c
==============================================================================
--- head/sys/geom/eli/g_eli.c Sat Aug 28 08:18:20 2010 (r211926)
+++ head/sys/geom/eli/g_eli.c Sat Aug 28 08:30:20 2010 (r211927)
@@ -384,11 +384,13 @@ g_eli_crypto_ivgen(struct g_eli_softc *s
u_char off[8], hash[SHA256_DIGEST_LENGTH];
SHA256_CTX ctx;
- if (!(sc->sc_flags & G_ELI_FLAG_NATIVE_BYTE_ORDER))
+ if ((sc->sc_flags & G_ELI_FLAG_NATIVE_BYTE_ORDER) != 0)
+ bcopy(&offset, off, sizeof(off));
+ else
le64enc(off, (uint64_t)offset);
/* Copy precalculated SHA256 context for IV-Key. */
bcopy(&sc->sc_ivctx, &ctx, sizeof(ctx));
- SHA256_Update(&ctx, (uint8_t *)&offset, sizeof(offset));
+ SHA256_Update(&ctx, off, sizeof(off));
SHA256_Final(hash, &ctx);
bcopy(hash, iv, size);
}
@@ -544,7 +546,7 @@ g_eli_create(struct gctl_req *req, struc
sc->sc_crypto = G_ELI_CRYPTO_SW;
sc->sc_flags = md->md_flags;
/* Backward compatibility. */
- if (md->md_version < 2)
+ if (md->md_version < 4)
sc->sc_flags |= G_ELI_FLAG_NATIVE_BYTE_ORDER;
sc->sc_ealgo = md->md_ealgo;
sc->sc_nkey = nkey;
Modified: head/sys/geom/eli/g_eli.h
==============================================================================
--- head/sys/geom/eli/g_eli.h Sat Aug 28 08:18:20 2010 (r211926)
+++ head/sys/geom/eli/g_eli.h Sat Aug 28 08:30:20 2010 (r211927)
@@ -57,11 +57,11 @@
* 1 - Added data authentication support (md_aalgo field and
* G_ELI_FLAG_AUTH flag).
* 2 - Added G_ELI_FLAG_READONLY.
- * - IV is generated from offset converted to little-endian
- * (flag G_ELI_FLAG_NATIVE_BYTE_ORDER will be set for older versions).
* 3 - Added 'configure' subcommand.
+ * 4 - IV is generated from offset converted to little-endian
+ * (flag G_ELI_FLAG_NATIVE_BYTE_ORDER will be set for older versions).
*/
-#define G_ELI_VERSION 3
+#define G_ELI_VERSION 4
/* ON DISK FLAGS. */
/* Use random, onetime keys. */
@@ -394,7 +394,7 @@ g_eli_keylen(u_int algo, u_int keylen)
keylen = 0;
}
return (keylen);
- case CRYPTO_AES_CBC: /* FALLTHROUGH */
+ case CRYPTO_AES_CBC:
case CRYPTO_CAMELLIA_CBC:
switch (keylen) {
case 0:
More information about the svn-src-head
mailing list