Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4e7a121 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Fix possible zero-division



Check the TLV db scale result before actually dividing in vmaster
slave init code.  Also mask TLV_DB_SCALE_MUTE bit so that the right
value is obtained even if this bit is set by the codec driver.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 504333df
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -2676,8 +2676,13 @@ static int get_kctl_0dB_offset(struct snd_kcontrol *kctl)
		set_fs(fs);
	} else if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)
		tlv = kctl->tlv.p;
	if (tlv && tlv[0] == SNDRV_CTL_TLVT_DB_SCALE)
		val = -tlv[2] / tlv[3];
	if (tlv && tlv[0] == SNDRV_CTL_TLVT_DB_SCALE) {
		int step = tlv[3];
		step &= ~TLV_DB_SCALE_MUTE;
		if (!step)
			return -1;
		val = -tlv[2] / step;
	}
	return val;
}