[Click] [PATCH] do not access deleted timers

Eddie Kohler kohler at cs.ucla.edu
Mon Apr 13 16:23:40 EDT 2009


Great!  Thanks very much.  Your patch is applied.

Eddie


Nadi Sarrar wrote:
> Hi Eddie,
> 
>> [..] Please try
>>
>> http://www.read.cs.ucla.edu/gitweb?p=click;a=commit;h=91470b0740c7a019680b9362f15cdab96f7b08c0
>>
>> and let me know if you still have problems.
> 
> Actually, yes, the attached patch fixes it. You forgot to set _schedpos1 to zero
> when running timers from the runchunk list, which makes Click crash because in
> Timer::unschedule(), an invalid access to the runchunk list may happen.
> 
> Thanks for fixing this in Click so fast!
> 
> Nadi
> 
> 
> On Sun, Apr 12, 2009 at 06:18:06PM -0700, Eddie Kohler wrote:
>> Hi Nadi,
>>
>> Great find, and thanks very much for the fix!  We don't tend to use Click 
>> with highly dynamic timer sets, so bugs are still around.  Your code looks 
>> good, but unhappy with the extra char allocations, I tried to fix it in a 
>> different way.  Please try
>>
>> http://www.read.cs.ucla.edu/gitweb?p=click;a=commit;h=91470b0740c7a019680b9362f15cdab96f7b08c0
>>
>> and let me know if you still have problems.  Again, thanks for the 
>> debugging and patch.
>>
>> Eddie
>>
>>
>> Nadi Sarrar wrote:
>>> Hi,
>>>
>>> a problem with the current timer implementation in Click leads to 
>>> execution of
>>> unscheduled timers or access to already deleted timers, which can result 
>>> in any
>>> kind of unexpected behavior including segmentation faults at unrelated code
>>> sections, which made it fun to debug :) Possible patch attached.
>>>
>>> The problem occurs only under certain conditions:
>>>
>>>  1) A lot of timers (more than max_timers = 64) must be used that are
>>>     scheduled with close expiration times.
>>>  2) Timer handler functions delete (or unschedule) other timers.
>>>  3) High load helps to trigger this bug fast.
>>>
>>> The problematic code section is in Master::run_timers(), right after the 
>>> usual
>>> handling of scheduled timers. There, all scheduled and expired timers are 
>>> taken
>>> out of the heap, stored in a vector and then run sequentially, while 
>>> missing a
>>> check whether the current timer is still alive (could be 
>>> deleted/unscheduled by
>>> one of the previously run timers).
>>>
>>> Nadi
>>>
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> click mailing list
>>> click at amsterdam.lcs.mit.edu
>>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click


More information about the click mailing list