mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	leds: lp55xx: fix null deref on firmware load failure
I've stumbled upon a kernel crash and the logs
pointed me towards the lp5562 driver:
> <4>[306013.841294] lp5562 0-0030: Direct firmware load for lp5562 failed with error -2
> <4>[306013.894990] lp5562 0-0030: Falling back to user helper
> ...
> <3>[306073.924886] lp5562 0-0030: firmware request failed
> <1>[306073.939456] Unable to handle kernel NULL pointer dereference at virtual address 00000000
> <4>[306074.251011] PC is at _raw_spin_lock+0x1c/0x58
> <4>[306074.255539] LR is at release_firmware+0x6c/0x138
> ...
After taking a look I noticed firmware_release()
could be called with either NULL or a dangling
pointer.
Fixes: 10c06d178d ("leds-lp55xx: support firmware interface")
Signed-off-by: Michal Kazior <michal@plume.com>
Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									0f85e8498a
								
							
						
					
					
						commit
						5ddb0869bf
					
				
					 1 changed files with 2 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -201,7 +201,7 @@ static void lp55xx_firmware_loaded(const struct firmware *fw, void *context)
 | 
			
		|||
 | 
			
		||||
	if (!fw) {
 | 
			
		||||
		dev_err(dev, "firmware request failed\n");
 | 
			
		||||
		goto out;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* handling firmware data is chip dependent */
 | 
			
		||||
| 
						 | 
				
			
			@ -214,9 +214,9 @@ static void lp55xx_firmware_loaded(const struct firmware *fw, void *context)
 | 
			
		|||
 | 
			
		||||
	mutex_unlock(&chip->lock);
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
	/* firmware should be released for other channel use */
 | 
			
		||||
	release_firmware(chip->fw);
 | 
			
		||||
	chip->fw = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int lp55xx_request_firmware(struct lp55xx_chip *chip)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue