From: Takashi Iwai Date: Mon, 4 Nov 2013 14:44:09 +0000 (+0100) Subject: ALSA: hda - Fix possible zero-division X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=a4e7a121685a137eeeb01f05d5ed570c1b45017a;p=linux-beck.git 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: Takashi Iwai --- diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index de1a7670ba0d..33c01d551aa4 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -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; }