diff options
author | Hans-Joerg Hoexer <hshoexer@cvs.openbsd.org> | 2008-06-13 18:27:00 +0000 |
---|---|---|
committer | Hans-Joerg Hoexer <hshoexer@cvs.openbsd.org> | 2008-06-13 18:27:00 +0000 |
commit | 5140c627386e49111aee94762e74525c9ae2d7db (patch) | |
tree | 051e85353363c1447cdb9e4d262c33380fa5a40a /sys/dev | |
parent | fb15b9f2aa6a465e4d05015b715d62aef4f09e4a (diff) |
When assembling an already initialized crytpo softraid, correctly copy in
mask key from userland. Thus, modify sr_crypto_get_kdf() do correclty handle
copying kdf hint and/or mask key.
While there, remove superflous sr_read_meta().
ok marco djm
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/softraid.c | 10 | ||||
-rw-r--r-- | sys/dev/softraid_crypto.c | 27 |
2 files changed, 22 insertions, 15 deletions
diff --git a/sys/dev/softraid.c b/sys/dev/softraid.c index 7f035669c1b..4e7117b4b29 100644 --- a/sys/dev/softraid.c +++ b/sys/dev/softraid.c @@ -1,4 +1,4 @@ -/* $OpenBSD: softraid.c,v 1.112 2008/06/12 23:29:27 hshoexer Exp $ */ +/* $OpenBSD: softraid.c,v 1.113 2008/06/13 18:26:59 hshoexer Exp $ */ /* * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us> * Copyright (c) 2008 Chris Kuethe <ckuethe@openbsd.org> @@ -884,9 +884,6 @@ sr_ioctl_createraid(struct sr_softc *sc, struct bioc_createraid *bc, int user) if (bc->bc_opaque == NULL) goto unwind; - if (sr_read_meta(sd) == 0) - goto unwind; - if (sizeof(sd->mds.mdd_crypto.scr_meta.scm_kdfhint) < bc->bc_opaque_size) goto unwind; @@ -899,6 +896,11 @@ sr_ioctl_createraid(struct sr_softc *sc, struct bioc_createraid *bc, int user) rv = 0; goto unwind; } + /* get kdf with maskkey from userland */ + if (bc->bc_opaque_flags & BIOC_SOIN) { + if (sr_crypto_get_kdf(bc, sd)) + goto unwind; + } #endif /* CRYPTO */ DNPRINTF(SR_D_META, "%s: disk assembled from metadata\n", DEVNAME(sc)); diff --git a/sys/dev/softraid_crypto.c b/sys/dev/softraid_crypto.c index 70170622f0f..239cdeb9f38 100644 --- a/sys/dev/softraid_crypto.c +++ b/sys/dev/softraid_crypto.c @@ -1,4 +1,4 @@ -/* $OpenBSD: softraid_crypto.c,v 1.21 2008/06/12 18:23:29 hshoexer Exp $ */ +/* $OpenBSD: softraid_crypto.c,v 1.22 2008/06/13 18:26:59 hshoexer Exp $ */ /* * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us> * Copyright (c) 2008 Hans-Joerg Hoexer <hshoexer@openbsd.org> @@ -181,20 +181,25 @@ sr_crypto_get_kdf(struct bioc_createraid *bc, struct sr_discipline *sd) if (kdfinfo->len != bc->bc_opaque_size) goto out; - if (!(kdfinfo->flags & SR_CRYPTOKDF_KEY) || - !(kdfinfo->flags & SR_CRYPTOKDF_HINT)) - goto out; /* copy KDF hint to disk meta data */ - if (sizeof(sd->mds.mdd_crypto.scr_meta.scm_kdfhint) < - kdfinfo->kdfhint.len) - goto out; - bcopy(&kdfinfo->kdfhint, sd->mds.mdd_crypto.scr_meta.scm_kdfhint, - kdfinfo->kdfhint.len); + if (kdfinfo->flags & SR_CRYPTOKDF_HINT) { + if (sizeof(sd->mds.mdd_crypto.scr_meta.scm_kdfhint) < + kdfinfo->kdfhint.len) + goto out; + bcopy(&kdfinfo->kdfhint, + sd->mds.mdd_crypto.scr_meta.scm_kdfhint, + kdfinfo->kdfhint.len); + } /* copy mask key to run-time meta data */ - bcopy(&kdfinfo->maskkey, sd->mds.mdd_crypto.scr_maskkey, - sizeof(kdfinfo->maskkey)); + if ((kdfinfo->flags & SR_CRYPTOKDF_KEY)) { + if (sizeof(sd->mds.mdd_crypto.scr_maskkey) < + sizeof(kdfinfo->maskkey)) + goto out; + bcopy(&kdfinfo->maskkey, sd->mds.mdd_crypto.scr_maskkey, + sizeof(kdfinfo->maskkey)); + } rv = 0; out: |