ALSA: hda: Fix too short HDMI/DP chmap reporting
We got a regression report about the HD-audio HDMI chmap, where some surround channels are reported as UNKNOWN. The git bisection pointed the culprit at the commit9b3dc8aa3f
("ALSA: hda - Register chmap obj as priv data instead of codec"). The story behind scene is like this: - While moving the code out of the legacy HDA to the HDA common place, the patch modifies the code to obtain the chmap array indirectly in a byte array, and it expands it to kctl value array. - At the latter operation, the size of the array is wrongly passed by sizeof() to the pointer. - It can be 4 on 32bit arch, thus too short for 6+ channels. (And that's the reason why it didn't hit other persons; it's 8 on 64bit arch, thus it's usually enough.) The code was further changed meanwhile, but the problem persisted. Let's fix it by correctly evaluating the array size. Fixes:9b3dc8aa3f
("ALSA: hda - Register chmap obj as priv data instead of codec") Reported-by: VDR User <user.vdr@gmail.com> Cc: <stable@vger.kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
b2500b584c
commit
c2432466f5
|
@ -746,7 +746,7 @@ static int hdmi_chmap_ctl_get(struct snd_kcontrol *kcontrol,
|
|||
memset(pcm_chmap, 0, sizeof(pcm_chmap));
|
||||
chmap->ops.get_chmap(chmap->hdac, pcm_idx, pcm_chmap);
|
||||
|
||||
for (i = 0; i < sizeof(chmap); i++)
|
||||
for (i = 0; i < ARRAY_SIZE(pcm_chmap); i++)
|
||||
ucontrol->value.integer.value[i] = pcm_chmap[i];
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue