[reSIProcate] Timer vulnerability

Alan Hawrylyshen alan at jasomi.com
Tue Apr 12 14:17:28 CDT 2005


On Apr 12, 2005, at 12.38, kenho at bluebottle.com wrote:

> Alan,
>
> I presume the scenario you described is very real and is possible to 
> happen to QueryPerformanceCounter() and the likes, but GetTickCount()?
> Although I have verify this myself, MSDN library clearly states that 
> GetTickCount() returns the number of *milliseconds* that have elapsed 
> since the system was started (note that it also says on WinCE, it 
> excludes time suspended, but I failed to find similar statement 
> regarding other windows families).
>
> Ken
>
> Alan Hawrylyshen wrote:
>
>> One of the BIG problems with GetTickCount and families is that they 
>> no longer produce monotonically increasing results.
>> On devices with Intel SpeedStep technology (for example) or other 
>> power management technologies, the TickCount can move in very 
>> unpredictable ways. This results is wildly inaccurate timers. Care 
>> must be taken to select a replacement (if done) that does not make 
>> use of a fundamental that varies non-linearly.  On a plus side, we 
>> can get rid of any direct calls to time() since having a contained 
>> Time utility class is a Good Thing™.
>>
>> Alan
>>
>> a l a n a t j a s o m i d o t c o m
>>
>>

Ken;

I suspect that GetTickCount() may not suffer this exact problem, I just 
wanted to raise awareness of the problems we have seen in the past.  If 
GetTickCount is assured to be n-milliseconds since last restart, it may 
form a useful basis for the timer refactoring.  sysinfo() on linux may 
have a reasonable similar behaviour.  For solaris and other systems I'd 
recommend just implementing a layer over the gettimeofday() call like 
we already do. People can address this vulnerability as they see fit on 
those platforms.

Alan

a l a n a t j a s o m i d o t c o m




More information about the resiprocate-devel mailing list