From: Phil Sutter <phil@nwl.cc>
To: Frank <frank@debian-nas.org>
Cc: 'Sebastian Andrzej Siewior' <sebastian@breakpoint.cc>,
uri@jdland.co.il, linux-crypto@vger.kernel.org,
Herbert Xu <herbert@gondor.apana.org.au>,
Catalin Marinas <catalin.marinas@arm.com>,
linux-arm-kernel@lists.arm.linux.org.uk,
Simon Baatz <simon2012@baatz.info>
Subject: Re: mv_cesa hash functions
Date: Thu, 23 Feb 2012 19:34:39 +0100 [thread overview]
Message-ID: <20120223183439.GA18545@orbit.nwl.cc> (raw)
In-Reply-To: <005b01ccf162$64bd0520$2e370f60$@org>
Hello,
On Wed, Feb 22, 2012 at 02:03:38PM +0100, Frank wrote:
> After doing some trials with hardware crypto offloading through usermode interfaces (af_alg and cryptodev) to Marvell CESA accelerated ciphers and hash functions with the 3.2.4 kernel's mv_cesa in Debian Wheezy on a Marvell Kirkwood system, I've noticed the following kernel output when I load the mv_cesa kernel module:
>
> [490889.448060] alg: hash: Test 1 failed for mv-sha1
> [490889.452786] 00000000: c1 94 3f 2e a2 41 ce 88 d5 47 07 43 c4 a8 17 5d
> [490889.459368] 00000010: 77 e8 47 ca
> [490889.464321] alg: hash: Test 1 failed for mv-hmac-sha1
> [490889.469493] 00000000: 06 71 4d 7c cc cc b5 cf 1b d6 c7 ab d0 25 c4 21
> [490889.476068] 00000010: 66 0b 8e 70
I've tracked down the problem to commit 6ef8450, "crypto: mv_cesa - make
count_sgs() null-pointer proof". So apparently it was me who broke it.
The simpification introduced by that commit assumes a zero 'nbytes'
field in the ahash_request struct passed to mv_hash_final, but
crypto/testmgr.c calls crypto_ahash_update() and crypto_ahash_final()
without altering the ahash_request in between.
Herbert, please clarify: is it intended behaviour that ahash_alg's final
callback ignores possibly present data in the request? If I wanted to
finalise a hash operation with some final data, would I then use the
finup callback instead? (Note the implied question of the actual
difference between the two callbacks.)
If my assumptions are correct, fixing this issue would be as easy as
adding a call to ahash_request_set_crypt() to mv_hash_final(). Or
manually zeroing req->nbytes, but that's probably unclean. Anyway, if
the 'final' callback is always to ignore request data, why doesn't the
API do this already? At least mv_cesa could use a single function for
both callbacks then.
> Using SHA1 in a ssl/tls handshake fails in tests with mv_cesa loaded, which might be related to this.
You are using cryptodev-linux for that, right? If so, this should be
unrelated since cryptodev-linux always calls crypto_ahash_final() with
an empty request payload (from cryptodev_cipher.c):
| ahash_request_set_crypt(hdata->async.request, NULL, output, 0);
|
| ret = crypto_ahash_final(hdata->async.request);
But you might suffer from another problem, which is only present on ARM
machines with VIVT cache and linux >= 2.6.37: due to commit f8b63c1,
"ARM: 6382/1: Remove superfluous flush_kernel_dcache_page()" which
prevents pages being flushed from inside the scatterlist iterator API.
This patch seems to introduce problems in other places (namely NFS), too
but I sadly did not have time to investigate this further. I will post a
possible (cryptodev-internal) solution to cryptodev-linux-devel@gna.org,
maybe this fixes the problem with openssl.
Greetings, Phil
next prev parent reply other threads:[~2012-02-23 18:45 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-22 13:03 mv_cesa hash functions Frank
2012-02-22 20:10 ` Nikos Mavrogiannopoulos
2012-02-23 14:17 ` Sebastian Andrzej Siewior
2012-02-23 18:34 ` Phil Sutter [this message]
2012-02-25 7:38 ` Herbert Xu
2012-02-27 11:17 ` [PATCH] crypto: mv_cesa - fix final callback not ignoring input data Phil Sutter
2012-02-28 8:30 ` Herbert Xu
2012-05-05 22:49 ` mv_cesa dcache problem since 2.6.37 was: Re: mv_cesa hash functions Simon Baatz
2012-05-06 12:25 ` Russell King - ARM Linux
2012-05-07 16:50 ` Phil Sutter
2012-05-08 20:50 ` Simon Baatz
2012-05-07 13:01 ` Frank
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=20120223183439.GA18545@orbit.nwl.cc \
--to=phil@nwl.cc \
--cc=catalin.marinas@arm.com \
--cc=frank@debian-nas.org \
--cc=herbert@gondor.apana.org.au \
--cc=linux-arm-kernel@lists.arm.linux.org.uk \
--cc=linux-crypto@vger.kernel.org \
--cc=sebastian@breakpoint.cc \
--cc=simon2012@baatz.info \
--cc=uri@jdland.co.il \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).