Commit 4816c940 authored by Herbert Xu's avatar Herbert Xu
Browse files

lib/mpi: Fix SG miter leak

In mpi_read_raw_from_sgl we may leak the SG miter resouces after
reading the leading zeroes.  This patch fixes this by stopping the
iteration once the leading zeroes have been read.

Fixes: 127827b9

 ("lib/mpi: Do not do sg_virt")
Reported-by: default avatarNicolai Stange <nicstange@gmail.com>
Tested-by: default avatarNicolai Stange <nicstange@gmail.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 64ec6ccb
...@@ -363,6 +363,9 @@ MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int nbytes) ...@@ -363,6 +363,9 @@ MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int nbytes)
lzeros = 0; lzeros = 0;
} }
miter.consumed = lzeros;
sg_miter_stop(&miter);
nbytes -= lzeros; nbytes -= lzeros;
nbits = nbytes * 8; nbits = nbytes * 8;
if (nbits > MAX_EXTERN_MPI_BITS) { if (nbits > MAX_EXTERN_MPI_BITS) {
...@@ -390,7 +393,10 @@ MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int nbytes) ...@@ -390,7 +393,10 @@ MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int nbytes)
z = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB; z = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB;
z %= BYTES_PER_MPI_LIMB; z %= BYTES_PER_MPI_LIMB;
for (;;) { while (sg_miter_next(&miter)) {
buff = miter.addr;
len = miter.length;
for (x = 0; x < len; x++) { for (x = 0; x < len; x++) {
a <<= 8; a <<= 8;
a |= *buff++; a |= *buff++;
...@@ -400,12 +406,6 @@ MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int nbytes) ...@@ -400,12 +406,6 @@ MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int nbytes)
} }
} }
z += x; z += x;
if (!sg_miter_next(&miter))
break;
buff = miter.addr;
len = miter.length;
} }
return val; return val;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment