Re: panic inducing use of gwlist_extract_first in dlr_pgsql.c

Alan McNatty <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Organization Catalyst IT Limited
Message-ID <1313707354.2955.72.camel@eos>
Thanks Alex.

On Thu, 2011-08-18 at 12:08 +0200, Alexander Malysh wrote:
> Hi Alan,
> 
> unfortunately your patch is partially wrong, BUT thank you for spotting this BUG.
> I commited corrected patch to SVN but here are comments to your patch:
> 
>      if (result == NULL || gwlist_len(result) < 1) {
>          debug("dlr.pgsql", 0, "no rows found");
> -        while((row = gwlist_extract_first(result)))
> +        while(result && (row = gwlist_extract_first(result)) != NULL)
> 
> while loop doesn't make any sense here because result is ether NULL or just empty therefore no need to loop at all...
> 
>              gwlist_destroy(row, octstr_destroy_item);
>          gwlist_destroy(result, NULL);
>          return NULL;
> @@ -282,7 +282,8 @@
>          ret = atol(octstr_get_cstr(gwlist_get(gwlist_get(res, 0), 0)));
>      }
>  
> -    gwlist_destroy(gwlist_extract_first(res), octstr_destroy_item);
> +    if ( res != NULL ) 
> +      gwlist_destroy(gwlist_extract_first(res), octstr_destroy_item);
> 
> I put this inside else because there we know the list is not null...
> 
>      gwlist_destroy(res, NULL);
> 
> 
> Thanks,
> Alex
> 
> 
> Am 10.08.2011 um 06:51 schrieb Alan McNatty:
> 
> > Hi All,
> > 
> > I'm finding what I think is incorrect use of gwlist_extract_first in the
> > postgres dlr implementations (it may also exist in others - I've not
> > checked yet). The DLR methods issue 'error's when they fail to return
> > results, etc but subsequent calls to gwlist_extract_first on NULL lists
> > cause 'panic's.
> > 
> > What I'm testing is the situation when the DLR DB is available on
> > start-up (we panic if it is not). If during during normal operation the
> > database is shutdown or temporarily unavailable (network issue, etc).
> > The select fail is an error but results in a panic.
> > 
> > 2011-08-10 16:37:43 [18552] [3] ERROR: PGSQL: SELECT count(*) FROM
> > "dlr";
> > 2011-08-10 16:37:43 [18552] [3] ERROR: PGSQL: FATAL:  terminating
> > connection due to administrator command
> > server closed the connection unexpectedly
> > 	This probably means the server terminated abnormally
> > 	before or while processing the request.
> > 
> > 2011-08-10 16:37:43 [18552] [3] ERROR: PGSQL: Select failed!
> > 2011-08-10 16:37:43 [18552] [3] ERROR: PGSQL: Could not get count of DLR
> > table
> > 2011-08-10 16:37:43 [18552] [3] PANIC: gwlib/list.c:309:
> > gwlist_extract_first: Assertion `list != NULL' failed.
> > 2011-08-10 16:37:43 [18552] [3] PANIC: /usr/sbin/bearerbox(gw_panic
> > +0x14b) [0x48b55b]
> > 2011-08-10 16:37:43 [18552] [3]
> > PANIC: /usr/sbin/bearerbox(gwlist_extract_first+0x94) [0x489874]
> > 2011-08-10 16:37:43 [18552] [3] PANIC: /usr/sbin/bearerbox [0x41e3d3]
> > 2011-08-10 16:37:43 [18552] [3]
> > PANIC: /usr/sbin/bearerbox(bb_print_status+0x11d) [0x40edfd]
> > 2011-08-10 16:37:43 [18552] [3] PANIC: /usr/sbin/bearerbox [0x415075]
> > 2011-08-10 16:37:43 [18552] [3] PANIC: /usr/sbin/bearerbox [0x4823cf]
> > 2011-08-10 16:37:43 [18552] [3] PANIC: /lib/libpthread.so.0
> > [0x2b0e670a9fc7]
> > 2011-08-10 16:37:43 [18552] [3] PANIC: /lib/libc.so.6(clone+0x6d)
> > [0x2b0e67a8664d]
> > 
> > The attached patch addresses this (for postgres implementation only - I
> > can check the others if required). Once applied The result on the status
> > page is ..
> > 
> > DLR: -1 queued, using pgsql storage
> > 
> > And when a DLR is received ...
> > 
> > 2011-08-10 16:44:53 [18889] [11] ERROR: PGSQL: FATAL:  terminating
> > connection due to administrator command
> > server closed the connection unexpectedly
> > 	This probably means the server terminated abnormally
> > 	before or while processing the request.
> > 
> > 2011-08-10 16:44:53 [18889] [11] ERROR: PGSQL: Select failed!
> > 2011-08-10 16:44:53 [18889] [11] DEBUG: no rows found
> > 2011-08-10 16:44:53 [18889] [11] WARNING: DLR[pgsql]: DLR from SMSC<FOO>
> > for DST<02xxxxxxxxx> not found.
> > 2011-08-10 16:44:53 [18889] [11] ERROR: SMPP[FOO]: got DLR but could not
> > find message or was not interested in it id<534001841355>
> > dst<02xxxxxxxxx>, type<1>
> > 
> > Cheers,
> > Alan
> > <dlr_pgsql.c.patch>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.