[PATCH] alsa-util: don't crash on devices with more than 32 channels

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Jan 29 2017 01:08, Tanu Kaskinen wrote:
> The pa_channel_map_init_extend() call later in the function crashes if
> if ss->channels is greater than PA_CHANNELS_MAX.
>
> Reported here:
> https://lists.freedesktop.org/archives/pulseaudio-discuss/2017-January/027404.html
> ---
>  src/modules/alsa/alsa-util.c | 7 +++++++
>  1 file changed, 7 insertions(+)

Reviewed-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>
Tested-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>

I tested with a device which has 34ch capture and 30ch playback. 
PulseAudio adds a sink for the playback PCM substream with multichannel 
profile, and ignores the capture PCM substream.

But I think there's a space to discuss this issue more. In this world, 
we have some devices with over-32ch, or users can add virtual sound card 
with over-32ch. Although such users seem to work without PulseAudio, 
it's better to drop this kind of restriction for better future of this 
sound server.

> diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
> index 63d370f52..61fb4903c 100644
> --- a/src/modules/alsa/alsa-util.c
> +++ b/src/modules/alsa/alsa-util.c
> @@ -747,6 +747,13 @@ snd_pcm_t *pa_alsa_open_by_device_string(
>              goto fail;
>          }
>
> +        if (ss->channels > PA_CHANNELS_MAX) {
> +            pa_log("Device %s has %u channels, but PulseAudio supports only %u channels. Unable to use the device.",
> +                   d, ss->channels, PA_CHANNELS_MAX);
> +            snd_pcm_close(pcm_handle);
> +            goto fail;
> +        }
> +
>          if (dev)
>              *dev = d;
>          else


Regards

Takashi Sakamoto


[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux