mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	regmap: spi: Fix potential off-by-one when calculating reserved size
If we ever meet a hardware that uses weird register bits and padding, we may end up in off-by-one error since x/8 + y/8 might not be equal to (x + y)/8 in some cases. bits pad x/8+y/8 (x+y)/8 4..7 0..3 0 0 // x + y from 4 up to 7 4..7 4..7 0 1 // x + y from 8 up to 11 4..7 8..11 1 1 // x + y from 12 up to 15 8..15 0..7 1 1 // x + y from 8 up to 15 8..15 8..15 2 2 // x + y from 16 up to 23 Fix this by using (x+y)/8. Signed-off-by: Andy Shevchenko <andy.shevchenko@gmail.com> Link: https://msgid.link/r/20240605205315.19132-1-andy.shevchenko@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
		
							parent
							
								
									3b0d6a3211
								
							
						
					
					
						commit
						d4ea1d504d
					
				
					 1 changed files with 1 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -122,8 +122,7 @@ static const struct regmap_bus *regmap_get_spi_bus(struct spi_device *spi,
 | 
			
		|||
			return ERR_PTR(-ENOMEM);
 | 
			
		||||
 | 
			
		||||
		max_msg_size = spi_max_message_size(spi);
 | 
			
		||||
		reg_reserve_size = config->reg_bits / BITS_PER_BYTE
 | 
			
		||||
				 + config->pad_bits / BITS_PER_BYTE;
 | 
			
		||||
		reg_reserve_size = (config->reg_bits + config->pad_bits) / BITS_PER_BYTE;
 | 
			
		||||
		if (max_size + reg_reserve_size > max_msg_size)
 | 
			
		||||
			max_size -= reg_reserve_size;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue