[asterisk-dev] [Code Review] automagically set a pointer to null after it is freed with ast_free
rmudgett
reviewboard at asterisk.org
Thu Sep 15 18:20:25 CDT 2011
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/1441/#review4344
-----------------------------------------------------------
trunk/include/asterisk/astmm.h
<https://reviewboard.asterisk.org/r/1441/#comment8462>
You should leave this as two lines. Max suggested line length in the guidelines is 90.
trunk/main/ccss.c
<https://reviewboard.asterisk.org/r/1441/#comment8457>
Oops cut and paste inadvertent change error. First should be failure_data->device_name
trunk/main/config.c
<https://reviewboard.asterisk.org/r/1441/#comment8460>
Since this is an ao2 destructor callback, the o type does not need to be be const.
trunk/main/frame.c
<https://reviewboard.asterisk.org/r/1441/#comment8458>
How about putting the calculated address into a temporary pointer for the macro to set to NULL.
trunk/res/res_agi.c
<https://reviewboard.asterisk.org/r/1441/#comment8461>
A temporary variable could come to the rescue here as well. However, it does undo the purpose of your patch in this instance.
char *doomed;
doomed = (char *) e->summary;
ast_free(doomed);
...
Also ast_free must be used if ast_malloc/ast_calloc/ast_strdup was used because if MALLOC_DEBUG is enabled, ast_free does not degenerate to free anymore.
- rmudgett
On Sept. 15, 2011, 5:14 p.m., schmidts wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/1441/
> -----------------------------------------------------------
>
> (Updated Sept. 15, 2011, 5:14 p.m.)
>
>
> Review request for Asterisk Developers and David Vossel.
>
>
> Summary
> -------
>
> first of all, this is just an idea so be friendly ;)
>
> i have thought about setting a pointer to NULL after it is freed to
> avoid segfaults and double free corruptions.
>
> the most important change is to replace the define of ast_free to a
> macro which just looks like this:
>
> #define ast_free(x) ({ free((void *)x); x = NULL; })
>
> and also to keep it working proberly change the define of ast_free_ptr
> to free instead of ast_free.
>
> the same change happens in astmm.h for malloc debugging calls:
>
> #define ast_free(a) ({ __ast_free((void *) a,__FILE__, __LINE__, __PRETTY_FUNCTION__); a = NULL; })
>
> after doing this changes i have seen a lot of places where a pointer is
> cast at the ast_free call to remove the const state of it.
> you can see in the diff all this places where this happens but i think
> just cast it into void within the macro makes more sense.
> because of this small changes the diff is so big, but its the same change on every part of it, except utils.h and astmm.h
>
> only on three places i dont know how to handle this things:
> in res_agi.c i had to replace ast_free with free to make it compile, i am sure there would be another way to solve this but i need some help with this.
> in config.c i have the same problem like in res_agi.c
>
> format_cap.c is allready cleared with dvossel
>
>
> Diffs
> -----
>
> trunk/apps/app_dial.c 336161
> trunk/apps/app_voicemail.c 336161
> trunk/channels/chan_sip.c 336161
> trunk/include/asterisk/astmm.h 336161
> trunk/include/asterisk/utils.h 336161
> trunk/main/ccss.c 336161
> trunk/main/config.c 336161
> trunk/main/datastore.c 336161
> trunk/main/event.c 336161
> trunk/main/features.c 336161
> trunk/main/frame.c 336161
> trunk/main/indications.c 336161
> trunk/main/taskprocessor.c 336161
> trunk/res/res_agi.c 336161
>
> Diff: https://reviewboard.asterisk.org/r/1441/diff
>
>
> Testing
> -------
>
> it compiles with and without MALLOC_DEBUG,
> it starts
> and it do what it should do, the pointer is set to NULL after ast_free
>
>
> Thanks,
>
> schmidts
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20110915/48b39335/attachment-0001.htm>
More information about the asterisk-dev
mailing list