[Freeswitch-dev] Switch_core_get_variable
Kevin Snow
kevin.snow at ooma.com
Thu Feb 3 00:48:40 MSK 2011
I can enter it into jira.
I¹m not sure if I agree with your assessment. There is already a mutex
lock/unlock around switch_core_get_variable¹s internals today, no additional
risk of deadlock. As for switch_channel_get_variable, which also has a mutex
of it¹s own, is already using switch_core_session_strdup before returning.
I¹m proposing the equivalent to switch_channel_get_variable_dup be added for
switch_core_get_variable. To me it seems we must have this if you want to
reliably read a variable that might change at runtime.
Kevin
On 2/2/11 12:01 PM, "Steven Ayre" <steveayre at gmail.com> wrote:
>> I found a hole in the way we handle core variables in FS.
>> Switch_core_get_variable does the lookup and returns the found pointer. In
>> Switch_core_set_variable the first step it does is look up the variable and
>> free it (if it exists). This would free it out from under another that has
>> just done a get on it. This is how I stumbled on this.
>
> The correct place to report bugs is the bug
> tracker: http://jira.freeswitch.org/
>
> It's a known problem. Basically the answer is you shouldn't really be changing
> core variables after FS has loaded, at least not while handling traffic. If
> you're doing so as part of your application, you're doing it wrong. mod_db is
> probably better suited to what you want to do.
>
>> Is the right fix is to add a switch_core_get_variable_dup that dups the
>> string while in the mutex protection? I realize in the core case this will
>> require the caller to then free the returned memory, but this is better than
>> getting a bad pointer. This is analogous to the switch_channel_get_variable
>> and it¹s _dup implementation, although it dups it to session memory.
>
> Just my 2 cents (I'm not a core developer)... That could be done. But it's
> also slower because it means dynamically assigning memory and then copying the
> string. And it can't be cached. And the mutex will make all calls block, not
> just the single call as with the channel variable - which might possibly
> introduce a risk of deadlock.
>
> -Steve
>
>
>
> On 2 February 2011 19:39, Kevin Snow <kevin.snow at ooma.com> wrote:
>>
>> I found a hole in the way we handle core variables in FS.
>> Switch_core_get_variable does the lookup and returns the found pointer. In
>> Switch_core_set_variable the first step it does is look up the variable and
>> free it (if it exists). This would free it out from under another that has
>> just done a get on it. This is how I stumbled on this.
>>
>> Is the right fix is to add a switch_core_get_variable_dup that dups the
>> string while in the mutex protection? I realize in the core case this will
>> require the caller to then free the returned memory, but this is better than
>> getting a bad pointer. This is analogous to the switch_channel_get_variable
>> and it¹s _dup implementation, although it dups it to session memory.
>>
>> Switch_channel_get_variable¹s ability to peak through to the core variables
>> is susceptible to this. If a core variable is changed after
>> switch_channel_get_variable looks it up but before it dups to the session
>> pool, it¹ll have a bad pointer.
>>
>> Kevin Snow
>> Ooma, Inc
>>
>> _______________________________________________
>> FreeSWITCH-dev mailing list
>> FreeSWITCH-dev at lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
>> http://www.freeswitch.org
>>
>
>
>
> _______________________________________________
> FreeSWITCH-dev mailing list
> FreeSWITCH-dev at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
> http://www.freeswitch.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-dev/attachments/20110202/7052eaed/attachment.html
More information about the FreeSWITCH-dev
mailing list