[asterisk-dev] chan_sip.c: realtime_peer function make crash on version 1.4.19 and 1.6.0Beta7.1

Adrian A adrianvoip at gmail.com
Sun Apr 6 15:42:57 CDT 2008


I can confirm this similar crash as well on my system after upgrading to
1.4.19 from 1.4.18.1. As soon as I dial voicemail, I hear "Password?" then
system crashes. I think this crash is currently tracked at
http://bugs.digium.com/view.php?id=12362

I've reverted back to 1.4.18 but was looking forward to no more "clicks" in
the voicemail prompts which was supposed to be fixed in 1.4.19.


On Sat, Apr 5, 2008 at 9:46 AM, Germán Aracil Boned <german at tecnoxarxa.com>
wrote:

> I rewrite this line:
>
> if (!strcasecmp(var->name, "host")) {
>                  ^^^
>
> Prior was:
>
> if (!strcasecmp(tmp->name, "host")) {
>                  ^^^
>
> And reported "bug": http://bugs.digium.com/view.php?id=12372
>
> thank to all !
>
> Germán Aracil Boned escribió:
> > Hello
> >
> > This is my problem (1.4.19):
> >
> > Core was generated by `/usr/sbin/asterisk -f -p -g -c'.
> > Program terminated with signal 11, Segmentation fault.
> > #0  0xb7653a80 in realtime_peer (newpeername=0xbfede360 "Tecnoxarxa0",
> > sin=0x0) at chan_sip.c:2547
> >
> > warning: Source file is more recent than executable.
> > 2547                                                    if (!(hp =
> > ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr,
> > &sin->sin_addr, sizeof(hp->h_addr)))) {
> > (gdb) bt
> > #0  0xb7653a80 in realtime_peer (newpeername=0xbfede360 "Tecnoxarxa0",
> > sin=0x0) at chan_sip.c:2547
> > #1  0xb7654585 in find_peer (peer=0xbfede360 "Tecnoxarxa0", sin=0x0,
> > realtime=1) at chan_sip.c:2676
> > #2  0xb76967ad in sip_devicestate (data=0xbfede804) at chan_sip.c:15896
> > #3  0x080a0a5a in ast_device_state (device=0xbfede894 "SIP/Tecnoxarxa0")
> > at devicestate.c:170
> > #4  0x080d4aa1 in ast_extension_state2 (e=0x84bd618) at pbx.c:1931
> > #5  0x080d5519 in ast_add_hint (e=0x84bd618) at pbx.c:2209
> > #6  0x080dc4eb in ast_add_extension2 (con=0x84bd3d0, replace=0,
> > extension=0xbfedfa14 "200", priority=-1, label=0x0, callerid=0x0,
> > application=0x841cb69 "SIP/Tecnoxarxa0", data=0x841cbf0,
> > datad=0xb71c0398 <ast_free>,
> >      registrar=0xb71c8363 "pbx_config") at pbx.c:4869
> > #7  0xb71c75af in pbx_load_config (config_file=0xb71c8353
> > "extensions.conf") at pbx_config.c:2306
> > #8  0xb71c811f in pbx_load_module () at pbx_config.c:2453
> > #9  0xb71c81a6 in load_module () at pbx_config.c:2470
> > #10 0x080bfd2d in load_resource (resource_name=0x81bdef8
> > "pbx_config.so", global_symbols_only=0) at loader.c:680
> > #11 0x080c05d3 in load_modules (preload_only=0) at loader.c:874
> > #12 0x08072fc1 in main (argc=5, argv=0xbfee0444) at asterisk.c:2965
> > #13 0xb7df8ea8 in __libc_start_main () from /lib/tls/libc.so.6
> > #14 0x08057d51 in ?? () at ../sysdeps/i386/elf/start.S:119
> >
> >
> > This is a 1.4.18.1 version for this funcion working perfectly:
> >
> > static struct sip_peer *realtime_peer(const char *newpeername, struct
> > sockaddr_in *sin)
> >
> > ....
> >
> > if (var) {
> >       for (tmp = var; tmp; tmp = tmp->next) {
> >               if (!strcasecmp(var->name, "host")) {
> >                       struct in_addr sin2;
> >                          struct ast_dnsmgr_entry *dnsmgr = NULL;
> >                          memset(&sin2, 0, sizeof(sin2));
> >                          if ((ast_dnsmgr_lookup(tmp->value, &sin2,
> > &dnsmgr) < 0) || (memcmp(&sin2, &sin->sin_addr, sizeof(sin2)) != 0)) {
> >                               /* No match */
> >                               ast_variables_destroy(var);
> >                                  var = NULL;
> >                          }
> >                          break;
> >                  }
> >          }
> > }
> >
> > ....
> >
> > And this is a 1.4.19 version extract:
> >
> > static struct sip_peer *realtime_peer(const char *newpeername, struct
> > sockaddr_in *sin)
> >
> > ....
> >
> > if (var) {
> >       for (tmp = var; tmp; tmp = tmp->next) {
> >               if (!strcasecmp(tmp->name, "host")) {
> >                       struct hostent *hp;
> >                          struct ast_hostent ahp;
> >                          if (!(hp = ast_gethostbyname(tmp->value, &ahp))
> > || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) {
> >                               /* No match */
> >                               ast_variables_destroy(var);
> >                               var = NULL;
> >                          }
> >                          break;
> >                  }
> >          }
> > }
> >
> > ....
> >
> > I think the problem is this new line:
> >
> > if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr,
> > &sin->sin_addr, sizeof(hp->h_addr))))
> >
> > This is a bug ? What is the best solution ?
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > --Bandwidth and Colocation Provided by http://www.api-digital.com--
> >
> > asterisk-dev mailing list
> > To UNSUBSCRIBE or update options visit:
> >    http://lists.digium.com/mailman/listinfo/asterisk-dev
> >
>
> _______________________________________________
> --Bandwidth and Colocation Provided by http://www.api-digital.com--
>
> asterisk-dev mailing list
> To UNSUBSCRIBE or update options visit:
>   http://lists.digium.com/mailman/listinfo/asterisk-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-dev/attachments/20080406/3b4cb615/attachment.htm 


More information about the asterisk-dev mailing list