X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sound%2Foss%2Fsb_mixer.c;h=fad1a4f25ad6db0402de24f24f0c21e1be301c54;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=4e83b586aa06e9f6d05738a6c4d850fd813ca03d;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/sound/oss/sb_mixer.c b/sound/oss/sb_mixer.c index 4e83b586a..fad1a4f25 100644 --- a/sound/oss/sb_mixer.c +++ b/sound/oss/sb_mixer.c @@ -1,5 +1,5 @@ /* - * sound/sb_mixer.c + * sound/oss/sb_mixer.c * * The low level mixer driver for the Sound Blaster compatible cards. */ @@ -273,14 +273,14 @@ int sb_common_mixer_set(sb_devc * devc, int dev, int left, int right) int regoffs; unsigned char val; + if ((dev < 0) || (dev >= devc->iomap_sz)) + return -EINVAL; + regoffs = (*devc->iomap)[dev][LEFT_CHN].regno; if (regoffs == 0) return -EINVAL; - if ((dev < 0) || (dev >= devc->iomap_sz)) - return -EINVAL; - val = sb_getmixer(devc, regoffs); change_bits(devc, &val, dev, LEFT_CHN, left); @@ -528,10 +528,11 @@ static int set_outmask(sb_devc * devc, int mask) return devc->outmask; } -static int sb_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg) +static int sb_mixer_ioctl(int dev, unsigned int cmd, void __user *arg) { sb_devc *devc = mixer_devs[dev]->devc; int val, ret; + int __user *p = arg; /* * Use ioctl(fd, SOUND_MIXER_AGC, &mode) to turn AGC off (0) or on (1). @@ -541,7 +542,7 @@ static int sb_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg) if (devc->model == MDL_SB16) { if (cmd == SOUND_MIXER_AGC) { - if (get_user(val, (int *)arg)) + if (get_user(val, p)) return -EFAULT; sb_setmixer(devc, 0x43, (~val) & 0x01); return 0; @@ -552,14 +553,14 @@ static int sb_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg) At least my 4.13 havn't 3DSE, 4.16 has it. */ if (devc->minor < 15) return -EINVAL; - if (get_user(val, (int *)arg)) + if (get_user(val, p)) return -EFAULT; if (val == 0 || val == 1) sb_chgmixer(devc, AWE_3DSE, 0x01, val); else if (val == 2) { ret = sb_getmixer(devc, AWE_3DSE)&0x01; - return put_user(ret, (int *)arg); + return put_user(ret, p); } else return -EINVAL; @@ -570,7 +571,7 @@ static int sb_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg) { if (_SIOC_DIR(cmd) & _SIOC_WRITE) { - if (get_user(val, (int *)arg)) + if (get_user(val, p)) return -EFAULT; switch (cmd & 0xff) { @@ -625,7 +626,7 @@ static int sb_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg) ret = sb_mixer_get(devc, cmd & 0xff); break; } - return put_user(ret, (int *)arg); + return put_user(ret, p); } else return -EINVAL; } @@ -733,7 +734,7 @@ int sb_mixer_init(sb_devc * devc, struct module *owner) if (m == -1) return 0; - mixer_devs[m] = (struct mixer_operations *)kmalloc(sizeof(struct mixer_operations), GFP_KERNEL); + mixer_devs[m] = kmalloc(sizeof(struct mixer_operations), GFP_KERNEL); if (mixer_devs[m] == NULL) { printk(KERN_ERR "sb_mixer: Can't allocate memory\n");