Date: Sun, 5 Sep 1999 20:46:44 -0400 (EDT) From: aa8vb@ipass.net To: FreeBSD-gnats-submit@freebsd.org Cc: aa8vb@ipass.net Subject: kern/13587: Voxware MIXER_READ ioctl corrupts memory Message-ID: <199909060046.UAA13229@stealth.ipass.net.>
next in thread | raw e-mail | index | archive | help
>Number: 13587
>Category: kern
>Synopsis: Voxware MIXER_READ ioctl corrupts memory
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sun Sep 5 17:50:01 PDT 1999
>Closed-Date:
>Last-Modified:
>Originator: Randall Hopper
>Release: FreeBSD 3.2-RELEASE i386
>Organization:
self
>Environment:
Stock 3.2-RELEASE. Voxware sound drivers. Sound Blaster 32.
controller snd0
device pas0 at isa? port 0x388 irq 10 drq 3
device sb0 at isa? port 0x220 irq 5 drq 1
device sbxvi0 at isa? drq 5
device sbmidi0 at isa? port 0x330
device opl0 at isa? port 0x388
device awe0 at isa? port 0x620
>Description:
int stomp_me = 0x12345678;
unsigned char vol[2];
ioctl( mixer_fd, MIXER_READ( SOUND_MIXER_LINE ), vol )
The ioctl overwrites the lower two bytes of 'stomp_me'. This is
how Linux apps like xmix declare vol, so apparently this is a bug
in our Voxware drivers. xmix may be saved from memory corruption
only by the structure alignment policy of FreeBSD.
>How-To-Repeat:
The output of the following program is:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <machine/soundcard.h>
#include <assert.h>
int main( int argc, char *argv[] )
{
int mixer_fd, ret, ctrls;
int stomp_me = 0x12345678;
unsigned char vol[2];
mixer_fd = open( "/dev/mixer0", O_RDWR, 0 );
assert( mixer_fd >= 0 );
ret = ioctl( mixer_fd, SOUND_MIXER_READ_DEVMASK, &ctrls );
assert( ret >= 0 );
assert( ctrls & SOUND_MASK_LINE );
ret = ioctl( mixer_fd, MIXER_READ( SOUND_MIXER_LINE ), vol );
assert( ret >= 0 );
printf( "Volume is %d,%d\n", vol[0], vol[1] );
if ( stomp_me != 0x12345678 ) {
fprintf( stderr, "\n\nWhooah! Sound ioctl() stomped memory!\n"
"Value was 0x12345678, now it's 0x%.8x\n",
stomp_me );
exit(1);
}
close( mixer_fd );
return 0;
}
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199909060046.UAA13229>
