Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -363,6 +363,9 @@ MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int nbytes)
		lzeros = 0;
	}

	miter.consumed = lzeros;
	sg_miter_stop(&miter);

	nbytes -= lzeros;
	nbits = nbytes * 8;
	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;

	for (;;) {
	while (sg_miter_next(&miter)) {
		buff = miter.addr;
		len = miter.length;

		for (x = 0; x < len; x++) {
			a <<= 8;
			a |= *buff++;
@@ -400,12 +406,6 @@ MPI mpi_read_raw_from_sgl(struct scatterlist *sgl, unsigned int nbytes)
			}
		}
		z += x;

		if (!sg_miter_next(&miter))
			break;

		buff = miter.addr;
		len = miter.length;
	}

	return val;