These patches fix bug in xts_crypt()/lrw_crypt() where nblocks is
not updated in the block walk loop.
This causes nblocks to be left at 0, after blkcipher_walk_done() call.
This leads 'do { ... } while (nblocks > 0)' loop to be run one extra
time with nblocks == 0 and at end of do-while loop nblocks gets updated
correctly.
---
Jussi Kivilinna (2):
crypto: xts: fix nblocks not being updated in walk loop
crypto: lrw: fix nblocks not being updated in walk loop
crypto/lrw.c | 1 +
crypto/xts.c | 1 +
2 files changed, 2 insertions(+), 0 deletions(-)
In xts_crypt() function, nblocks should be updated after blkcipher_walk_done
call.
Signed-off-by: Jussi Kivilinna <[email protected]>
---
crypto/xts.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/crypto/xts.c b/crypto/xts.c
index 5681d66..ca1608f 100644
--- a/crypto/xts.c
+++ b/crypto/xts.c
@@ -229,6 +229,7 @@ first:
if (!nbytes)
break;
+ nblocks = min(nbytes / bsize, max_blks);
src = (be128 *)walk.src.virt.addr;
dst = (be128 *)walk.dst.virt.addr;
}
In lrw_crypt() function, nblocks should be updated after blkcipher_walk_done
call.
Signed-off-by: Jussi Kivilinna <[email protected]>
---
crypto/lrw.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/crypto/lrw.c b/crypto/lrw.c
index 66c4d22..ba42acc 100644
--- a/crypto/lrw.c
+++ b/crypto/lrw.c
@@ -284,6 +284,7 @@ first:
if (!nbytes)
break;
+ nblocks = min(nbytes / bsize, max_blks);
src = (be128 *)walk.src.virt.addr;
dst = (be128 *)walk.dst.virt.addr;
}