forked from luck/tmp_suning_uos_patched
crypto: padlock - Fix AES-CBC handling on odd-block-sized input
On certain VIA chipsets AES-CBC requires the input/output to be a multiple of 64 bytes. We had a workaround for this but it was buggy as it sent the whole input for processing when it is meant to only send the initial number of blocks which makes the rest a multiple of 64 bytes. As expected this causes memory corruption whenever the workaround kicks in. Reported-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
14bd342e25
commit
c054a076a1
@ -286,7 +286,7 @@ static inline u8 *padlock_xcrypt_cbc(const u8 *input, u8 *output, void *key,
|
|||||||
if (initial)
|
if (initial)
|
||||||
asm volatile (".byte 0xf3,0x0f,0xa7,0xd0" /* rep xcryptcbc */
|
asm volatile (".byte 0xf3,0x0f,0xa7,0xd0" /* rep xcryptcbc */
|
||||||
: "+S" (input), "+D" (output), "+a" (iv)
|
: "+S" (input), "+D" (output), "+a" (iv)
|
||||||
: "d" (control_word), "b" (key), "c" (count));
|
: "d" (control_word), "b" (key), "c" (initial));
|
||||||
|
|
||||||
asm volatile (".byte 0xf3,0x0f,0xa7,0xd0" /* rep xcryptcbc */
|
asm volatile (".byte 0xf3,0x0f,0xa7,0xd0" /* rep xcryptcbc */
|
||||||
: "+S" (input), "+D" (output), "+a" (iv)
|
: "+S" (input), "+D" (output), "+a" (iv)
|
||||||
|
Loading…
Reference in New Issue
Block a user