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>
diff --git a/sound/pci/emu10k1/memory.c b/sound/pci/emu10k1/memory.c
index 42943b4..759e29f 100644
--- a/sound/pci/emu10k1/memory.c
+++ b/sound/pci/emu10k1/memory.c
@@ -464,11 +464,17 @@
 		/* 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;