Skip to content

Commit 31dab71

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull ARM AES crypto fixes from Herbert Xu: "This push fixes a regression on ARM where odd-sized blocks supplied to AES may cause crashes" * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: crypto: arm-aes - fix encryption of unaligned data crypto: arm64-aes - fix encryption of unaligned data
2 parents e8a91e0 + f3c400e commit 31dab71

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

arch/arm/crypto/aesbs-glue.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ static int aesbs_cbc_encrypt(struct blkcipher_desc *desc,
137137
dst += AES_BLOCK_SIZE;
138138
} while (--blocks);
139139
}
140-
err = blkcipher_walk_done(desc, &walk, 0);
140+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
141141
}
142142
return err;
143143
}
@@ -158,7 +158,7 @@ static int aesbs_cbc_decrypt(struct blkcipher_desc *desc,
158158
bsaes_cbc_encrypt(walk.src.virt.addr, walk.dst.virt.addr,
159159
walk.nbytes, &ctx->dec, walk.iv);
160160
kernel_neon_end();
161-
err = blkcipher_walk_done(desc, &walk, 0);
161+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
162162
}
163163
while (walk.nbytes) {
164164
u32 blocks = walk.nbytes / AES_BLOCK_SIZE;
@@ -182,7 +182,7 @@ static int aesbs_cbc_decrypt(struct blkcipher_desc *desc,
182182
dst += AES_BLOCK_SIZE;
183183
src += AES_BLOCK_SIZE;
184184
} while (--blocks);
185-
err = blkcipher_walk_done(desc, &walk, 0);
185+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
186186
}
187187
return err;
188188
}
@@ -268,7 +268,7 @@ static int aesbs_xts_encrypt(struct blkcipher_desc *desc,
268268
bsaes_xts_encrypt(walk.src.virt.addr, walk.dst.virt.addr,
269269
walk.nbytes, &ctx->enc, walk.iv);
270270
kernel_neon_end();
271-
err = blkcipher_walk_done(desc, &walk, 0);
271+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
272272
}
273273
return err;
274274
}
@@ -292,7 +292,7 @@ static int aesbs_xts_decrypt(struct blkcipher_desc *desc,
292292
bsaes_xts_decrypt(walk.src.virt.addr, walk.dst.virt.addr,
293293
walk.nbytes, &ctx->dec, walk.iv);
294294
kernel_neon_end();
295-
err = blkcipher_walk_done(desc, &walk, 0);
295+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
296296
}
297297
return err;
298298
}

arch/arm64/crypto/aes-glue.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ static int ecb_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
106106
for (first = 1; (blocks = (walk.nbytes / AES_BLOCK_SIZE)); first = 0) {
107107
aes_ecb_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
108108
(u8 *)ctx->key_enc, rounds, blocks, first);
109-
err = blkcipher_walk_done(desc, &walk, 0);
109+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
110110
}
111111
kernel_neon_end();
112112
return err;
@@ -128,7 +128,7 @@ static int ecb_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
128128
for (first = 1; (blocks = (walk.nbytes / AES_BLOCK_SIZE)); first = 0) {
129129
aes_ecb_decrypt(walk.dst.virt.addr, walk.src.virt.addr,
130130
(u8 *)ctx->key_dec, rounds, blocks, first);
131-
err = blkcipher_walk_done(desc, &walk, 0);
131+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
132132
}
133133
kernel_neon_end();
134134
return err;
@@ -151,7 +151,7 @@ static int cbc_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
151151
aes_cbc_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
152152
(u8 *)ctx->key_enc, rounds, blocks, walk.iv,
153153
first);
154-
err = blkcipher_walk_done(desc, &walk, 0);
154+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
155155
}
156156
kernel_neon_end();
157157
return err;
@@ -174,7 +174,7 @@ static int cbc_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
174174
aes_cbc_decrypt(walk.dst.virt.addr, walk.src.virt.addr,
175175
(u8 *)ctx->key_dec, rounds, blocks, walk.iv,
176176
first);
177-
err = blkcipher_walk_done(desc, &walk, 0);
177+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
178178
}
179179
kernel_neon_end();
180180
return err;
@@ -243,7 +243,7 @@ static int xts_encrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
243243
aes_xts_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
244244
(u8 *)ctx->key1.key_enc, rounds, blocks,
245245
(u8 *)ctx->key2.key_enc, walk.iv, first);
246-
err = blkcipher_walk_done(desc, &walk, 0);
246+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
247247
}
248248
kernel_neon_end();
249249

@@ -267,7 +267,7 @@ static int xts_decrypt(struct blkcipher_desc *desc, struct scatterlist *dst,
267267
aes_xts_decrypt(walk.dst.virt.addr, walk.src.virt.addr,
268268
(u8 *)ctx->key1.key_dec, rounds, blocks,
269269
(u8 *)ctx->key2.key_enc, walk.iv, first);
270-
err = blkcipher_walk_done(desc, &walk, 0);
270+
err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE);
271271
}
272272
kernel_neon_end();
273273

0 commit comments

Comments
 (0)