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