ALSA: x86: Fix memory leak in had_build_channel_allocation_map()

The previously allocated chmap has to be released before setting the
new one.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Iwai 2017-02-15 21:42:20 +01:00
parent 5def90196b
commit 18353192b8

View File

@ -444,11 +444,12 @@ static void had_build_channel_allocation_map(struct snd_intelhad *intelhaddata)
u8 eld_high, eld_high_mask = 0xF0;
u8 high_msb;
kfree(intelhaddata->chmap->chmap);
intelhaddata->chmap->chmap = NULL;
chmap = kzalloc(sizeof(*chmap), GFP_KERNEL);
if (!chmap) {
intelhaddata->chmap->chmap = NULL;
if (!chmap)
return;
}
dev_dbg(intelhaddata->dev, "eld speaker = %x\n",
intelhaddata->eld[DRM_ELD_SPEAKER]);
@ -493,10 +494,8 @@ static void had_build_channel_allocation_map(struct snd_intelhad *intelhaddata)
break;
}
}
if (i >= ARRAY_SIZE(channel_allocations)) {
intelhaddata->chmap->chmap = NULL;
if (i >= ARRAY_SIZE(channel_allocations))
kfree(chmap);
}
}
/*