aboutsummaryrefslogtreecommitdiffstats
path: root/sound/sparc/dbri.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2007-11-15 10:17:24 -0500
committerJaroslav Kysela <perex@perex.cz>2008-01-31 11:29:25 -0500
commit3b892467786410f26dffc2c7bccd3ea445604037 (patch)
tree4a70f86b1545e9be95d987fc248cac3cebbbd9a8 /sound/sparc/dbri.c
parent498ade1a133dffd0f3ee90952737045d56e6689a (diff)
[ALSA] Check value range in ctl callbacks
Check the value ranges in ctl put callbacks properly (in the rest drivers). Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/sparc/dbri.c')
-rw-r--r--sound/sparc/dbri.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/sound/sparc/dbri.c b/sound/sparc/dbri.c
index 376b98691c96..af1bf4bf9459 100644
--- a/sound/sparc/dbri.c
+++ b/sound/sparc/dbri.c
@@ -2279,9 +2279,20 @@ static int snd_cs4215_put_volume(struct snd_kcontrol *kcontrol,
2279 struct snd_dbri *dbri = snd_kcontrol_chip(kcontrol); 2279 struct snd_dbri *dbri = snd_kcontrol_chip(kcontrol);
2280 struct dbri_streaminfo *info = 2280 struct dbri_streaminfo *info =
2281 &dbri->stream_info[kcontrol->private_value]; 2281 &dbri->stream_info[kcontrol->private_value];
2282 unsigned int vol[2];
2282 int changed = 0; 2283 int changed = 0;
2283 2284
2284 if (info->left_gain != ucontrol->value.integer.value[0]) { 2285 vol[0] = ucontrol->value.integer.value[0];
2286 vol[1] = ucontrol->value.integer.value[1];
2287 if (kcontrol->private_value == DBRI_PLAY) {
2288 if (vol[0] > DBRI_MAX_VOLUME || vol[1] > DBRI_MAX_VOLUME)
2289 return -EINVAL;
2290 } else {
2291 if (vol[0] > DBRI_MAX_GAIN || vol[1] > DBRI_MAX_GAIN)
2292 return -EINVAL;
2293 }
2294
2295 if (info->left_gain !=
2285 info->left_gain = ucontrol->value.integer.value[0]; 2296 info->left_gain = ucontrol->value.integer.value[0];
2286 changed = 1; 2297 changed = 1;
2287 } 2298 }