[lvc-project] [PATCH] ALSA: lola: Add a check on the num_pins variable.

Fedor Pchelkin pchelkin at ispras.ru
Wed Dec 25 17:09:08 MSK 2024


Здравствуйте!

lvc-project at linuxtesting.org - открытый список рассылки, который по
регламентам необходимо ставить в копию при взаимодействии с межд.
сообществом.

Для внутреннего обсуждения патчей имеется список lvc-patches at linuxtesting.org.

Точку в названии патчей не принято ставить.
"ALSA: lola: deny configurations with zero number of physical pins"

On Wed, 25. Dec 13:17, Denis Arefev wrote:
> If num_pins is 0, it will cause division by zero.

If the obtained values of .num_pins are zeroes, they would cause division
by zero later in init_mixer_values().

As zero number of physical 'in' and 'out' pins is not actually expected to
be a valid value, reject such values early during the initialization phase.
The similar check also does exist for .num_streams.

> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 

Предлагаю всё же поставить тег Fixes. Если Takashi посчитает патч чисто
улучшением кода, а не фиксом ошибки, то он попросит убрать. С другой
стороны, всё равно оставляю этот момент с Fixes на Ваше усмотрение.

Fixes: d43f3010b8fa ("ALSA: Add the driver for Digigram Lola PCI-e boards")
> Signed-off-by: Denis Arefev <arefev at swemel.ru>
> ---
>  sound/pci/lola/lola.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/pci/lola/lola.c b/sound/pci/lola/lola.c
> index 1aa30e90b86a..f73a609a140e 100644
> --- a/sound/pci/lola/lola.c
> +++ b/sound/pci/lola/lola.c
> @@ -468,7 +468,8 @@ static int lola_parse_tree(struct lola *chip)

Хм.. там цепочка вызовов выглядит как:

__lola_probe()
|
|--lola_parse_tree() <- считывание значений .num_pins
|
|--lola_create_pcm()
|
|--lola_create_mixer()
   |
   |--...
   |
   |--init_mixer_values() <- деление на 0 [предупреждение Svace]

Ознакомиться с тем, а не проверяется ли нулевое количество где-то по пути
между считыванием значений .num_pins и местом деления на эти значения,
было бы полезно.

Также ещё обнаружил любопытный фрагмент в функции, вызываемой во время
прохождения пути:

static int create_analog_mixer(struct lola *chip, int dir, char *name)
{
	if (!chip->pin[dir].num_pins)
		return 0;
	...

Ошибочным считается отрицательное возвращаемое значение функции.

dir - это CAP или PLAY. Либо проверка здесь сделана некорректно, либо
нулевое количество физических пинов считается *приемлемым* значением (и
тогда патч сломает драйвер для таких случаев).

Спецификаций LoLa не искали? Их нет в открытом доступе?

>  		    chip->pin[CAPT].num_pins, chip->pin[PLAY].num_pins);
>  
>  	if (chip->pin[CAPT].num_pins > MAX_AUDIO_INOUT_COUNT ||
> -	    chip->pin[PLAY].num_pins > MAX_AUDIO_INOUT_COUNT) {
> +	    chip->pin[PLAY].num_pins > MAX_AUDIO_INOUT_COUNT ||
> +	    !(chip->pin[CAPT].num_pins && chip->pin[PLAY].num_pins)) {
>  		dev_err(chip->card->dev, "Invalid Lola-spec caps 0x%x\n", val);
>  		return -EINVAL;
>  	}
> -- 
> 2.43.0
> 
> 
> _______________________________________________
> lvc-project mailing list
> lvc-project at linuxtesting.org
> http://linuxtesting.org/cgi-bin/mailman/listinfo/lvc-project



More information about the lvc-project mailing list