ALSA: info: Fix leaks of child entries at snd_info_free_entry()
snd_info_free_entry() releases the all children nodes as well, but due
to the wrong timing of releasing the link, the children nodes may be
disconnected but left unreleased.  This patch fixes it by moving the
link free at the right position.  Also it eases list_for_each_entry()
without _safe option in snd_info_disconnect() because it no longer
frees the children nodes there.
Fixes: c560a6797e ('ALSA: core: Remove child proc file elements recursively')
Signed-off-by: Takashi Iwai <tiwai@suse.de>
	
	
This commit is contained in:
		
					parent
					
						
							
								1a5bc8d950
							
						
					
				
			
			
				commit
				
					
						90a409aad4
					
				
			
		
					 1 changed files with 3 additions and 3 deletions
				
			
		|  | @ -738,13 +738,12 @@ EXPORT_SYMBOL(snd_info_create_card_entry); | |||
| 
 | ||||
| static void snd_info_disconnect(struct snd_info_entry *entry) | ||||
| { | ||||
| 	struct snd_info_entry *p, *n; | ||||
| 	struct snd_info_entry *p; | ||||
| 
 | ||||
| 	if (!entry->p) | ||||
| 		return; | ||||
| 	list_for_each_entry_safe(p, n, &entry->children, list) | ||||
| 	list_for_each_entry(p, &entry->children, list) | ||||
| 		snd_info_disconnect(p); | ||||
| 	list_del_init(&entry->list); | ||||
| 	proc_remove(entry->p); | ||||
| 	entry->p = NULL; | ||||
| } | ||||
|  | @ -771,6 +770,7 @@ void snd_info_free_entry(struct snd_info_entry * entry) | |||
| 	list_for_each_entry_safe(p, n, &entry->children, list) | ||||
| 		snd_info_free_entry(p); | ||||
| 
 | ||||
| 	list_del(&entry->list); | ||||
| 	kfree(entry->name); | ||||
| 	if (entry->private_free) | ||||
| 		entry->private_free(entry); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Takashi Iwai
				Takashi Iwai