[improve][misc] Upgrade Conscrypt to 2.6.2 to restore the native library glibc baseline - #26315
Merged
Merged
Conversation
…ary glibc baseline Follow-up to apache#26314, which upgraded Conscrypt 2.5.2 -> 2.6.1. The 2.6.1 native libraries were built on newer CI runners and require GLIBC_2.34 (post-libpthread-merge pthread_*, dlopen/dlsym) and, on linux-x86_64, GLIBC_2.35 (_dl_find_object). That raises the glibc floor well above the 2.5.2 baseline of 2.16 and would break loading the JNI library on RHEL 9 and Amazon Linux 2023 (glibc 2.34), Ubuntu 20.04 and Debian 11 (2.31), and Amazon Linux 2 (2.26). Conscrypt 2.6.2 rebuilds the natives in an Ubuntu 20.04 container (google/conscrypt#1527), restoring a floor of GLIBC_2.17 on linux-aarch_64 and GLIBC_2.14 on linux-x86_64, while keeping all five native binaries including the linux-aarch_64 one that motivated apache#26314. 2.6.2 also makes BufferAllocator.allocateHeapBuffer non-abstract again (google/conscrypt#1526), restoring source compatibility for external subclasses such as Netty's ConscryptAlpnSslEngine.BufferAllocatorAdapter. The complete Java API delta between 2.6.1 and 2.6.2 is that single abstract -> concrete change; the jar entry lists are otherwise identical. Assisted-by: Claude Code (Opus 5)
lhotari
requested review from
Technoboy-,
dao-jun,
david-streamlio,
merlimat and
nodece
August 12, 2026 15:44
void-ptr974
approved these changes
Aug 13, 2026
nodece
approved these changes
Aug 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #26314.
Motivation
#26314 upgraded Conscrypt 2.5.2 → 2.6.1 to pick up the
linux-aarch_64native binary. Thatrelease, however, silently raised the glibc floor of all the bundled JNI libraries, because
upstream built them on newer GitHub runners. Checking the ELF version requirements of the shipped
.sofiles (objdump -T lib*.so | rg -o 'GLIBC_[0-9.]+' | sort -uV):linux-x86_64linux-aarch_64GLIBC_2.16GLIBC_2.35GLIBC_2.34GLIBC_2.14GLIBC_2.172.6.1 pulls in
_dl_find_object@GLIBC_2.35plus the post-libpthread-mergepthread_*/dlopen/dlsym@GLIBC_2.34, soSystem.loadLibraryfor the Conscrypt JNI libraryfails on a number of platforms that 2.5.2 supported:
2.35symbol is missingConscrypt is the recommended TLS provider on the web-service path (
webServiceTlsProvider=Conscryptis the default in
conf/broker.conf,conf/proxy.conf,conf/standalone.confandconf/functions_worker.yml), so a failing native load degrades TLS on those platforms.Since #26314 has not been part of any release yet, this regression has not reached users — but it
would ship with 5.0.0-M1 if left as is.
Conscrypt 2.6.2 rebuilds the natives in an
Ubuntu 20.04 container (google/conscrypt#1527),
restoring the low floor while keeping all five native binaries — including the
linux-aarch_64onethat motivated #26314.
2.6.2 additionally makes
BufferAllocator.allocateHeapBuffernon-abstract again(google/conscrypt#1526). 2.6.0 had made it
abstract, which orphaned external subclasses compiled against older Conscrypt — notably Netty's
ConscryptAlpnSslEngine.BufferAllocatorAdapter, which only overridesallocateDirectBuffer. ForPulsar this was latent rather than an active break: I verified that such a subclass still loads,
instantiates and serves
allocateDirectBufferon 2.6.1 (AbstractMethodErroronly fires oninvocation), that nothing inside
conscrypt-openjdk-uberever callsallocateHeapBuffer, and thatPulsar passes
ApplicationProtocolConfig.DISABLEDinTlsContextsso it never constructs that Nettyengine on its own path. It is still worth taking the fix, since gRPC/Netty stacks bundled elsewhere
in the distribution can construct it.
Modifications
Bump
conscryptin the version catalog from 2.6.1 to 2.6.2 and update the jar filename in theserver and shell binary
LICENSE.bin.txtfiles. No code changes.The complete Java API delta between 2.6.1 and 2.6.2 is a single line —
allocateHeapBuffergoingfrom
abstractto concrete — and the jar entry lists are otherwise identical, so this is adrop-in patch upgrade.
I also confirmed that 2.6.2 retains the
google/conscrypt#1060 fix for
issue 1015, which #26314 depends on when it
removed the
processConscryptTrustManagerworkaround:TrustManagerImpl.getHttpsVerifier()stillfalls back instance verifier → static default →
Platform.getDefaultHostnameVerifier().Verifying this change
This change is a trivial rework / code cleanup without any test coverage.
Beyond CI, this was verified locally as follows:
./gradlew checkBinaryLicensepasses for both the server and shell distributions, and bothtarballs ship
conscrypt-openjdk-uber-2.6.2.jar. (jetty-alpn-conscrypt-serverdrags Conscrypt2.6.0 in transitively; the catalog-driven platform forces it up to 2.6.2.)
./gradlew quickCheckand./gradlew spotlessCheck checkstyleMain checkstyleTestpass.JdkSslContextsTest,TlsFactorySupportTestandDefaultBrokerTlsPolicyTestpass. Note that notest in the repository actually installs the real Conscrypt provider, so I additionally ran a
standalone check against the 2.6.2 jar confirming that the native library loads, that a TLSv1.3
handshake plus data round-trip succeeds through the Conscrypt JSSE provider, and that a
TrustManagerfrom the standardTrustManagerFactorystill resolves the default hostnameverifier without the removed workaround.
Does this pull request potentially affect one of the following parts:
If the box was checked, please highlight the changes
Conscrypt
org.conscrypt:conscrypt-openjdk-uberis upgraded from 2.6.1 to 2.6.2 (patch release).Documentation
docdoc-requireddoc-not-neededdoc-complete