|
@@ -342,6 +342,9 @@ int snd_ctl_add(struct snd_card *card, struct snd_kcontrol *kcontrol)
|
|
if (snd_BUG_ON(!card || !kcontrol->info))
|
|
if (snd_BUG_ON(!card || !kcontrol->info))
|
|
goto error;
|
|
goto error;
|
|
id = kcontrol->id;
|
|
id = kcontrol->id;
|
|
|
|
+ if (id.index > UINT_MAX - kcontrol->count)
|
|
|
|
+ goto error;
|
|
|
|
+
|
|
down_write(&card->controls_rwsem);
|
|
down_write(&card->controls_rwsem);
|
|
if (snd_ctl_find_id(card, &id)) {
|
|
if (snd_ctl_find_id(card, &id)) {
|
|
up_write(&card->controls_rwsem);
|
|
up_write(&card->controls_rwsem);
|