[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