Skip to content

Commit

Permalink
V4L/DVB: cx88-alsa: prevent out-of-range volume setting
Browse files Browse the repository at this point in the history
Ensure that volume values are always in the allowed range.  Otherwise,
it would be possible to set other bits in the AUD_VOL_CTL register or to
get a wrong sign in the AUD_BAL_CTL register.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Clemens Ladisch authored and Mauro Carvalho Chehab committed Feb 26, 2010
1 parent 071193f commit cca80b9
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions drivers/media/video/cx88/cx88-alsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -583,16 +583,18 @@ static int snd_cx88_volume_put(struct snd_kcontrol *kcontrol,
{
snd_cx88_card_t *chip = snd_kcontrol_chip(kcontrol);
struct cx88_core *core=chip->core;
int v, b;
int left, right, v, b;
int changed = 0;
u32 old;

b = value->value.integer.value[1] - value->value.integer.value[0];
left = value->value.integer.value[0] & 0x3f;
right = value->value.integer.value[1] & 0x3f;
b = right - left;
if (b < 0) {
v = 0x3f - value->value.integer.value[0];
v = 0x3f - left;
b = (-b) | 0x40;
} else {
v = 0x3f - value->value.integer.value[1];
v = 0x3f - right;
}
/* Do we really know this will always be called with IRQs on? */
spin_lock_irq(&chip->reg_lock);
Expand Down

0 comments on commit cca80b9

Please sign in to comment.