Hi,

> >> size_t memrar_allocator_largest_free_area(struct memrar_allocator
> *allocator)
> >> {
> >> -  if (allocator == NULL)
> >> -          return 0;
> >> -  return allocator->largest_free_area;
> >> +  size_t tmp = 0;
> >> +
> >> +  if (allocator != NULL) {
> >> +          mutex_lock(&allocator->lock);
> >> +          tmp = allocator->largest_free_area;
> >> +          mutex_unlock(&allocator->lock);
> >
> > This doesn't seem to make any sense (in either version). The moment
> you
> > drop the lock the value in "tmp" becomes stale as the allocator could
> > change it. ?
> >
> 
> The idea was proposed by Ossama Othman in his earlier reply.

:-) 

[OO] > > Certainly the allocator->largest_free_area value could be updated
> after the lock is released and by the time it is returned to the user
> (for statistical purposes), but at least the internal allocator state
> would remain consistent in the presences of multiple threads.

My suggestion focused solely on hiding the allocator lock from the caller.  The 
TOCTOU race I alluded to above exists in the current version of the code, and 
was not introduced with the change I proposed to your patch.

HTH,
-Ossama
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to