mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	ALSA: usb-audio: Fix UAF decrement if card has no live interfaces in card.c
If a USB sound card reports 0 interfaces, an error condition is triggered
and the function usb_audio_probe errors out. In the error path, there was a
use-after-free vulnerability where the memory object of the card was first
freed, followed by a decrement of the number of active chips. Moving the
decrement above the atomic_dec fixes the UAF.
[ The original problem was introduced in 3.1 kernel, while it was
  developed in a different form.  The Fixes tag below indicates the
  original commit but it doesn't mean that the patch is applicable
  cleanly. -- tiwai ]
Fixes: 362e4e49ab ("ALSA: usb-audio - clear chip->probing on error exit")
Reported-by: Hui Peng <benquike@gmail.com>
Reported-by: Mathias Payer <mathias.payer@nebelwelt.net>
Signed-off-by: Hui Peng <benquike@gmail.com>
Signed-off-by: Mathias Payer <mathias.payer@nebelwelt.net>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
			
			
This commit is contained in:
		
							parent
							
								
									54947cd64c
								
							
						
					
					
						commit
						5f8cf71258
					
				
					 1 changed files with 4 additions and 1 deletions
				
			
		|  | @ -682,9 +682,12 @@ static int usb_audio_probe(struct usb_interface *intf, | |||
| 
 | ||||
|  __error: | ||||
| 	if (chip) { | ||||
| 		/* chip->active is inside the chip->card object,
 | ||||
| 		 * decrement before memory is possibly returned. | ||||
| 		 */ | ||||
| 		atomic_dec(&chip->active); | ||||
| 		if (!chip->num_interfaces) | ||||
| 			snd_card_free(chip->card); | ||||
| 		atomic_dec(&chip->active); | ||||
| 	} | ||||
| 	mutex_unlock(®ister_mutex); | ||||
| 	return err; | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Hui Peng
						Hui Peng