Re: [PATCH] crypto: caam/qi2 - fix chacha20 data size error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2/28/2020 2:42 AM, Herbert Xu wrote:
> On Fri, Feb 21, 2020 at 09:52:01AM +0200, Horia Geantă wrote:
>> HW generates a Data Size error for chacha20 requests that are not
>> a multiple of 64B, since algorithm state (AS) does not have
>> the FINAL bit set.
>>
>> Since updating req->iv (for chaining) is not required,
>> modify skcipher descriptors to set the FINAL bit for chacha20.
>>
>> [Note that for skcipher decryption we know that ctx1_iv_off is 0,
>> which allows for an optimization by not checking algorithm type,
>> since append_dec_op1() sets FINAL bit for all algorithms except AES.]
>>
>> Also drop the descriptor operations that save the IV.
>> However, in order to keep code logic simple, things like
>> S/G tables generation etc. are not touched.
>>
>> Cc: <stable@xxxxxxxxxxxxxxx> # v5.3+
>> Fixes: 334d37c9e263 ("crypto: caam - update IV using HW support")
>> Signed-off-by: Horia Geantă <horia.geanta@xxxxxxx>
>> ---
>>  drivers/crypto/caam/caamalg_desc.c | 14 ++++++++++----
>>  1 file changed, 10 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/crypto/caam/caamalg_desc.c b/drivers/crypto/caam/caamalg_desc.c
>> index aa9ccca67045..372d3d4ed6c5 100644
>> --- a/drivers/crypto/caam/caamalg_desc.c
>> +++ b/drivers/crypto/caam/caamalg_desc.c
>> @@ -1379,6 +1379,8 @@ void cnstr_shdsc_skcipher_encap(u32 * const desc, struct alginfo *cdata,
>>  				const u32 ctx1_iv_off)
>>  {
>>  	u32 *key_jump_cmd;
>> +	bool is_chacha20 = ((cdata->algtype & OP_ALG_ALGSEL_MASK) ==
>> +			    OP_ALG_ALGSEL_CHACHA20);
>>  
>>  	init_sh_desc(desc, HDR_SHARE_SERIAL | HDR_SAVECTX);
>>  	/* Skip if already shared */
>> @@ -1417,14 +1419,15 @@ void cnstr_shdsc_skcipher_encap(u32 * const desc, struct alginfo *cdata,
>>  				      LDST_OFFSET_SHIFT));
>>  
>>  	/* Load operation */
>> -	append_operation(desc, cdata->algtype | OP_ALG_AS_INIT |
>> -			 OP_ALG_ENCRYPT);
>> +	if (is_chacha20)
>> +		options |= OP_ALG_AS_FINALIZE;
>> +	append_operation(desc, options);
> 
> This patch doesn't compile.
> 
Thanks for catching this.
Not sure how this slipped through, probably it happened due to
piling up too many *.patch files...
Will fix in v2.

Horia




[Index of Archives]     [Kernel]     [Gnu Classpath]     [Gnu Crypto]     [DM Crypt]     [Netfilter]     [Bugtraq]

  Powered by Linux