| From c4824ae7db418aee6f50f308a20b832e58e997fd Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Tue, 20 Jul 2021 11:26:40 +0200 |
| Subject: ALSA: pcm: Fix mmap capability check |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit c4824ae7db418aee6f50f308a20b832e58e997fd upstream. |
| |
| The hw_support_mmap() doesn't cover all memory allocation types and |
| might use a wrong device pointer for checking the capability. |
| Check the all memory allocation types more completely. |
| |
| Cc: <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/20210720092640.12338-1-tiwai@suse.de |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| sound/core/pcm_native.c | 14 ++++++++++---- |
| 1 file changed, 10 insertions(+), 4 deletions(-) |
| |
| --- a/sound/core/pcm_native.c |
| +++ b/sound/core/pcm_native.c |
| @@ -246,12 +246,18 @@ static bool hw_support_mmap(struct snd_p |
| if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_MMAP)) |
| return false; |
| |
| - if (substream->ops->mmap || |
| - (substream->dma_buffer.dev.type != SNDRV_DMA_TYPE_DEV && |
| - substream->dma_buffer.dev.type != SNDRV_DMA_TYPE_DEV_UC)) |
| + if (substream->ops->mmap) |
| return true; |
| |
| - return dma_can_mmap(substream->dma_buffer.dev.dev); |
| + switch (substream->dma_buffer.dev.type) { |
| + case SNDRV_DMA_TYPE_UNKNOWN: |
| + return false; |
| + case SNDRV_DMA_TYPE_CONTINUOUS: |
| + case SNDRV_DMA_TYPE_VMALLOC: |
| + return true; |
| + default: |
| + return dma_can_mmap(substream->dma_buffer.dev.dev); |
| + } |
| } |
| |
| static int constrain_mask_params(struct snd_pcm_substream *substream, |