[asterisk-dev] (unreported) uninitialized: struct ast_sockaddr

Joshua Colp jcolp at digium.com
Mon May 11 08:44:28 CDT 2015


Alexander Traud wrote:
> In a patch of mine (DANE for Asterisk 13/chan_sip; available on request), a
> char* was added in the struct ast_sockaddr to store the DNSSEC failure
> reason (why_bogus). Not to create any memory leaks, this pointer has to be
> freed. For this, the pointer must be initialized to NULL, for example via
> struct ast_sockaddr variable_name = { 0 }. Otherwise, I create a
> segmentation fault because I free a non-valid address. Long story short:
>
> Neither GCC nor Clang are able to find uninitialized structs in Asterisk,
> although the warning flag -Wall includes -Wuninitialized. And I played
> around with the optimization in CFLAG. Mhm.
>
> What shall I do?
> A) Init all ast_sockaddr (and all structures containing ast_sockaddr).
>     With the default sample configuration, just 5 files must be changed.
> However, I searched with the regular expression "struct [^ ]+ [^*=)]+;" and
> found 2408 lines of code in 418 files which may be uninitialized. As an
> external project member, I cannot change/commit all of them. For a start,
> shall I create issue report just about these 5 files?
>
> B) Change my patch not to use a char* but char[128].

Your easiest option with less chance of regression elsewhere would be this.

-- 
Joshua Colp
Digium, Inc. | Senior Software Developer
445 Jan Davis Drive NW - Huntsville, AL 35806 - US
Check us out at: www.digium.com & www.asterisk.org



More information about the asterisk-dev mailing list