On Mon, Mar 05, 2018 at 02:30:57PM -0600, Gary R Hook wrote: > > So a failure to communicate a newly-required behavior change, much less > document it, is addressed by breaking drivers? For some reason this seems > wrong. > > It's also wrong to change the documentation after the fact, and after > surprising people. The documentation change should have gone in with the > change to testmgr. And all that -after- doing as suggested below. You should never touch req->result unless you're finalising the hash. This has always been the case, it's just never been tested by the test frame work and therefore some buggy drivers have slipped through. The generic implementation (e.g., crypto/sha1_generic.c) is always the authoritative source when it comes to driver behaviour. Anyway, rather than wasting time debating this, you could've just spent a couple of minutes fixing your driver. ---8<--- Subject: crypto: ccp - Do not touch result buffer except on final The req->final buffer should only be modified when writing the final hash. It is not meant to be used to write incomplete hashes when performing an update operation. Fixes: 466d7b9f6175 ("crypto: testmgr - test misuse of result in...") Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> diff --git a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c index 60fc0fa..acc8c64 100644 --- a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c +++ b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c @@ -45,8 +45,8 @@ static int ccp_aes_cmac_complete(struct crypto_async_request *async_req, rctx->buf_count = 0; } - /* Update result area if supplied */ - if (req->result) + /* Update result area if final */ + if (rctx->final) memcpy(req->result, rctx->iv, digest_size); e_free: diff --git a/drivers/crypto/ccp/ccp-crypto-sha.c b/drivers/crypto/ccp/ccp-crypto-sha.c index 8b9b16d..e290836 100644 --- a/drivers/crypto/ccp/ccp-crypto-sha.c +++ b/drivers/crypto/ccp/ccp-crypto-sha.c @@ -46,8 +46,8 @@ static int ccp_sha_complete(struct crypto_async_request *async_req, int ret) rctx->buf_count = 0; } - /* Update result area if supplied */ - if (req->result) + /* Update result area if final. */ + if (rctx->final) memcpy(req->result, rctx->ctx, digest_size); e_free: -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt