forked from mirrors/linux
		
	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; | 		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; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Herbert Xu
						Herbert Xu