crypto: keembay - use 64-bit arithmetic for computing bit_len
src_size and aad_size are defined as u32, so the following expressions are currently being evaluated using 32-bit arithmetic: bit_len = src_size * 8; ... bit_len = aad_size * 8; However, bit_len is used afterwards in a context that expects a valid 64-bit value (the lower and upper 32-bit words of bit_len are extracted and written to hw). In order to make sure the correct bit length is generated and the 32-bit multiplication does not wrap around, cast src_size and aad_size to u64. Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com> Acked-by: Daniele Alessandrelli <daniele.alessandrelli@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
ac88c322d0
commit
29dfe4d94f
@ -958,14 +958,14 @@ int ocs_aes_gcm_op(struct ocs_aes_dev *aes_dev,
|
||||
ocs_aes_write_last_data_blk_len(aes_dev, src_size);
|
||||
|
||||
/* Write ciphertext bit length */
|
||||
bit_len = src_size * 8;
|
||||
bit_len = (u64)src_size * 8;
|
||||
val = bit_len & 0xFFFFFFFF;
|
||||
iowrite32(val, aes_dev->base_reg + AES_MULTIPURPOSE2_0_OFFSET);
|
||||
val = bit_len >> 32;
|
||||
iowrite32(val, aes_dev->base_reg + AES_MULTIPURPOSE2_1_OFFSET);
|
||||
|
||||
/* Write aad bit length */
|
||||
bit_len = aad_size * 8;
|
||||
bit_len = (u64)aad_size * 8;
|
||||
val = bit_len & 0xFFFFFFFF;
|
||||
iowrite32(val, aes_dev->base_reg + AES_MULTIPURPOSE2_2_OFFSET);
|
||||
val = bit_len >> 32;
|
||||
|
Loading…
Reference in New Issue
Block a user