rlm_cache locking (or not)
Phil Mayers
p.mayers at imperial.ac.uk
Fri Oct 26 17:01:45 CEST 2012
On 26/10/12 15:34, Phil Mayers wrote:
> I was about to say "that worked like a charm" then radiusd segfaulted :o(
>
> I'll try to get a core dump.
>
Ugh. Horrible pointer corruption; little useful in the backtrace I'm
afraid, but the various pointers were invalid by stack frame #5
#0 0x000000357f630215 in raise () from /lib64/libc.so.6
#1 0x000000357f631cc0 in abort () from /lib64/libc.so.6
#2 0x000000357f66a7fb in __libc_message () from /lib64/libc.so.6
#3 0x000000357f671ce2 in _int_free () from /lib64/libc.so.6
#4 0x000000357f67590c in free () from /lib64/libc.so.6
#5 0x00002aaaad3444ac in cache_entry_free (data=0xc00aa0) at rlm_cache.c:77
#6 0x00000031bb212eac in rbtree_delete (tree=0xbd5530, Z=0xbfd050) at
rbtree.c:412
#7 0x00000031bb21302b in rbtree_deletebydata (tree=0xbd5530,
data=<value optimized out>) at rbtree.c:461
#8 0x00002aaaad344465 in cache_find (inst=0xbd4eb0,
request=0x2aaab8001150, key=0x41e013c0
"172.16.250.14.Stop.508aa231/dc:2b:61:b0:cd:7c/653919") at rlm_cache.c:164
#9 0x00002aaaad344652 in cache_it (instance=0xbd4eb0,
request=0x2aaab8001150) at rlm_cache.c:567
#10 0x000000000041c951 in call_modsingle (component=3, c=<value
optimized out>, request=0x2aaab8001150) at modcall.c:304
Looking at the code, I'm not entirely sure it's thread-safe; I don't see
any locking around anything. What's to stop cache_entry_free running at
the same time as the node is being accessed in another thread? Or the
rbtree being corrupted?
I've had to roll the change back, so I can't give more details at the
moment.
More information about the Freeradius-Devel
mailing list