ALSA: info: Fix leaks of child entries at snd_info_free_entry()
[firefly-linux-kernel-4.4.55.git] / sound / core / info.c
index c8a413d6cc9b537cb62b281d01ccf775b974170d..5662793746838715a4c5255569b01253a8adc6eb 100644 (file)
@@ -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);