aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto
diff options
context:
space:
mode:
authorHoria Geant? <horia.geanta@freescale.com>2015-05-12 04:28:05 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2015-05-12 22:31:57 -0400
commitbde9079f3cd5e4275be2169cf7b0c74bfb464f78 (patch)
tree2c38b268854c68c6f524350f788b3847f0d804b7 /drivers/crypto
parent69d9cd8c592f1abce820dbce7181bbbf6812cfbd (diff)
crypto: talitos - avoid out of bound scatterlist iterator
Check return value of scatterlist_sg_next(), i.e. don't rely solely on number of bytes to be processed or number of scatterlist entries. Signed-off-by: Horia Geanta <horia.geanta@freescale.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto')
-rw-r--r--drivers/crypto/talitos.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index 5f7c74d0afc3..ba5f68b987ab 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -1065,7 +1065,7 @@ static int sg_to_link_tbl(struct scatterlist *sg, int sg_count,
1065{ 1065{
1066 int n_sg = sg_count; 1066 int n_sg = sg_count;
1067 1067
1068 while (n_sg--) { 1068 while (sg && n_sg--) {
1069 to_talitos_ptr(link_tbl_ptr, sg_dma_address(sg), 0); 1069 to_talitos_ptr(link_tbl_ptr, sg_dma_address(sg), 0);
1070 link_tbl_ptr->len = cpu_to_be16(sg_dma_len(sg)); 1070 link_tbl_ptr->len = cpu_to_be16(sg_dma_len(sg));
1071 link_tbl_ptr->j_extent = 0; 1071 link_tbl_ptr->j_extent = 0;
@@ -1254,7 +1254,7 @@ static int sg_count(struct scatterlist *sg_list, int nbytes, bool *chained)
1254 int sg_nents = 0; 1254 int sg_nents = 0;
1255 1255
1256 *chained = false; 1256 *chained = false;
1257 while (nbytes > 0) { 1257 while (nbytes > 0 && sg) {
1258 sg_nents++; 1258 sg_nents++;
1259 nbytes -= sg->length; 1259 nbytes -= sg->length;
1260 if (!sg_is_last(sg) && (sg + 1)->length == 0) 1260 if (!sg_is_last(sg) && (sg + 1)->length == 0)