diff options
author | Danny Baumann <dannybaumann@web.de> | 2016-02-09 14:11:52 +0100 |
---|---|---|
committer | Danny Baumann <dannybaumann@web.de> | 2016-02-09 14:11:52 +0100 |
commit | d477bf7d9ca2920bbf9e2cf1a7eb8cba56634596 (patch) | |
tree | 2d50eb5f27d383793acc397e7c4f5cda627450bd | |
parent | d762c50816527af23c2927df2f1d97948229c770 (diff) | |
download | android_external_tinyalsa-replicant-6.0-0004-rc6.tar.gz android_external_tinyalsa-replicant-6.0-0004-rc6.tar.bz2 android_external_tinyalsa-replicant-6.0-0004-rc6.zip |
Don't obey invalid integer ranges.HEADreplicant-6.0-0004-transitionreplicant-6.0-0004-rc6replicant-6.0-0004-rc5-transitionreplicant-6.0-0004-rc5replicant-6.0-0004-rc4replicant-6.0-0004-rc3replicant-6.0-0004-rc2replicant-6.0-0004-rc1replicant-6.0-0004replicant-6.0-0003replicant-6.0-0002replicant-6.0-0001stable/cm-13.0-ZNH5Ystable/cm-13.0-ZNH2KBstable/cm-13.0-ZNH2Kcm-13.0
Qualcomm's sound drivers (wrongly) set 0xffffffff as range maximum in
a lot of cases, which essentially means they set that maximum value to
-1 due to signed integer value overflow.
Instead of patching all the kernels accordingly, drop the range check
for such invalid ranges.
Change-Id: I4efe0010c316f1fbfbbc004b51fbd5d40d1e1d1e
-rw-r--r-- | mixer.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -393,12 +393,14 @@ int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value) ev.value.integer.value[id] = !!value; break; - case SNDRV_CTL_ELEM_TYPE_INTEGER: - if (value > mixer_ctl_get_range_max(ctl) || - value < mixer_ctl_get_range_min(ctl)) + case SNDRV_CTL_ELEM_TYPE_INTEGER: { + int min = mixer_ctl_get_range_min(ctl); + int max = mixer_ctl_get_range_max(ctl); + if (min < max && (value < min || value > max)) return -EINVAL; ev.value.integer.value[id] = value; break; + } case SNDRV_CTL_ELEM_TYPE_ENUMERATED: if (value < 0 || value >= mixer_ctl_get_num_enums(ctl)) |