mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +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;
 | 
							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