[Asterisk-Users] Serious memory leak in asterisk (manager)

Roy Sigurd Karlsbakk roy at karlsbakk.net
Sun Mar 2 09:10:35 MST 2003


hi

running valgrind 1.9.4, I got this ...

*CLI> stop now
Beginning asterisk shutdown....
Asterisk cleanly ending (0).
WARNING[2]: File asterisk.c, Line 183 (listener): Accept retured -1: 
Bad file descriptor
==24801==
==24801== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 613 from 
4)
==24801==
==24801== 1 errors in context 1 of 3:
==24801== Conditional jump or move depends on uninitialised value(s)
==24801==    at 0x41961A12: load_module (chan_capi.c:97)
==24801==    by 0x8054117: ast_load_resource (loader.c:272)
==24801==    by 0x8054372: load_modules (loader.c:318)
==24801==    by 0x807BF04: main (asterisk.c:1290)
==24801==
==24801== 1 errors in context 2 of 3:
==24801== Conditional jump or move depends on uninitialised value(s)
==24801==    at 0x41961890: load_module (chan_capi.c:97)
==24801==    by 0x8054117: ast_load_resource (loader.c:272)
==24801==    by 0x8054372: load_modules (loader.c:318)
==24801==    by 0x807BF04: main (asterisk.c:1290)
==24801==
==24801== 1 errors in context 3 of 3:
==24801== Syscall param ioctl(generic) contains unaddressable byte(s)
==24801==    at 0x420E12C4: __ioctl (in /lib/i686/libc-2.2.5.so)
==24801==    by 0x419617D7: load_module (chan_capi.c:1844)
==24801==    by 0x8054117: ast_load_resource (loader.c:272)
==24801==    by 0x8054372: load_modules (loader.c:318)
==24801==    Address 0x0 is not stack'd, malloc'd or free'd
--24801--
--24801-- supp:  374 
_dl_relocate_object*/dl_open_worker/_dl_catch_error*(Cond)
--24801-- supp:  111 __pthread_mutex_unlock/_IO_funlockfile
--24801-- supp:  106 
pthread_error/__pthread_mutex_destroy/_IO_default_finish
--24801-- supp:   22 pthread_error/__pthread_mutex_destroy/__closedir
==24801==
==24801== IN SUMMARY: 3 errors from 3 contexts (suppressed: 613 from 4)
==24801==
==24801== malloc/free: in use at exit: 334220 bytes in 2935 blocks.
==24801== malloc/free: 10547 allocs, 7612 frees, 1296366 bytes 
allocated.
==24801==
==24801== searching for pointers to 2935 not-freed blocks.
==24801== checked 9176212 bytes.
==24801==
==24801== 12 bytes in 3 blocks are definitely lost in loss record 3 of 
76
==24801==    at 0x40166220: malloc (vg_clientfuncs.c:100)
==24801==    by 0x80555DC: __ast_load (config.c:290)
==24801==    by 0x805579A: ast_load (config.c:323)
==24801==    by 0x41338213: load_module (cdr_mysql.c:99)
==24801==
==24801== 20 bytes in 1 blocks are definitely lost in loss record 7 of 
76
==24801==    at 0x40166220: malloc (vg_clientfuncs.c:100)
==24801==    by 0x8087DC0: node__get (key.c:463)
==24801==    by 0x808798C: key_add (key.c:209)
==24801==    by 0x8088442: map_init_meta (map.c:1014)
==24801==
==24801== 77 bytes in 11 blocks are definitely lost in loss record 20 
of 76
==24801==    at 0x40166220: malloc (vg_clientfuncs.c:100)
==24801==    by 0x42080A2B: __strdup (in /lib/i686/libc-2.2.5.so)
==24801==    by 0x807A461: cli_prompt (asterisk.c:693)
==24801==    by 0x8089137: prompt_print (prompt.c:99)
==24801==
==24801== 96 bytes in 6 blocks are definitely lost in loss record 22 of 
76
==24801==    at 0x40166220: malloc (vg_clientfuncs.c:100)
==24801==    by 0x8073F1F: ast_append_ha (acl.c:51)
==24801==    by 0x4224392C: ??? (chan_iax.c:4452)
==24801==    by 0x42244785: set_config (chan_iax.c:4660)
==24801==
==24801== 96 bytes in 1 blocks are definitely lost in loss record 23 of 
76
==24801==    at 0x40166220: malloc (vg_clientfuncs.c:100)
==24801==    by 0x808B797: term_init (term.c:342)
==24801==    by 0x8087004: el_init (el.c:82)
==24801==    by 0x807AAF5: ast_el_initialize (asterisk.c:873)
==24801==
==24801== 388 bytes in 1 blocks are definitely lost in loss record 36 
of 76
==24801==    at 0x40166220: malloc (vg_clientfuncs.c:100)
==24801==    by 0x41960E8C: ??? (chan_capi.c:1597)
==24801==    by 0x4021F61B: thread_wrapper (vg_libpthread.c:667)
==24801==    by 0x4016BF4F: (within /usr/local/lib/valgrind/valgrind.so)
==24801==
==24801== 1304 bytes in 2 blocks are definitely lost in loss record 48 
of 76
==24801==    at 0x40166220: malloc (vg_clientfuncs.c:100)
==24801==    by 0x43530EBD: gsm_create (in 
/usr/lib/asterisk/modules/codec_gsm.so)
==24801==    by 0x805B9B7: calc_cost (translate.c:222)
==24801==    by 0x805BE1B: ast_register_translator (translate.c:302)
==24801==
==24801== LEAK SUMMARY:
==24801==    definitely lost: 1993 bytes in 25 blocks.
==24801==    possibly lost:   0 bytes in 0 blocks.
==24801==    still reachable: 332227 bytes in 2910 blocks.
==24801==         suppressed: 0 bytes in 0 blocks.
==24801== Reachable blocks (those to which a pointer was found) are not 
shown.
==24801== To see them, rerun with: --show-reachable=yes
==24801==
--24801--     TT/TC: 0 tc sectors discarded.
--24801--            11788 chainings, 0 unchainings.
--24801-- translate: new     18517 (325727 -> 4243096; ratio 130:10)
--24801--            discard 0 (0 -> 0; ratio 0:10).
--24801--  dispatch: 15300000 jumps (bb entries), of which 1417467 (9%) 
were unchained.
--24801--            7295/200615 major/minor sched events.  23878 
tt_fast misses.
--24801-- reg-alloc: 2531 t-req-spill, 786142+24276 orig+spill uis, 
92302 total-reg-r.
--24801--    sanity: 6765 cheap, 271 expensive checks.
--24801--    ccalls: 93666 C calls, 59% saves+restores avoided (328480 
bytes)
--24801--            123669 args, avg 0.88 setup instrs each (28342 
bytes)
--24801--            0% clear the stack (280998 bytes)
--24801--            28717 retvals, 31% of reg-reg movs avoided (17578 
bytes)



On Sunday, Mar 2, 2003, at 15:24 Europe/Oslo, Roy Sigurd Karlsbakk 
wrote:

> hi all
>
> after getting some (or - a lot) of messages from nagios, claiming 
> asterisk
> to be down, I found this out...
>
> astping xxx times repeatedly, and the manager fails to start. this 
> little
> script was used for testing. below, I've pasted the output from 'ps 
> axfv' before and after the DoS, showing asterisk having allocated ~2GB 
> RAM.
>
> roy
>
> #!/usr/bin/perl -w
> use strict;
> my $i = 0;
> while (1) {
>         $i++;
>         system("astping pbx");
>         if ($? != 0) {
>                 printf("asterisk crashed after %d astpings\n", $i);
>                 exit;
>         }
> }
>
>
> ------ ps axfv before DoS
> 14917 ?        S      0:00     60   254  2825 1544  0.6 SCREEN
> 14918 pts/3    S      0:00    302   505  2114 1008  0.3  \_ /bin/bash
> 15517 pts/3    S      0:02   8023   404 91615 4800  1.8      \_ 
> asterisk -vvvcg
>  6062 pts/3    S      0:00      1   404 91615 4800  1.8          \_ 
> asterisk -vv
>  6063 pts/3    S      0:00      1   404 91615 4800  1.8              
> \_ asterisk
>  6064 pts/3    S      0:00      1   404 91615 4800  1.8              
> \_ asterisk
>  6066 pts/3    S      0:00      0   404 91615 4800  1.8              
> \_ asterisk
>  6067 pts/3    S      0:00      0   404 91615 4800  1.8              
> \_ asterisk
>  6068 pts/3    S      0:00      0   404 91615 4800  1.8              
> \_ asterisk
>  6069 pts/3    S      0:00      1   404 91615 4800  1.8              
> \_ asterisk
>  6071 pts/3    S      0:00      0   404 91615 4800  1.8              
> \_ asterisk
>  6072 pts/3    S      0:00      0   404 91615 4800  1.8              
> \_ asterisk
>  6073 pts/3    S      0:00      0   404 91615 4800  1.8              
> \_ asterisk
>  6074 pts/3    S      0:00      0   404 91615 4800  1.8              
> \_ asterisk
>  6075 pts/3    S      0:00      0   404 91615 4800  1.8              
> \_ asterisk
>
> -------- ps axfv after DoS
> 14917 ?        S      0:00     60   254  2825 1544  0.6 SCREEN
> 14918 pts/3    S      0:00    302   505  2114 1008  0.3  \_ /bin/bash
> 15517 pts/3    S      0:02   8023   404 2090463 7744  3.0      \_ 
> asterisk -vvvc
>  6062 pts/3    S      0:00      4   404 2090463 7744  3.0          \_ 
> asterisk -
>  6063 pts/3    S      0:00      1   404 2090463 7744  3.0              
> \_ asteri
>  6064 pts/3    S      0:00      1   404 2090463 7744  3.0              
> \_ asteri
>  6066 pts/3    S      0:00      0   404 2090463 7744  3.0              
> \_ asteri
>  6067 pts/3    S      0:00      0   404 2090463 7744  3.0              
> \_ asteri
>  6068 pts/3    S      0:00      0   404 2090463 7744  3.0              
> \_ asteri
>  6069 pts/3    S      0:00      1   404 2090463 7744  3.0              
> \_ asteri
>  6071 pts/3    S      0:00      0   404 2090463 7744  3.0              
> \_ asteri
>  6072 pts/3    S      0:00      0   404 2090463 7744  3.0              
> \_ asteri
>  6073 pts/3    S      0:00      0   404 2090463 7744  3.0              
> \_ asteri
>  6074 pts/3    S      0:00      0   404 2090463 7744  3.0              
> \_ asteri
>  6075 pts/3    S      0:00      0   404 2090463 7744  3.0              
> \_ asteri
>
> _______________________________________________
> Asterisk-Users mailing list
> Asterisk-Users at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-users




More information about the asterisk-users mailing list