ALSA: emu10k1 - fix possible memory leak in memory allocation routines
The leak was introduced in "[ALSA] emu10k1 - simplify page allocation for synth" commit. Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
6719292af5
commit
9f515b6898
|
@ -464,11 +464,17 @@ static int synth_alloc_pages(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk
|
|||
/* first try to allocate from <4GB zone */
|
||||
struct page *p = alloc_page(GFP_KERNEL | GFP_DMA32 |
|
||||
__GFP_NOWARN);
|
||||
if (!p || (page_to_pfn(p) & ~(emu->dma_mask >> PAGE_SHIFT)))
|
||||
if (!p || (page_to_pfn(p) & ~(emu->dma_mask >> PAGE_SHIFT))) {
|
||||
/* try to allocate from <16MB zone */
|
||||
p = alloc_page(GFP_ATOMIC | GFP_DMA |
|
||||
struct page *p1 =
|
||||
alloc_page(GFP_ATOMIC | GFP_DMA |
|
||||
__GFP_NORETRY | /* no OOM-killer */
|
||||
__GFP_NOWARN);
|
||||
/* free page outside dma_mask range */
|
||||
if (p)
|
||||
free_page((unsigned long)page_address(p));
|
||||
p = p1;
|
||||
}
|
||||
if (!p) {
|
||||
__synth_free_pages(emu, first_page, page - 1);
|
||||
return -ENOMEM;
|
||||
|
|
Loading…
Reference in a new issue