Hi all,

with Java-11 we have notice a thread leak with ldap module.
We use LDAP to authenticate users with username+pasword by
directly calling LdapLoginModule. This was ok with java 7 and
java 8. With java 11 we see threads getting accumulated. here is a
test case that demonstrates it:

```

    private static final String USERNAME_KEY = "javax.security.auth.login.name";
    private static final String PASSWORD_KEY = 
"javax.security.auth.login.password";

    String ldapUrl = "ldap://....";;
    String peopleOU = "ou= ... o= ... c=...");

   String user = ...;
   String pass = ...;


    @Test
    public void threadLeakTest() throws AuthenticationException, 
NoSuchPrincipalException, LoginException {

        Map<Thread, StackTraceElement[]> threadsBefore = 
Thread.getAllStackTraces();

        Map<String, Object>  globalLoginOptions = Map.of(
                "userProvider", ldapUrl + "/" + peopleOU,
                "useSSL", "false",
                "userFilter", "(uid={USERNAME})",
                "useFirstPass", "true"
        );

        for (int i = 0; i < 10; i++) {

            Map<String, Object> loginOptions = Map.of(
                    USERNAME_KEY, user,
                    PASSWORD_KEY, pass.toCharArray());

            Subject subject = new Subject();

            LdapLoginModule loginModule = new LdapLoginModule();
            loginModule.initialize(subject, null, loginOptions, 
globalLoginOptions);
            loginModule.login();
            loginModule.commit();
            loginModule.logout();
        }

        Map<Thread, StackTraceElement[]> threadsAfter = 
Thread.getAllStackTraces();

        assertEquals("Thread leak detected",  threadsBefore.size() + 1, 
threadsAfter.size());
    }

```

The thread count difference is always equals to the number of iterations in the 
loop, e.g. on each call a
thread is created and stays around. Eventually our server crashes with:

[19497.011s][warning][os,thread] Attempt to protect stack guard pages failed 
(0x00007fcc4c65c000-0x00007fcc4c660000).
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007fcc4c55b000, 
16384, 0) failed; error='Not enough space' (errno=12)

The issue is not observed with java-14, thus I assume that the fix is related 
to commit

http://hg.openjdk.java.net/jdk/jdk/rev/6717d7e59db4

As java-11 is LTS, what is the procedure to get it fix back-ported?

Regards,
   Tigran.

Reply via email to