malloc calls and ioctl calls to soundcard cause segfault

Dan Nelson dnelson at allantgroup.com
Wed Oct 13 14:00:52 PDT 2004


In the last episode (Oct 14), Shawn Webb said:
> I've got to rewrite the source due to hard disk problems, so I'll just put
> it in this email:
> 
>     arg = FORMAT;
>     if (ioctl(fd, SNDCTL_DSP_SETFMT, &arg) < 0)
>     {
>         perror("ioctl setfmt");
>         exit(1);
>     }
> 
>     if (ioctl(fd, SNDCTL_DSP_GETOSPACE, &arg) < 0)
>     {
>         perror("ioctl getospace");
>         exit(1);
>     }

SNDCTL_DSP_GETOSPACE takes a pointer to an "audio_buf_info" type, so
you actually asked it to write sizeof(audio_buf_info) bytes to the
location of the "arg" variable, which is... (drumroll)

on the stack :)

Create another variable "audio_buf_info info;" above main, and change
that call to "if (ioctl(fd, SNDCTL_DSP_GETOSPACE, &info) < 0)" and your
program will run fine.

-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-hackers mailing list