Skip to content

Commit

Permalink
ALSA: hda - hdmi: Do not expose eld data when eld is invalid
Browse files Browse the repository at this point in the history
Previously, it was possible to read the eld data of the previous
monitor connected. This should not be allowed.

Also refactor the function slightly.

Signed-off-by: David Henningsson <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
David Henningsson authored and tiwai committed Feb 19, 2013
1 parent bbfd8a1 commit 68e03de
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions sound/pci/hda/patch_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -343,14 +343,16 @@ static int hdmi_eld_ctl_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo)
{
struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
struct hdmi_spec *spec;
struct hdmi_spec *spec = codec->spec;
struct hdmi_eld *eld;
int pin_idx;

spec = codec->spec;
uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;

pin_idx = kcontrol->private_value;
uinfo->count = spec->pins[pin_idx].sink_eld.eld_size;
eld = &spec->pins[pin_idx].sink_eld;

uinfo->count = eld->eld_valid ? eld->eld_size : 0;

return 0;
}
Expand All @@ -359,14 +361,23 @@ static int hdmi_eld_ctl_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
struct hdmi_spec *spec;
struct hdmi_spec *spec = codec->spec;
struct hdmi_eld *eld;
int pin_idx;

spec = codec->spec;
pin_idx = kcontrol->private_value;
eld = &spec->pins[pin_idx].sink_eld;

if (eld->eld_size > ARRAY_SIZE(ucontrol->value.bytes.data)) {
snd_BUG();
return -EINVAL;
}

memcpy(ucontrol->value.bytes.data,
spec->pins[pin_idx].sink_eld.eld_buffer, ELD_MAX_SIZE);
memset(ucontrol->value.bytes.data, 0,
ARRAY_SIZE(ucontrol->value.bytes.data));
if (eld->eld_valid)
memcpy(ucontrol->value.bytes.data, eld->eld_buffer,
eld->eld_size);

return 0;
}
Expand Down

0 comments on commit 68e03de

Please sign in to comment.