mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +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:
		
							parent
							
								
									64ec6ccb76
								
							
						
					
					
						commit
						4816c94064
					
				
					 1 changed files with 7 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue