ALSA: hda - Sanity check of access to SPDIF controls array
Put WARN_ON() and bail out if the given index is over the allocated array of the given SPDIF controls. It's merely a sanity check to catch any potential issues (if any). Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
c1a3610104
Коммит
08605068df
|
@ -2175,6 +2175,8 @@ static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol,
|
|||
int idx = kcontrol->private_value;
|
||||
struct hda_spdif_out *spdif;
|
||||
|
||||
if (WARN_ON(codec->spdif_out.used <= idx))
|
||||
return -EINVAL;
|
||||
mutex_lock(&codec->spdif_mutex);
|
||||
spdif = snd_array_elem(&codec->spdif_out, idx);
|
||||
ucontrol->value.iec958.status[0] = spdif->status & 0xff;
|
||||
|
@ -2282,6 +2284,8 @@ static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol,
|
|||
unsigned short val;
|
||||
int change;
|
||||
|
||||
if (WARN_ON(codec->spdif_out.used <= idx))
|
||||
return -EINVAL;
|
||||
mutex_lock(&codec->spdif_mutex);
|
||||
spdif = snd_array_elem(&codec->spdif_out, idx);
|
||||
nid = spdif->nid;
|
||||
|
@ -2308,6 +2312,8 @@ static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol,
|
|||
int idx = kcontrol->private_value;
|
||||
struct hda_spdif_out *spdif;
|
||||
|
||||
if (WARN_ON(codec->spdif_out.used <= idx))
|
||||
return -EINVAL;
|
||||
mutex_lock(&codec->spdif_mutex);
|
||||
spdif = snd_array_elem(&codec->spdif_out, idx);
|
||||
ucontrol->value.integer.value[0] = spdif->ctls & AC_DIG1_ENABLE;
|
||||
|
@ -2336,6 +2342,8 @@ static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol,
|
|||
unsigned short val;
|
||||
int change;
|
||||
|
||||
if (WARN_ON(codec->spdif_out.used <= idx))
|
||||
return -EINVAL;
|
||||
mutex_lock(&codec->spdif_mutex);
|
||||
spdif = snd_array_elem(&codec->spdif_out, idx);
|
||||
nid = spdif->nid;
|
||||
|
@ -2483,6 +2491,8 @@ void snd_hda_spdif_ctls_unassign(struct hda_codec *codec, int idx)
|
|||
{
|
||||
struct hda_spdif_out *spdif;
|
||||
|
||||
if (WARN_ON(codec->spdif_out.used <= idx))
|
||||
return;
|
||||
mutex_lock(&codec->spdif_mutex);
|
||||
spdif = snd_array_elem(&codec->spdif_out, idx);
|
||||
spdif->nid = (u16)-1;
|
||||
|
@ -2503,6 +2513,8 @@ void snd_hda_spdif_ctls_assign(struct hda_codec *codec, int idx, hda_nid_t nid)
|
|||
struct hda_spdif_out *spdif;
|
||||
unsigned short val;
|
||||
|
||||
if (WARN_ON(codec->spdif_out.used <= idx))
|
||||
return;
|
||||
mutex_lock(&codec->spdif_mutex);
|
||||
spdif = snd_array_elem(&codec->spdif_out, idx);
|
||||
if (spdif->nid != nid) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче