From: Steffen Klassert <steffen.klassert@secunet.com>
To: Mandeep Singh Baines <msb@chromium.org>
Cc: Alasdair G Kergon <agk@redhat.com>,
dm-devel@redhat.com, Will Drewry <wad@chromium.org>,
Elly Jones <ellyjones@chromium.org>,
Milan Broz <mbroz@redhat.com>,
Olof Johansson <olofj@chromium.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] dm: verity target
Date: Mon, 14 Nov 2011 10:22:52 +0100 [thread overview]
Message-ID: <20111114092252.GA11359@secunet.com> (raw)
In-Reply-To: <1321032884-14621-1-git-send-email-msb@chromium.org>
On Fri, Nov 11, 2011 at 09:34:44AM -0800, Mandeep Singh Baines wrote:
>
> +/**
> + * dm_bht_compute_hash: hashes a page of data
> + */
> +static int dm_bht_compute_hash(struct dm_bht *bht, struct page *pg,
> + unsigned int offset, u8 *digest)
> +{
> + struct shash_desc *hash_desc = bht->hash_desc[smp_processor_id()];
> + void *data;
> + int err;
You don't need to have one shash_desc per cpu. As the shash interface is
synchronous, you could either allocate a new shash_desc with every call
to dm_bht_compute_hash, or just place the shash_desc with the context to
the stack of this function. The easiest thing would be to add the
shash transformation direct to dm_bht and then something like
struct {
struct shash_desc desc;
char ctx[crypto_shash_descsize(bht->tfm)];
} hash_desc;
hash_desc.desc.tfm = bmt->tfm;
The intermediate and final digest values are stored to hash_desc.ctx.
This is local, hence it's reentrant.
> +
> + /* Note, this is synchronous. */
> + if (crypto_shash_init(hash_desc)) {
> + DMCRIT("failed to reinitialize crypto hash (proc:%d)",
> + smp_processor_id());
> + return -EINVAL;
> + }
> + data = kmap_atomic(pg);
> + err = crypto_shash_update(hash_desc, data + offset, PAGE_SIZE);
> + kunmap_atomic(data);
> + if (err) {
> + DMCRIT("crypto_hash_update failed");
> + return -EINVAL;
> + }
> + if (crypto_shash_update(hash_desc, bht->salt, sizeof(bht->salt))) {
> + DMCRIT("crypto_hash_update failed");
> + return -EINVAL;
> + }
> + if (crypto_shash_final(hash_desc, digest)) {
> + DMCRIT("crypto_hash_final failed");
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
[snip]
> + * TODO(wad): All hash storage memory is pre-allocated and freed once an
> + * entire branch has been verified.
> + */
> +struct dm_bht {
> + /* Configured values */
> + int depth; /* Depth of the tree including the root */
> + unsigned int block_count; /* Number of blocks hashed */
> + unsigned int block_size; /* Size of a hash block */
> + char hash_alg[CRYPTO_MAX_ALG_NAME];
> + unsigned char salt[DM_BHT_SALT_SIZE];
> +
> + /* Computed values */
> + unsigned int node_count; /* Data size (in hashes) for each entry */
> + unsigned int node_count_shift; /* first bit set - 1 */
> + /* There is one per CPU so that verified can be simultaneous. */
> + struct shash_desc *hash_desc[NR_CPUS]; /* Container for the hash alg */
As mentioned above, you don't need to have one shash_desc per cpu.
Replace this with a 'struct crypto_shash *tfm;' and add this transformation
to the local hash_desc.
next prev parent reply other threads:[~2011-11-14 9:22 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-10 5:18 [PATCH] dm: verity target Mandeep Singh Baines
2011-11-10 5:18 ` Mandeep Singh Baines
2011-11-10 7:44 ` Steffen Klassert
2011-11-10 14:42 ` Will Drewry
2011-11-11 17:34 ` [PATCH v2] " Mandeep Singh Baines
2011-11-11 17:34 ` Mandeep Singh Baines
2011-11-14 9:22 ` Steffen Klassert [this message]
2011-11-14 17:54 ` Mandeep Singh Baines
2011-11-15 9:19 ` Steffen Klassert
2011-11-22 22:15 ` Mandeep Singh Baines
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20111114092252.GA11359@secunet.com \
--to=steffen.klassert@secunet.com \
--cc=agk@redhat.com \
--cc=dm-devel@redhat.com \
--cc=ellyjones@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mbroz@redhat.com \
--cc=msb@chromium.org \
--cc=olofj@chromium.org \
--cc=wad@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.