[alsa-devel] Segmentation Fault in snd_pcm_rate_hw_free()

Takashi Iwai tiwai at suse.de
Tue Aug 4 17:15:42 CEST 2015


On Tue, 04 Aug 2015 17:02:26 +0200,
Valentin Corfu wrote:
> 
> 
> 
> On 04.08.2015 17:53, Takashi Iwai wrote:
> > On Tue, 04 Aug 2015 16:08:30 +0200,
> > Valentin Corfu wrote:
> >> Hello ALSA developers,
> >>
> >> I observed one segmentation fault in snd_pcm_rate_hw_free() function,
> >> with the following BT:
> >>
> >> (gdb) up
> >> #1  0xb7554cc1 in raise (sig=6) at
> >> ../nptl/sysdeps/unix/sysv/linux/raise.c:64
> >> 64        return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);
> >> (gdb)
> >> #2  0xb75580ee in abort () at abort.c:92
> >> 92            raise (SIGABRT);
> >> (gdb)
> >> #3  0xb758a7dd in __libc_message (do_abort=2,
> >>       fmt=0xb766053c "*** glibc detected *** %s: %s: 0x%s ***\n")
> >>       at ../sysdeps/unix/sysv/linux/libc_fatal.c:189
> >> 189           abort ();
> >> (gdb)
> >> #4  0xb7594a71 in malloc_printerr (action=<value optimized out>,
> >>       str=<value optimized out>, ptr=0x969ae98) at malloc.c:6283
> >> 6283          __libc_message (action & 2,
> >> (gdb)
> >> #5  0xb759636b in _int_free (av=<value optimized out>, p=0x969ae90)
> >>       at malloc.c:4795
> >> 4795          malloc_printerr (check_action, errstr, chunk2mem(p));
> >> (gdb)
> >> #6  0xb75994bd in __libc_free (mem=0x969ae98) at malloc.c:3738
> >> 3738      _int_free(ar_ptr, p);
> >> (gdb)
> >> #7  0xb76f3a81 in snd_pcm_rate_hw_free (pcm=0x9685d78) at pcm_rate.c:341
> >> 341                     free(rate->pareas[0].addr);
> > Could you check the content of rate->pareas[0] via gdb?
> (gdb) frame 7
> #7  0xb76f3a81 in snd_pcm_rate_hw_free (pcm=0x9685d78) at pcm_rate.c:341
> 341                     free(rate->pareas[0].addr);
> (gdb) print rate->pareas[0]
> $1 = {addr = 0x969ae98, first = 0, step = 16}
> (gdb) print rate->pareas[0].addr
> $2 = (void *) 0x969ae98

And accessing to pareas[0].addr is OK?  This is a temporary sample
buffer allocated in alsa-lib rate plugin.


> >> (gdb)
> >> #8  0xb76d045b in snd_pcm_hw_free (pcm=0x9685d78) at pcm.c:858
> >> 858             err = pcm->ops->hw_free(pcm->op_arg);
> >> (gdb)
> >> #9  0xb76f826e in snd_pcm_plug_hw_free (pcm=0x96856b0) at pcm_plug.c:1046
> >> 1046            int err = snd_pcm_hw_free(slave);
> >> (gdb)
> >> #10 0xb76d045b in snd_pcm_hw_free (pcm=0x96856b0) at pcm.c:858
> >> 858             err = pcm->ops->hw_free(pcm->op_arg);
> >> (gdb)
> >> #11 0x080492ad in main ()
> >>
> >>
> >> Could you please give me some hints how to solve this issue?
> >>
> >> I can provide you more info or the test application, if needed.
> >> I can see the issue every time, and I also checked with latest version
> >> of alsa-lib but I got the same results.
> > I don't know of such an error, so far.
> > It smells like some memory corruption to me.
> >
> > If a test case is a simple code, tracking the bug would be easy...
> I have paste it here:
> http://pastebin.com/WJDTz6cE

It works fine on my system.  How is your PCM setup?  Does the same
problem occur for "plughw" PCM, too?  Also, no external PCM rate
plugin is involved?


Takashi


More information about the Alsa-devel mailing list