]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ALSA: proc: Avoid possible leaks of snd_info_entry objects
authorTakashi Iwai <tiwai@suse.de>
Wed, 23 Jan 2019 16:59:40 +0000 (17:59 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 24 Jan 2019 13:40:26 +0000 (14:40 +0100)
This patch changes the parent pointer assignment of snd_info_entry
object to be always non-NULL.  More specifically,check the parent
argument in snd_info_create_module_entry() & co, and assign
snd_proc_root if NULL is passed there.

This assures that the proc object is always freed when the root is
freed, so avoid possible memory leaks.  For example, some error paths
(e.g. snd_info_register() error at snd_minor_info_init()) may leave
snd_info_entry object although the proc file itself is freed.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/info.c

index fe502bc5e6d20e8d800739bbca65a16b6085f155..2dfb6389c084eb73e3455d3234dc0fec4254b277 100644 (file)
@@ -741,7 +741,11 @@ struct snd_info_entry *snd_info_create_module_entry(struct module * module,
                                               const char *name,
                                               struct snd_info_entry *parent)
 {
-       struct snd_info_entry *entry = snd_info_create_entry(name, parent);
+       struct snd_info_entry *entry;
+
+       if (!parent)
+               parent = snd_proc_root;
+       entry = snd_info_create_entry(name, parent);
        if (entry)
                entry->module = module;
        return entry;
@@ -762,7 +766,11 @@ struct snd_info_entry *snd_info_create_card_entry(struct snd_card *card,
                                             const char *name,
                                             struct snd_info_entry * parent)
 {
-       struct snd_info_entry *entry = snd_info_create_entry(name, parent);
+       struct snd_info_entry *entry;
+
+       if (!parent)
+               parent = card->proc_root;
+       entry = snd_info_create_entry(name, parent);
        if (entry) {
                entry->module = card->module;
                entry->card = card;