Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 Sep 2000 09:18:16 +0200 (CEST)
From:      Andre Albsmeier <andre.albsmeier@mchp.siemens.de>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/21073: PCM sound driver silently accepts improper parameters of SNDCTL_DSP_SETFMT
Message-ID:  <200009060718.e867IGj45601@curry.mchp.siemens.de>

next in thread | raw e-mail | index | archive | help

>Number:         21073
>Category:       kern
>Synopsis:       PCM sound driver silently accepts improper parameters of SNDCTL_DSP_SETFMT
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Sep 06 00:20:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Andre Albsmeier
>Release:        FreeBSD 4.1-STABLE i386
>Organization:
>Environment:

4.1-STABLE machine using the pcm driver on an AB AWE64:

andre@bali:~>cat /dev/sndstat 
FreeBSD Audio Driver (newpcm) Sep  2 2000 10:33:49
Installed devices:
pcm0: <SB DSP 4.16> at io 0x220 irq 5 drq 1:5 (1p/1r channels duplex)


>Description:

When setting a sound format with SNDCTL_DSP_SETFMT, the system call does not
tell us if an improper format was set.

>How-To-Repeat:

The following program demonstrates the error:

#include <stdio.h>   
#include <ctype.h>
#include <string.h>
#include <machine/soundcard.h>
#include <sys/time.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main( ) {

  int bits;
  int fd;

  if( (fd = open("/dev/dsp", O_RDONLY)) < 0 ) {
    fprintf( stderr, "Can't open /dev/dsp for read\n" );
    exit( 1 );
  }

  if( ioctl(fd, SNDCTL_DSP_GETFMTS, &bits) < 0 ) {
    fprintf( stderr, "SNDCTL_DSP_GETFMTS error\n" );
    exit( 1 );
  }
  
  printf( "GETFMTS: 0x%X\n", bits );
    
  bits = 0x10;
  if( ioctl(fd, SNDCTL_DSP_SETFMT, &bits) < 0 ) {
    fprintf( stderr, "SNDCTL_DSP_SETFMT error\n" );
    exit( 1 );
  }

  printf( "After setting 0x10 with SETFMT: 0x%X\n", bits );

  return( 0 );
}


andre@bali:~>./sndcheck 
GETFMTS: 0x10000008
After setting 0x10 with SETFMT: 0x10

So the AWE64 only supports AFMT_U8 in STEREO. Now we set AFMT_S16_LE
but there is no error returned neither was the bits variable modified
as it was the case in voxware.


>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?200009060718.e867IGj45601>