]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
ALSA: pcm: Fix mmap without buffer preallocation
authorTakashi Iwai <tiwai@suse.de>
Tue, 20 Jul 2021 09:27:32 +0000 (11:27 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 20 Jul 2021 09:28:33 +0000 (11:28 +0200)
The recent rewrite of the memory allocation helpers also changed the
page extraction to a common helper, snd_sgbuf_get_page().  But this
assumes implicitly that the buffer was allocated via the standard
helper (usually via preallocation), and didn't consider the case of
the manual buffer handling.

This patch fixes it and also covers the manual buffer management.

Fixes: 37af81c5998f ("ALSA: core: Abstract memory alloc helpers")
Link: https://lore.kernel.org/r/20210720092732.12412-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/pcm_native.c

index 6919d2943b9d3a7b780a7900accb0275d7aab9d6..6a2971a7e6a1c6f0b8bac91748b9ccd02d5ed788 100644 (file)
@@ -3675,6 +3675,8 @@ static vm_fault_t snd_pcm_mmap_data_fault(struct vm_fault *vmf)
                return VM_FAULT_SIGBUS;
        if (substream->ops->page)
                page = substream->ops->page(substream, offset);
+       else if (!snd_pcm_get_dma_buf(substream))
+               page = virt_to_page(runtime->dma_area + offset);
        else
                page = snd_sgbuf_get_page(snd_pcm_get_dma_buf(substream), offset);
        if (!page)