Re: Compile errors in 2.1.5

Guilhem Lavaux (ylavaux@pratique.fr)
Sat, 19 Oct 1996 14:52:02 +0100


This is a multi-part message in MIME format.

--------------7AC127314729B026253EEEC9
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Nir Soffer wrote:
>
> Hiyas :)
> This is the list of errors I get on compiling 2.1.5
> (most of it snipped, just the errors I found are here, if someone want a
> whole stdout and stderr dump, let me know)
>
> I'll try fixing the errors by myself - and if I can - I'll submit a patch.
>
> make[3]: Entering directory `/usr/src/linux/drivers/sound/lowlevel'
> gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2
> -fomit-fld -m elf_i386 -r -o lowlevel.o init.o
> make[3]: Leaving directory `/usr/src/linux/drivers/sound/lowlevel'
> gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2
> -fomit-faudio.c:247: macro `copy_from_user' used with too many (6) args
> audio.c:384: macro `get_user' used with just one arg
> audio.c: In function `audio_write':
> audio.c:246: parse error before `('
> audio.c: In function `audio_ioctl':
> audio.c:384: parse error before `)'
> audio.c:384: parse error before `)'
> audio.c:384: parse error before `)'
> audio.c:384: parse error before `)'
> audio.c:384: parse error before `)'
> make[2]: *** [audio.o] Error 1
> make[2]: Leaving directory `/usr/src/linux/drivers/sound'
> make[1]: *** [modules] Error 2
> make[1]: Leaving directory `/usr/src/linux/drivers'

- I correct this in the patch below: change ... = get_buffer(...) by
get_buffer(a_var, ...) ).
(All sound driver may be corrected now except dmasound.c)

- I found a strange error when I compile patmgr.c:
gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2
-fomit-frame-pointer -fno-strength-reduce -pipe -m486 -malign-loops=2
-malign-jumps=2 -malign-functions=2 -DCPU=586 -DMODULE -DMODVERSIONS
-include /usr/src/linux/include/linux/modversions.h -c -o patmgr.o
patmgr.c
patmgr.c: In function `pmgr_read':
patmgr.c:122: fixed or forbidden register was spilled.
This may be due to a compiler bug or to impossible asm
statements or clauses.

I added:
unsigned long __cu_from = (unsigned long) from;
in copy_to_user (include/asm-i386/segment.h). It seems to work after
that.

- I correct IPX too. (get_fs_byte -> get_user)

Bye.

Guilhem.

P.S.: If I'm wrong for the patmgr.c problem, please accept my apologies.

-- 
-----------------------------------|
|   /-\  LAVAUX Yves & Guilhem     |
|  /   \       /-\                 |
|-/     \     /   \   /------------|
|        \   /     \-/             |
|         \-/  ylavaux@pratique.fr |
-----------------------------------|

--------------7AC127314729B026253EEEC9 Content-Type: text/plain; charset=us-ascii; name="patch_linux2.1.5" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch_linux2.1.5"

diff -u --recursive linux-2.1.5/drivers/sound/ad1848.c linux/drivers/sound/ad1848.c --- linux-2.1.5/drivers/sound/ad1848.c Tue Aug 20 21:58:08 1996 +++ linux/drivers/sound/ad1848.c Sat Oct 19 13:49:51 1996 @@ -469,6 +469,7 @@ ad1848_mixer_ioctl (int dev, unsigned int cmd, caddr_t arg) { ad1848_info *devc = mixer_devs[dev]->devc; + int i; if (((cmd >> 8) & 0xff) == 'M') { @@ -477,11 +478,13 @@ switch (cmd & 0xff) { case SOUND_MIXER_RECSRC: - return snd_ioctl_return ((int *) arg, ad1848_set_recmask (devc, get_user ((int *) arg))); + get_user(i, (int *)addr); + return snd_ioctl_return ((int *) arg, ad1848_set_recmask (devc, i)); break; default: - return snd_ioctl_return ((int *) arg, ad1848_mixer_set (devc, cmd & 0xff, get_user ((int *) arg))); + get_user(i, (int *)addr); + return snd_ioctl_return ((int *) arg, ad1848_mixer_set (devc, cmd & 0xff, i)); } else switch (cmd & 0xff) /* diff -u --recursive linux-2.1.5/drivers/sound/audio.c linux/drivers/sound/audio.c --- linux-2.1.5/drivers/sound/audio.c Sat Oct 19 14:11:43 1996 +++ linux/drivers/sound/audio.c Sat Oct 19 13:00:22 1996 @@ -236,15 +236,15 @@ if (l > (buf_size - buf_ptr)) l = (buf_size - buf_ptr); - if (!audio_devs[dev]->d->copy_from_user) + if (!audio_devs[dev]->d->audio_copy_from_user) { /* * No device specific copy routine */ copy_from_user (&dma_buf[buf_ptr], &(buf)[p], l); } else - audio_devs[dev]->d->copy_from_user (dev, - dma_buf, buf_ptr, buf, p, l); + audio_devs[dev]->d->audio_copy_from_user (dev, + dma_buf, buf_ptr, buf, p, l); if (local_conversion[dev] == AFMT_MU_LAW) { @@ -341,6 +341,7 @@ audio_ioctl (int dev, struct fileinfo *file, unsigned int cmd, caddr_t arg) { + int i; dev = dev >> 4; @@ -381,7 +382,8 @@ break; case SNDCTL_DSP_SETFMT: - return snd_ioctl_return ((int *) arg, set_format (dev, get_user ((int *) arg))); + get_user (i,(int *)arg); + return snd_ioctl_return ((int *) arg, set_format (dev, i)); case SNDCTL_DSP_GETISPACE: if (!(audio_devs[dev]->open_mode & OPEN_READ)) diff -u --recursive linux-2.1.5/drivers/sound/dev_table.h linux/drivers/sound/dev_table.h --- linux-2.1.5/drivers/sound/dev_table.h Thu Oct 10 19:34:32 1996 +++ linux/drivers/sound/dev_table.h Fri Oct 18 20:16:22 1996 @@ -148,8 +148,8 @@ void (*reset) (int dev); void (*halt_xfer) (int dev); int (*local_qlen)(int dev); - void (*copy_from_user)(int dev, char *localbuf, int localoffs, - const char *userbuf, int useroffs, int len); + void (*audio_copy_from_user)(int dev, char *localbuf, int localoffs, + const char *userbuf, int useroffs, int len); void (*halt_input) (int dev); void (*halt_output) (int dev); void (*trigger) (int dev, int bits); diff -u --recursive linux-2.1.5/drivers/sound/dmabuf.c linux/drivers/sound/dmabuf.c --- linux-2.1.5/drivers/sound/dmabuf.c Sat Oct 19 14:11:43 1996 +++ linux/drivers/sound/dmabuf.c Sat Oct 19 13:00:22 1996 @@ -762,13 +762,15 @@ struct dma_buffparms *dmap_out = audio_devs[dev]->dmap_out; struct dma_buffparms *dmap_in = audio_devs[dev]->dmap_in; long larg = (long) arg; + int i; switch (cmd) { case SOUND_PCM_WRITE_RATE: if (local) return audio_devs[dev]->d->set_speed (dev, larg); - return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_speed (dev, get_user ((int *) arg))); + get_user (i,(int *)arg); + return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_speed (dev, i)); case SOUND_PCM_READ_RATE: if (local) @@ -778,12 +780,14 @@ case SNDCTL_DSP_STEREO: if (local) return audio_devs[dev]->d->set_channels (dev, larg + 1) - 1; - return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_channels (dev, get_user ((int *) arg) + 1) - 1); + get_user (i,(int *)arg); + return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_channels (dev, i + 1) - 1); case SOUND_PCM_WRITE_CHANNELS: if (local) return audio_devs[dev]->d->set_channels (dev, (short) larg); - return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_channels (dev, get_user ((int *) arg))); + get_user (i,(int *)arg); + return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_channels (dev, i)); case SOUND_PCM_READ_CHANNELS: if (local) @@ -793,7 +797,8 @@ case SNDCTL_DSP_SAMPLESIZE: if (local) return audio_devs[dev]->d->set_bits (dev, larg); - return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_bits (dev, get_user ((int *) arg))); + get_user (i,(int *)arg); + return snd_ioctl_return ((int *) arg, audio_devs[dev]->d->set_bits (dev, i)); case SOUND_PCM_READ_BITS: if (local) @@ -827,9 +832,11 @@ case SNDCTL_DSP_SUBDIVIDE: { - int fact = get_user ((int *) arg); + int fact; int ret; + get_user (fact, (int *)arg); + ret = dma_subdivide (dev, dmap_out, arg, fact); if (ret < 0) return ret; @@ -851,9 +858,11 @@ case SNDCTL_DSP_SETFRAGMENT: { - int fact = get_user ((int *) arg); + int fact; int ret; + get_user (fact,(int *)arg); + ret = dma_set_fragment (dev, dmap_out, arg, fact); if (ret < 0) return ret; @@ -930,8 +939,11 @@ { unsigned long flags; - int bits = get_user ((int *) arg) & audio_devs[dev]->open_mode; + int bits; int changed; + + get_user (bits, (int *)arg); + bits &= audio_devs[dev]->open_mode; if (audio_devs[dev]->d->trigger == NULL) return -(EINVAL); diff -u --recursive linux-2.1.5/drivers/sound/gus_wave.c linux/drivers/sound/gus_wave.c --- linux-2.1.5/drivers/sound/gus_wave.c Sat Oct 19 14:11:43 1996 +++ linux/drivers/sound/gus_wave.c Sat Oct 19 13:53:23 1996 @@ -2190,12 +2190,15 @@ static int gus_audio_ioctl (int dev, unsigned int cmd, caddr_t arg, int local) { + int i; + switch (cmd) { case SOUND_PCM_WRITE_RATE: if (local) return gus_audio_set_speed ((int) arg); - return snd_ioctl_return ((int *) arg, gus_audio_set_speed (get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, gus_audio_set_speed (i)); break; case SOUND_PCM_READ_RATE: @@ -2207,13 +2210,15 @@ case SNDCTL_DSP_STEREO: if (local) return gus_audio_set_channels ((int) arg + 1) - 1; - return snd_ioctl_return ((int *) arg, gus_audio_set_channels (get_user ((int *) arg) + 1) - 1); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, gus_audio_set_channels (i + 1) - 1); break; case SOUND_PCM_WRITE_CHANNELS: if (local) return gus_audio_set_channels ((int) arg); - return snd_ioctl_return ((int *) arg, gus_audio_set_channels (get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, gus_audio_set_channels (i)); break; case SOUND_PCM_READ_CHANNELS: @@ -2225,7 +2230,8 @@ case SNDCTL_DSP_SETFMT: if (local) return gus_audio_set_bits ((int) arg); - return snd_ioctl_return ((int *) arg, gus_audio_set_bits (get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, gus_audio_set_bits (i)); break; case SOUND_PCM_READ_BITS: @@ -3046,7 +3052,8 @@ switch (cmd & 0xff) { case SOUND_MIXER_RECSRC: - gus_recmask = get_user ((int *) arg) & MIX_DEVS; + get_user (gus_recmask, (int *)arg); + gus_recmask &= MIX_DEVS; if (!(gus_recmask & (SOUND_MASK_MIC | SOUND_MASK_LINE))) gus_recmask = SOUND_MASK_MIC; /* Note! Input volumes are updated during next open for recording */ @@ -3055,8 +3062,10 @@ case SOUND_MIXER_MIC: { - int vol = get_user ((int *) arg) & 0xff; + int vol; + get_user (vol, (int *)arg); + vol &= 0xff; if (vol < 0) vol = 0; if (vol > 100) @@ -3069,8 +3078,10 @@ case SOUND_MIXER_LINE: { - int vol = get_user ((int *) arg) & 0xff; + int vol + get_user (vol, (int *)arg); + vol &= 0xff; if (vol < 0) vol = 0; if (vol > 100) @@ -3082,7 +3093,8 @@ break; case SOUND_MIXER_PCM: - gus_pcm_volume = get_user ((int *) arg) & 0xff; + get_user (gus_pcm_volume, (int *)arg); + gus_pcm_volume &= 0xff; if (gus_pcm_volume < 0) gus_pcm_volume = 0; if (gus_pcm_volume > 100) @@ -3095,7 +3107,8 @@ { int voice; - gus_wave_volume = get_user ((int *) arg) & 0xff; + get_user (gus_wave_volume, (int *) arg); + gus_wave_volume &= 0xff; if (gus_wave_volume < 0) gus_wave_volume = 0; diff -u --recursive linux-2.1.5/drivers/sound/ics2101.c linux/drivers/sound/ics2101.c --- linux-2.1.5/drivers/sound/ics2101.c Tue Aug 20 21:58:08 1996 +++ linux/drivers/sound/ics2101.c Sat Oct 19 14:08:03 1996 @@ -128,23 +128,28 @@ break; case SOUND_MIXER_MIC: - return snd_ioctl_return ((int *) arg, set_volumes (DEV_MIC, get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, set_volumes (DEV_MIC, i)); break; case SOUND_MIXER_CD: - return snd_ioctl_return ((int *) arg, set_volumes (DEV_CD, get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, set_volumes (DEV_CD, i)); break; case SOUND_MIXER_LINE: - return snd_ioctl_return ((int *) arg, set_volumes (DEV_LINE, get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, set_volumes (DEV_LINE, i)); break; case SOUND_MIXER_SYNTH: - return snd_ioctl_return ((int *) arg, set_volumes (DEV_GF1, get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, set_volumes (DEV_GF1, i)); break; case SOUND_MIXER_VOLUME: - return snd_ioctl_return ((int *) arg, set_volumes (DEV_VOL, get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, set_volumes (DEV_VOL, i)); break; default: diff -u --recursive linux-2.1.5/drivers/sound/lowlevel/aci.c linux/drivers/sound/lowlevel/aci.c --- linux-2.1.5/drivers/sound/lowlevel/aci.c Sat Jul 6 15:07:37 1996 +++ linux/drivers/sound/lowlevel/aci.c Sat Oct 19 14:04:15 1996 @@ -290,7 +290,7 @@ int vol, ret; unsigned param; - param = get_user((int *) arg); + get_user(param, (int *) arg); /* left channel */ vol = param & 0xff; if (vol > 100) vol = 100; @@ -316,8 +316,11 @@ /* handle solo mode control */ if (cmd == SOUND_MIXER_PRIVATE1) { - if (get_user((int *) arg) >= 0) { - aci_solo = !!get_user((int *) arg); + int i; + + get_user (i, (int *) arg)); + if (i >= 0) { + aci_solo = !!i; if (write_cmd(0xd2, aci_solo)) return -EIO; } else if (aci_version >= 0xb0) { if ((status = read_general_status()) < 0) return -EIO; @@ -347,7 +350,8 @@ case SOUND_MIXER_LINE2: /* AUX2 */ return setvolume(arg, 0x3e, 0x36); case SOUND_MIXER_IGAIN: /* MIC pre-amp */ - vol = get_user((int *) arg) & 0xff; + get_user(vol, (int *) arg); + vol &= 0xff; if (vol > 100) vol = 100; vol = SCALE(100, 3, vol); if (write_cmd(0x03, vol)) return -EIO; diff -u --recursive linux-2.1.5/drivers/sound/midi_synth.c linux/drivers/sound/midi_synth.c --- linux-2.1.5/drivers/sound/midi_synth.c Sat Oct 19 14:11:43 1996 +++ linux/drivers/sound/midi_synth.c Sat Oct 19 13:00:23 1996 @@ -537,7 +537,7 @@ { unsigned char data; - data = get_fs_byte (&((addr)[hdr_size + i])); + get_user (data, &((addr)[hdr_size + i])); eox_seen = (i > 0 && data & 0x80); /* End of sysex */ diff -u --recursive linux-2.1.5/drivers/sound/midibuf.c linux/drivers/sound/midibuf.c --- linux-2.1.5/drivers/sound/midibuf.c Sat Oct 19 14:11:43 1996 +++ linux/drivers/sound/midibuf.c Sat Oct 19 13:00:23 1996 @@ -473,7 +473,7 @@ { case SNDCTL_MIDI_PRETIME: - val = (int) get_user ((int *) arg); + get_user (val, (int *) arg); if (val < 0) val = 0; diff -u --recursive linux-2.1.5/drivers/sound/mpu401.c linux/drivers/sound/mpu401.c --- linux-2.1.5/drivers/sound/mpu401.c Sat Oct 19 14:11:43 1996 +++ linux/drivers/sound/mpu401.c Sat Oct 19 13:56:54 1996 @@ -790,7 +790,8 @@ printk ("MPU-401: Intelligent mode not supported by the HW\n"); return -(EINVAL); } - set_uart_mode (dev, devc, !get_user ((int *) arg)); + get_user (i, (int *)arg); + set_uart_mode (dev, devc, !i); return 0; break; @@ -1585,13 +1586,16 @@ unsigned int command, caddr_t arg) { int midi_dev = sound_timer_devs[dev]->devlink; + int i; switch (command) { case SNDCTL_TMR_SOURCE: { - int parm = (int) get_user ((int *) arg) & timer_caps; + int parm; + get_user (parm, (int *)arg); + parm &= timer_caps; if (parm != 0) { timer_mode = parm; @@ -1628,8 +1632,9 @@ case SNDCTL_TMR_TIMEBASE: { - int val = (int) get_user ((int *) arg); + int val; + get_user(val, (int *)arg); if (val) set_timebase (midi_dev, val); @@ -1639,9 +1644,10 @@ case SNDCTL_TMR_TEMPO: { - int val = (int) get_user ((int *) arg); + int val; int ret; + get_user (val, (int *)arg); if (val) { if (val < 8) @@ -1662,14 +1668,15 @@ break; case SNDCTL_SEQ_CTRLRATE: - if (get_user ((int *) arg) != 0) /* Can't change */ + get_user (i, (int *)arg); + if (i != 0) /* Can't change */ return -(EINVAL); return snd_ioctl_return ((int *) arg, ((curr_tempo * curr_timebase) + 30) / 60); break; case SNDCTL_TMR_METRONOME: - metronome_mode = (int) get_user ((int *) arg); + get_user (metronome_mode, (int *) arg); setup_metronome (midi_dev); return 0; break; diff -u --recursive linux-2.1.5/drivers/sound/pas2_mixer.c linux/drivers/sound/pas2_mixer.c --- linux-2.1.5/drivers/sound/pas2_mixer.c Tue Aug 20 21:58:08 1996 +++ linux/drivers/sound/pas2_mixer.c Sat Oct 19 13:59:31 1996 @@ -218,8 +218,9 @@ if (cmd == SOUND_MIXER_PRIVATE1) /* Set loudness bit */ { - int level = get_user ((int *) arg); + int level; + get_user (level, (int *)arg); if (level == -1) /* Return current settings */ { if (mode_control & 0x04) @@ -240,8 +241,9 @@ if (cmd == SOUND_MIXER_PRIVATE2) /* Set enhance bit */ { - int level = get_user ((int *) arg); + int level; + get_user(level, (int *)arg); if (level == -1) /* Return current settings */ { if (!(mode_control & 0x03)) @@ -269,8 +271,9 @@ if (cmd == SOUND_MIXER_PRIVATE3) /* Set mute bit */ { - int level = get_user ((int *) arg); + int level; + get_user (level, (int *)arg); if (level == -1) /* Return current settings */ { return snd_ioctl_return ((int *) arg, @@ -292,9 +295,12 @@ if (((cmd >> 8) & 0xff) == 'M') { - if (_IOC_DIR (cmd) & _IOC_WRITE) - return snd_ioctl_return ((int *) arg, pas_mixer_set (cmd & 0xff, get_user ((int *) arg))); - else + if (_IOC_DIR (cmd) & _IOC_WRITE) { + int i; + + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, pas_mixer_set (cmd & 0xff, i)); + } else { /* * Read parameters */ diff -u --recursive linux-2.1.5/drivers/sound/pas2_pcm.c linux/drivers/sound/pas2_pcm.c --- linux-2.1.5/drivers/sound/pas2_pcm.c Tue Aug 20 21:58:08 1996 +++ linux/drivers/sound/pas2_pcm.c Sat Oct 19 14:01:38 1996 @@ -149,6 +149,7 @@ static int pas_audio_ioctl (int dev, unsigned int cmd, caddr_t arg, int local) { + int i; DEB (printk ("pas2_pcm.c: static int pas_audio_ioctl(unsigned int cmd = %X, unsigned int arg = %X)\n", cmd, arg)); switch (cmd) @@ -156,7 +157,8 @@ case SOUND_PCM_WRITE_RATE: if (local) return pcm_set_speed ((int) arg); - return snd_ioctl_return ((int *) arg, pcm_set_speed (get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, pcm_set_speed (i)); break; case SOUND_PCM_READ_RATE: @@ -168,13 +170,15 @@ case SNDCTL_DSP_STEREO: if (local) return pcm_set_channels ((int) arg + 1) - 1; - return snd_ioctl_return ((int *) arg, pcm_set_channels (get_user ((int *) arg) + 1) - 1); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, pcm_set_channels (i + 1) - 1); break; case SOUND_PCM_WRITE_CHANNELS: if (local) return pcm_set_channels ((int) arg); - return snd_ioctl_return ((int *) arg, pcm_set_channels (get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, pcm_set_channels (i)); break; case SOUND_PCM_READ_CHANNELS: @@ -186,7 +190,8 @@ case SNDCTL_DSP_SETFMT: if (local) return pcm_set_bits ((int) arg); - return snd_ioctl_return ((int *) arg, pcm_set_bits (get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, pcm_set_bits (i)); break; case SOUND_PCM_READ_BITS: @@ -197,9 +202,10 @@ case SOUND_PCM_WRITE_FILTER: /* * NOT YET IMPLEMENTED */ - if (get_user ((int *) arg) > 1) + get_user (i, (int *)arg); + if (i > 1) return -(EINVAL); - pcm_filter = get_user ((int *) arg); + pcm_filter = i; break; case SOUND_PCM_READ_FILTER: diff -u --recursive linux-2.1.5/drivers/sound/patmgr.c linux/drivers/sound/patmgr.c --- linux-2.1.5/drivers/sound/patmgr.c Sat Oct 19 14:11:43 1996 +++ linux/drivers/sound/patmgr.c Sat Oct 19 13:00:23 1996 @@ -104,7 +104,10 @@ if (mbox[dev] && msg_direction[dev] == A_TO_S) { +/* copy_to_user (&(buf)[0], (char *) mbox[dev], count); +*/ + copy_to_user(buf, (unsigned long)(mbox[dev]), count); msg_direction[dev] = 0; ok = 1; } diff -u --recursive linux-2.1.5/drivers/sound/sb_mixer.c linux/drivers/sound/sb_mixer.c --- linux-2.1.5/drivers/sound/sb_mixer.c Tue Aug 20 21:58:08 1996 +++ linux/drivers/sound/sb_mixer.c Sat Oct 19 13:00:23 1996 @@ -300,6 +300,7 @@ sb_mixer_ioctl (int dev, unsigned int cmd, caddr_t arg) { sb_devc *devc = mixer_devs[dev]->devc; + int i; if (((cmd >> 8) & 0xff) == 'M') { @@ -307,12 +308,14 @@ switch (cmd & 0xff) { case SOUND_MIXER_RECSRC: - return snd_ioctl_return ((int *) arg, set_recmask (devc, get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, set_recmask (devc, i)); break; default: - return snd_ioctl_return ((int *) arg, sb_mixer_set (devc, cmd & 0xff, get_user ((int *) arg))); + get_user (i, (int *)arg); + return snd_ioctl_return ((int *) arg, sb_mixer_set (devc, cmd & 0xff, i)); } else switch (cmd & 0xff) diff -u --recursive linux-2.1.5/drivers/sound/sequencer.c linux/drivers/sound/sequencer.c --- linux-2.1.5/drivers/sound/sequencer.c Sat Oct 19 14:11:43 1996 +++ linux/drivers/sound/sequencer.c Sat Oct 19 13:00:23 1996 @@ -1518,6 +1518,7 @@ { int midi_dev, orig_dev; int mode = file->mode & O_ACCMODE; + int i; orig_dev = dev = dev >> 4; @@ -1544,7 +1545,7 @@ if (seq_mode != SEQ_2) return -(EINVAL); - pending_timer = get_user ((int *) arg); + get_user (pending_timer, (int *)arg); if (pending_timer < 0 || pending_timer >= num_sound_timers) { @@ -1591,7 +1592,7 @@ */ return -(EIO); - midi_dev = get_user ((int *) arg); + get_user (midi_dev, (int *)arg); if (midi_dev >= max_mididev) return -(ENXIO); @@ -1639,7 +1640,8 @@ if (seq_mode == SEQ_2) return tmr->ioctl (tmr_no, cmd, arg); - if (get_user ((int *) arg) != 0) + get_user (i, (int *)arg); + if (i != 0) return -(EINVAL); return snd_ioctl_return ((int *) arg, HZ); @@ -1649,7 +1651,7 @@ { int err; - dev = get_user ((int *) arg); + get_user (dev, (int *) arg); if (dev < 0 || dev >= num_synths) { return -(ENXIO); @@ -1678,8 +1680,9 @@ case SNDCTL_SYNTH_MEMAVL: { - int dev = get_user ((int *) arg); + int dev; + get_user (dev, (int *)arg); if (dev < 0 || dev >= num_synths) return -(ENXIO); @@ -1692,8 +1695,9 @@ case SNDCTL_FM_4OP_ENABLE: { - int dev = get_user ((int *) arg); + int dev; + get_user (dev, (int *)arg); if (dev < 0 || dev >= num_synths) return -(ENXIO); @@ -1833,8 +1837,9 @@ case SNDCTL_SEQ_THRESHOLD: { - int tmp = get_user ((int *) arg); + int tmp; + get_user (tmp, (int *)arg); if (dev) /* * Patch manager */ @@ -1851,8 +1856,9 @@ case SNDCTL_MIDI_PRETIME: { - int val = get_user ((int *) arg); + int val; + get_user (val, (int *)arg); if (val < 0) val = 0; diff -u --recursive linux-2.1.5/drivers/sound/sound_timer.c linux/drivers/sound/sound_timer.c --- linux-2.1.5/drivers/sound/sound_timer.c Tue Aug 20 21:58:08 1996 +++ linux/drivers/sound/sound_timer.c Sat Oct 19 13:00:23 1996 @@ -190,6 +190,8 @@ timer_ioctl (int dev, unsigned int cmd, caddr_t arg) { + int i; + switch (cmd) { case SNDCTL_TMR_SOURCE: @@ -214,8 +216,9 @@ case SNDCTL_TMR_TIMEBASE: { - int val = get_user ((int *) arg); + int val; + get_user (val, (int *)arg); if (val) { if (val < 1) @@ -231,8 +234,9 @@ case SNDCTL_TMR_TEMPO: { - int val = get_user ((int *) arg); + int val; + get_user (val, (int *)arg); if (val) { if (val < 8) @@ -251,7 +255,8 @@ break; case SNDCTL_SEQ_CTRLRATE: - if (get_user ((int *) arg) != 0) /* Can't change */ + get_user (i, (int *)arg); + if (i != 0) /* Can't change */ return -(EINVAL); return snd_ioctl_return ((int *) arg, ((curr_tempo * curr_timebase) + 30) / 60); diff -u --recursive linux-2.1.5/drivers/sound/sys_timer.c linux/drivers/sound/sys_timer.c --- linux-2.1.5/drivers/sound/sys_timer.c Tue Aug 20 21:58:09 1996 +++ linux/drivers/sound/sys_timer.c Sat Oct 19 13:00:23 1996 @@ -189,6 +189,8 @@ def_tmr_ioctl (int dev, unsigned int cmd, caddr_t arg) { + int i; + switch (cmd) { case SNDCTL_TMR_SOURCE: @@ -213,8 +215,9 @@ case SNDCTL_TMR_TIMEBASE: { - int val = get_user ((int *) arg); + int val; + get_user (val, (int *) arg); if (val) { if (val < 1) @@ -230,8 +233,9 @@ case SNDCTL_TMR_TEMPO: { - int val = get_user ((int *) arg); + int val; + get_user (val, (int *) arg); if (val) { if (val < 8) @@ -249,7 +253,8 @@ break; case SNDCTL_SEQ_CTRLRATE: - if (get_user ((int *) arg) != 0) /* Can't change */ + get_user (i, (int *)arg); + if (i != 0) /* Can't change */ return -(EINVAL); return snd_ioctl_return ((int *) arg, ((curr_tempo * curr_timebase) + 30) / 60); diff -u --recursive linux-2.1.5/include/asm-i386/segment.h linux/include/asm-i386/segment.h --- linux-2.1.5/include/asm-i386/segment.h Sat Oct 19 14:12:18 1996 +++ linux/include/asm-i386/segment.h Sat Oct 19 12:50:03 1996 @@ -147,8 +147,9 @@ #define copy_to_user(to,from,n) ({ \ unsigned long __cu_to = (unsigned long) (to); \ unsigned long __cu_size = (unsigned long) (n); \ +unsigned long __cu_from = (unsigned long) (from); \ if (__cu_size && __access_ok(VERIFY_WRITE, __cu_to, __cu_size)) \ -__copy_user(__cu_to,from,__cu_size); \ +__copy_user(__cu_to,__cu_from,__cu_size); \ __cu_size; }) #define copy_from_user(to,from,n) ({ \ diff -u --recursive linux-2.1.5/net/ipx/af_ipx.c linux/net/ipx/af_ipx.c --- linux-2.1.5/net/ipx/af_ipx.c Sat Oct 19 14:11:56 1996 +++ linux/net/ipx/af_ipx.c Sat Oct 19 13:47:46 1996 @@ -1087,12 +1087,14 @@ err=verify_area(VERIFY_READ,arg,sizeof(char)); if(err) return err; - return ipxcfg_set_auto_create(get_fs_byte(arg)); + get_user(i, arg); + return ipxcfg_set_auto_create(i); case SIOCAIPXPRISLT: err=verify_area(VERIFY_READ,arg,sizeof(char)); if(err) return err; - return ipxcfg_set_auto_select(get_fs_byte(arg)); + get_user(i, arg); + return ipxcfg_set_auto_select(i); default: return -EINVAL; } @@ -1626,7 +1628,7 @@ err=verify_area(VERIFY_READ,optval,sizeof(int)); if(err) return err; - opt=get_fs_long((unsigned long *)optval); + get_user(opt, (unsigned long *)optval); switch(level) {

--------------7AC127314729B026253EEEC9--