https://bugs.openldap.org/show_bug.cgi?id=10029

          Issue ID: 10029
           Summary: slapd crashes when run with unlimited open files
           Product: OpenLDAP
           Version: 2.6.4
          Hardware: All
                OS: Mac OS
            Status: UNCONFIRMED
          Keywords: needs_review
          Severity: normal
          Priority: ---
         Component: slapd
          Assignee: [email protected]
          Reporter: [email protected]
  Target Milestone: ---

To reproduce:

    % ulimit -n
    unlimited
    % $T/openldap-2.6.4/libexec/slapd -d-1
    641ee8bc.32f05820 0x1dc760140 @(#) $OpenLDAP: slapd 2.6.4 (Mar 25 2023
12:25:49) $
        openldap
    641ee8bc.32f39ff8 0x1dc760140 daemon_init: <null>
    641ee8bc.32f40588 0x1dc760140 daemon: SLAP_SOCK_INIT: dtblsize=-1
    641ee8bc.32f43080 0x1dc760140 ch_calloc of 1 elems of 18446744073709551615
bytes failed
    Assertion failed: (0), function ch_calloc, file ch_malloc.c, line 107.
    zsh: abort      $T/openldap-2.6.4/libexec/slapd -d-1

This is because `daemon.c` (line 1867) uses the maximum number of open files to
set `dtblsize`, which is subsequently used to size an array:

    1867 #ifdef HAVE_SYSCONF
    1868     dtblsize = sysconf( _SC_OPEN_MAX );
    1869 #elif defined(HAVE_GETDTABLESIZE)
    1870     dtblsize = getdtablesize();
    1871 #else /* ! HAVE_SYSCONF && ! HAVE_GETDTABLESIZE */
    1872     dtblsize = FD_SETSIZE;
    1873 #endif /* ! HAVE_SYSCONF && ! HAVE_GETDTABLESIZE */

If the maximum number of FDs is unlimited, then sysconf(_SC_OPEN_MAX) returns
-1, and the program crashes when it tries to malloc that much memory.

I've marked this as OS=macOS because that's what I'm illustrating this on, but
the same thing would happen on any OS where the sysconf call returns a negative
number for the 'unlimited' case.

-- 
You are receiving this mail because:
You are on the CC list for the issue.

Reply via email to