[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#5665) slapd crashing with slapo-pcache when using attrset "*"



Full_Name: Toby Blake
Version: 2.4.11
OS: Scientific Linux 5.1
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (129.215.24.127)


Hi there,

I have been seeing problems when using slapo-pcache with
openldap-2.4.11, specifically when using an attrset of "*".

- openldap-2.4.11 on scientific linux 5.1
- We build our own RPMs.  I have built them with no optimisation (-O0)
  for the purposes of debugging.

Relevant part of slapd.conf:

overlay                 pcache
proxycache              bdb 5000 1 500 60
proxycachequeries       10000
proxyattrset            0 "*"
proxytemplate           (uid=) 0 60 60

What seems to happen is that a matching query will get answered and
added to the cache - all is fine until that entry expires and is then
deleted from the cache.  The next matching query will then cause slapd
to crash, either with an abort or a segfault.  This is repeatable.

I have been testing with the above configuration and the following
queries:

ldapsearch -x "uid=toby"
ldapsearch -x "uid=blah"

(the first for a positive reply, the second for a negative)

I have seen three different types of crash, all at the same point
(i.e. directly triggered by the query following the entry being
deleted from the cache).

So, here are the 3 different backtraces:

backtrace 1:

Thread 1 (process 13771):
#0  0x081c39fb in ber_put_string (ber=0x9839c00, 
    str=0x79626f74 <Address 0x79626f74 out of bounds>, tag=4294967295)
    at encode.c:396
#1  0x081c488a in ber_printf (ber=0x9839c00, fmt=0x8227d5d "v}N}")
    at encode.c:828
#2  0x08198957 in ldap_build_search_req (ld=0x9827920, 
    base=0xb56051a4 "dc=inf,dc=ed,dc=ac,dc=uk", scope=2, 
    filter=0xb5605234 "(uid=toby)", attrs=0x9831838, attrsonly=0, sctrls=0x0, 
    cctrls=0x0, timelimit=3600, sizelimit=24576, idp=0xb5f05d78)
    at search.c:328
#3  0x081982fa in ldap_search_ext (ld=0x9827920, 
    base=0xb56051a4 "dc=inf,dc=ed,dc=ac,dc=uk", scope=2, 
    filter=0xb5605234 "(uid=toby)", attrs=0x9831838, attrsonly=0, sctrls=0x0, 
    cctrls=0x0, timeout=0xb5f05e28, sizelimit=24576, msgidp=0xb5f05e3c)
    at search.c:100
#4  0x08116466 in ldap_back_search (op=0x9811140, rs=0xb5f07110)
    at search.c:216
#5  0x080eb88e in overlay_op_walk (op=0x9811140, rs=0xb5f07110, 
    which=op_search, oi=0x97a6da8, on=0x0) at backover.c:646
#6  0x080eba96 in over_op_func (op=0x9811140, rs=0xb5f07110, which=op_search)
    at backover.c:698
#7  0x080ebb3a in over_op_search (op=0x9811140, rs=0xb5f07110)
    at backover.c:720
#8  0x08070e83 in fe_op_search (op=0x9811140, rs=0xb5f07110) at search.c:366
#9  0x080707e1 in do_search (op=0x9811140, rs=0xb5f07110) at search.c:217
#10 0x0806d530 in connection_operation (ctx=0xb5f07200, arg_v=0x9811140)
    at connection.c:1084
#11 0x0806da1d in connection_read_thread (ctx=0xb5f07200, argv=0x18)
    at connection.c:1211
#12 0x08192de9 in ldap_int_thread_pool_wrapper (xpool=0x9785880) at tpool.c:663
#13 0x0076046b in start_thread () from /lib/libpthread.so.0
#14 0x006b7dbe in clone () from /lib/libc.so.6
(gdb) 


backtrace 2:

Thread 1 (process 27627):
#0  0x0065305a in free () from /lib/libc.so.6
#1  0x081c69ca in ber_memfree_x (p=0x9c8a1a0, ctx=0x0) at memory.c:152
#2  0x080d4020 in slap_sl_free (ptr=0x9c8a1a0, ctx=0x9c87c40)
    at sl_malloc.c:456
#3  0x080708de in do_search (op=0x9c89d78, rs=0xb5b8d110) at search.c:233
#4  0x0806d530 in connection_operation (ctx=0xb5b8d200, arg_v=0x9c89d78)
    at connection.c:1084
#5  0x0806da1d in connection_read_thread (ctx=0xb5b8d200, argv=0x10)
    at connection.c:1211
#6  0x08192de9 in ldap_int_thread_pool_wrapper (xpool=0x9bfe880) at tpool.c:663
#7  0x0076046b in start_thread () from /lib/libpthread.so.0
#8  0x006b7dbe in clone () from /lib/libc.so.6
(gdb) 


backtrace 3:

Thread 1 (process 10333):
#0  0x080bc4b2 in ad_inlist (desc=0x8efa9c8, attrs=0x8f8c488) at ad.c:586
#1  0x08080641 in fe_aux_operational (op=0x8f8bce0, rs=0xb5b8b110)
    at backend.c:1885
#2  0x08080809 in backend_operational (op=0x8f8bce0, rs=0xb5b8b110)
    at backend.c:1933
#3  0x080829f6 in slap_send_search_entry (op=0x8f8bce0, rs=0xb5b8b110)
    at result.c:778
#4  0x0811684c in ldap_back_search (op=0x8f8bce0, rs=0xb5b8b110)
    at search.c:338
#5  0x080eb88e in overlay_op_walk (op=0x8f8bce0, rs=0xb5b8b110, 
    which=op_search, oi=0x8f21da8, on=0x0) at backover.c:646
#6  0x080eba96 in over_op_func (op=0x8f8bce0, rs=0xb5b8b110, which=op_search)
    at backover.c:698
#7  0x080ebb3a in over_op_search (op=0x8f8bce0, rs=0xb5b8b110)
    at backover.c:720
#8  0x08070e83 in fe_op_search (op=0x8f8bce0, rs=0xb5b8b110) at search.c:366
#9  0x080707e1 in do_search (op=0x8f8bce0, rs=0xb5b8b110) at search.c:217
#10 0x0806d530 in connection_operation (ctx=0xb5b8b200, arg_v=0x8f8bce0)
    at connection.c:1084
#11 0x0806da1d in connection_read_thread (ctx=0xb5b8b200, argv=0x10)
    at connection.c:1211
#12 0x08192de9 in ldap_int_thread_pool_wrapper (xpool=0x8f00880) at tpool.c:663
#13 0x0076046b in start_thread () from /lib/libpthread.so.0
#14 0x006b7dbe in clone () from /lib/libc.so.6
(gdb) 



In an hour of testing (with a positive query) yesterday, nine of the
crashes were with backtrace 3, two were with backtrace 1, and one was
with backtrace 2.

In an hour of testing with a negative query, all of the crashes were
essentially backtrace 2, but with a longer stack:

Thread 1 (process 18684):
#0  0x00220402 in __kernel_vsyscall ()
#1  0x0060fd20 in raise () from /lib/libc.so.6
#2  0x00611631 in abort () from /lib/libc.so.6
#3  0x00647e6b in __libc_message () from /lib/libc.so.6
#4  0x0064fb16 in _int_free () from /lib/libc.so.6
#5  0x00653070 in free () from /lib/libc.so.6
#6  0x081c69ca in ber_memfree_x (p=0x9bf1488, ctx=0x0) at memory.c:152
#7  0x080d4020 in slap_sl_free (ptr=0x9bf1488, ctx=0x9bee420)
    at sl_malloc.c:456
#8  0x080708de in do_search (op=0x9bf1110, rs=0xb5f27110) at search.c:233
#9  0x0806d530 in connection_operation (ctx=0xb5f27200, arg_v=0x9bf1110)
    at connection.c:1084
#10 0x0806da1d in connection_read_thread (ctx=0xb5f27200, argv=0x10)
    at connection.c:1211
#11 0x08192de9 in ldap_int_thread_pool_wrapper (xpool=0x9b65880) at tpool.c:663
#12 0x0076046b in start_thread () from /lib/libpthread.so.0
#13 0x006b7dbe in clone () from /lib/libc.so.6
(gdb) 


Please let me know if there is any additional information I can
provide.

Cheers
Toby Blake
School of Informatics
University of Edinburgh