[QUICK] talloc bugs

Sam Liddicott sam at liddicott.com
Fri Jun 26 08:07:25 MDT 2009


Cc: to specific talloc committers and stakeholders

We've discussed this at length before[1], without conclusion, so I'll be
quick:

The talloc ideal model is broken due to promoting references to parent
inside talloc_free.

The main problem is that if a reference is promoted to owner, it can be
removed accidentally by talloc_steal. This results in risks of dangling
references.

Which particular reference is removed depends on the runtime order of
references taken/released, but the unpredictability of this is dwarfed
by possible subsequent memory trampling which can destroy the talloc
tree. This scenario is quite likely in a program where there are
loadable modules and hooks, and the outcome could be network timing
dependant.

There is/has been other talloc problems but I'd rather bring them up
later or you can read about them in [1]

However, to me, the main evidence of the degree of the problem is VL's
preference to implement his own reference counting rather than rely on
talloc. (Apologies to VL for using him to make a point that he himself
may not actually support).

We should either:

   1. get rid of talloc_free and talloc_steal
      (replace with talloc_unref(old_ref) and talloc_change_ref(old_ref,
      new_ref)
      This breaks the API so the sooner we consider it the better.
   2. stop promoting reference to parent after talloc_free
      This doesn't break the API and causes talloc to follow the
      documentation. I've been running choice 2 in Samba4 for some time,
      by means of a submitted patch which introduces the concept of "no
      owner" which is not enough to prevent an object being freed when
      it's references all go away, but which can quite safely be stolen
      from with talloc_steal.

[1] http://lists.samba.org/archive/samba-technical/2009-January/062812.html


Sam


More information about the samba-technical mailing list