mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
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: 127827b9c2
("lib/mpi: Do not do sg_virt")
Reported-by: Nicolai Stange <nicstange@gmail.com>
Tested-by: Nicolai Stange <nicstange@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
z += x;
|
z += x;
|
||||||
|
|
||||||
if (!sg_miter_next(&miter))
|
|
||||||
break;
|
|
||||||
|
|
||||||
buff = miter.addr;
|
|
||||||
len = miter.length;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
|
Reference in New Issue
Block a user