The following sections summarize changes made in all Java SE 17.0.21 BPR releases. The BPR releases are listed below in date order, most current BPR first. Note that bug fixes in previous BPRs are also included in the current BPR.
The 17.0.21.0.1 BPR is available to all users here.
| BugId | Category | Subcategory | Summary |
|---|---|---|---|
| JDK-8392377 | core-libs | java.time | (tz) Update Timezone Data to 2026d |
| JDK-8392519 | core-libs | java.util:i18n | Cherry-pick metazone changes from CLDR for tzdata2026d, for JDK update release |
| JDK-8392526 | core-libs | java.util:i18n | Cherry-pick BCP 47 time zone changes from CLDR for tzdata2026d, for JDK update releases |
| JDK-8343788 | core-libs | java.util:i18n | Provide means to alter lib/tzmappings entries on Windows |
| JDK-8393337 | core-libs | java.time | (tz) Update Timezone Data to 2026e |
| JDK-8393344 | core-libs | java.util:i18n | Cherry-pick metazone changes from CLDR to support tzdata2026e for JDK update releases |
| JDK-8392538 | core-libs | java.util:i18n | Align the JDK with Microsoft's new timezone names for British Columbia/Alberta |
| JDK-8393848 | core-libs | java.util:i18n | Align the JDK with Microsoft's new timezone name for Manitoba |
Release date: October 20, 2026
The full version string for this update release is 17.0.21+9 (where "+" means "build"). The version number is 17.0.21. This JDK conforms to version 17.1 of the Java SE Specification (JSR 392 MR 1 2024-07-02).
JDK 17.0.21 contains IANA time zone data 2026c which contains the following changes:
For more information, refer to Timezone Data Versions in the JRE Software.
The security baselines for the Java Runtime Environment (JRE) at the time of the release of JDK 17.0.21 are specified in the following table:
| JRE Family Version | JRE Security Baseline (Full Version String) |
|---|---|
| 17 | 17.0.21+9 |
| 11 | 11.0.33+9 |
| 8 | 1.8.0_511-b09 |
Oracle recommends that the JDK is updated with each Critical Patch Update. In order to determine if a release is the latest, the Security Baseline page can be used to determine which is the latest version for each release family.
Critical patch updates, which contain security vulnerability fixes, are announced one year in advance on Critical Patch Updates, Security Alerts and Bulletins. It is not recommended that this JDK (version 17.0.21) be used after the next critical patch update scheduled for November 17, 2026.
Java Management Service, available to all users, can help you find vulnerable Java versions in your systems. Java SE Subscribers and customers running in Oracle Cloud can use Java Management Service to update Java Runtimes and to do further security reviews like identifying potentially vulnerable third party libraries used by your Java programs. Existing Java Management Service user click here to log in to your dashboard. The Java Management Service Documentation provides a list of features available to everyone and those available only to customers. Learn more about using Java Management Service to monitor and secure your Java Installations.
The JDK now encodes ML-KEM and ML-DSA private keys in PKCS #8 format using the DER-encoded ASN.1 CHOICE formats defined in Section 6, "Private Key Format" of RFC 9935 and Section 6, "Private Key Format" of RFC 9881. Two new security properties, jdk.mlkem.pkcs8.encoding and jdk.mldsa.pkcs8.encoding, control the encoding used when generating new keys with a KeyPairGenerator or when translating keys with a KeyFactory. Valid values are seed, expandedKey, and both (case-insensitive). If a system property of the same name is also specified, it supersedes the security property value. All three formats are supported when decoding previously encoded private keys with a KeyFactory.
The default encoding for newly generated ML-KEM and ML-DSA private keys is seed. Applications that require a particular private-key encoding can configure the relevant security property or equivalent system property.
Two new MessageDigest algorithms, SHAKE128-256 and SHAKE256-512, have been added to the SUN provider. These are fixed-length versions of the SHAKE128 and SHAKE256 Extendable-Output Functions (XOFs) defined in NIST FIPS 202. For more information, see The SUN Provider.
All TLS server certificates anchored by Symantec, Entrust, and Camerfirma root CAs are now distrusted, regardless of their issuing date. TLS server certificates anchored by Chunghwa root CAs will be completely distrusted as of April 19, 2027. The jdk.security.caDistrustPolicies security property in the java.security configuration file has been updated to reflect these new policies.
The com.sun.net.http.HttpServer has been updated to validate the Host request header as described in RFC 9112. HTTP/1.1 requests without a Host header or with multiple Host headers are now rejected with an HTTP 400 Bad Request response.
The validation can be disabled by setting the system property sun.net.httpserver.disableHostValidation (link not found) to true.
The implementation of the WebRowSet.readXml methods has been updated to consistently report XML parsing and validation failures as SQLException.
WebRowSet.readXml validates XML input against the standard WebRowSet XML schema. Applications should expect malformed XML, schema validation failures, unsupported external entities, and other XML processing errors to be reported as SQLException. Validation can be disabled by setting the system property jdk.sql.rowset.webrowsetValidation to false.
The existing method signatures remain unchanged. No specification changes are included in this update.
The scope of the com.sun.jndi.ldap.object.trustSerialData system property is extended to cover transparent processing of URL RMI References obtained from an LDAP context.
A URL context factory is a special type of ObjectFactory that will be used to look up an object referred to from a JNDI javax.naming.Reference that does not specify any factory name, but contains a simple reference address in the form of a URL string. When deserialization of Java objects from LDAP is disabled, the JDK built-in implementation of the JNDI/LDAP provider will no longer transparently use any URL context factory when processing Reference objects containing a URL reference whose scheme is rmi.
To make it possible to have a finer-grain control over which URL schemes should be disabled when processing URL string reference addresses from the built-in JNDI/LDAP provider, a new system property, jdk.jndi.ldap.disabledURLSchemes, is introduced. The value of this property is a comma-separated list of URL schemes that are disabled. The JDK built-in implementation of the JNDI/LDAP provider will no longer transparently use any URL context factory when processing Reference objects containing a URL reference whose scheme corresponds (case insensitively) to one of the schemes in this list of disabled schemes. The default value for that property is "rmi" if trustSerialData is false (the default), and empty if trustSerialData is true. If a custom value for this new property is provided on the Java command line then only schemes listed in that property value are disabled, regardless of the value of trustSerialData.
If rmi is included in this list (the default when no custom values have been supplied for com.sun.jndi.ldap.object.trustSerialData or jdk.jndi.ldap.disabledURLSchemes), then a javax.naming.Reference object will be returned to the application instead of the object that would have been created by processing the RMI reference and looking up its URL from the context returned by a URL context factory.
An application that depends on following RMI URLs contained in a Reference obtained from a JNDI/LDAP context may need to process the Reference object explicitly, or provide a custom value for the jdk.jndi.ldap.disabledURLSchemes system property that does not include the rmi scheme.
An application that wants to prevent transparent processing of other kinds of URL schemes can now do so by supplying a custom value for the jdk.jndi.ldap.disabledURLSchemes system property that also includes them.
TrimNativeHeapInterval a Product Switch
(JDK-8325496)
(Only available on Linux with glibc.) TrimNativeHeapInterval has been made an official product switch. It allows the JVM to trim the native heap at periodic intervals.
The performance of the MessageDigest implementations that belong to the SHA3 family (SHA3-224, SHA3-256, SHA3-384, and SHA3-512) has been improved by 6-27%, depending on digested message length and on the platform used. An additional 30-40% can be experienced on AVX-512 capable platforms due to new intrinsic implementations on that platform.
The following root certificate has been removed from the cacerts keystore:
+ alias name "luxtrustglobalrootca [jdk]"
Distinguished Name: CN=LuxTrust Global Root, O=LuxTrust s.a., C=LU
The way JShell's remote agents are invoked has changed. Existing agents will need to be updated to use the new protocol. See the jdk.jshell.execution.RemoteExecutionControl JavaDoc API documentation for the new protocol.
Deserialization of the com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl class is now disabled by default. (This is an internal class that implements the javax.xml.transform.Templates interface.) An application attempting to deserialize an instance of this class will receive UnsupportedOperationException. To re-enable deserialization of this class, use the command line to set the system property jdk.xml.enableTemplatesImplDeserialization to true. Prior to this change, deserialization was enabled by default, unless the Security Manager was enabled. The state of the Security Manager is no longer considered in determining whether deserialization is enabled.
This release contains fixes for security vulnerabilities described in the Oracle Critical Patch Update.
➜ Issues fixed in 17.0.21:| # | JBS | Component/Subcomponent | Summary |
|---|---|---|---|
| 1 | JDK-8300692 | client-libs | GCC 12 reports some compiler warnings in bundled freetype |
| 2 | JDK-8385490 | client-libs/2d | Update HarfBuzz to 14.2.0 |
| 3 | JDK-8385390 | client-libs/2d | Update FreeType to 2.14.3 |
| 4 | JDK-8300167 | client-libs/2d | Add validation of the raster's layout before using in native |
| 5 | JDK-8384902 | client-libs/java.awt | Update GIFlib to 6.1.3 |
| 6 | JDK-8384495 | client-libs/java.awt | Update Libpng to 1.6.58 |
| 7 | JDK-8270915 | client-libs/javax.imageio | GIFImageReader disregards ignoreMetadata flag which causes memory exhaustion |
| 8 | JDK-8304701 | core-libs/java.net | Request with timeout aborts later in-flight request on HTTP/1.1 cxn |
| 9 | JDK-8377992 | core-libs/java.nio | (zipfs) Align ZipFileSystem END header validation with the ZipFile implementation |
| 10 | JDK-8391807 | core-libs/java.time | Inconsistent TimeZone Names Displayed across JDK release trains |
| 11 | JDK-8272746 | core-libs/java.util.jar | ZipFile can't open big file (NegativeArraySizeException) |
| 12 | JDK-8341625 | core-libs/java.util.jar | Improve ZipFile validation of the END header |
| 13 | JDK-8381379 | core-libs/java.util:i18n | Support std/dstOffset attributes in CLDR's metazone definitions |
| 14 | JDK-8390388 | core-libs/java.util:i18n | Cherry-pick tz attributes from newer CLDR data for jdk25u and earlier |
| 15 | JDK-8390380 | core-libs/java.util:i18n | Cherry-pick metazone changes from CLDR to support tzdata2026c for JDK update releases |
| 16 | JDK-8342449 | core-svc | reimplement: JDK-8327114 Attach in Linux may have wrong behavior when pid == ns_pid |
| 17 | JDK-8358077 | core-svc | sun.tools.attach.VirtualMachineImpl::checkCatchesAndSendQuitTo on Linux leaks file handles after JDK-8327114 |
| 18 | JDK-8345684 | core-svc/java.lang.management | OperatingSystemMXBean.getSystemCpuLoad() throws NPE |
| 19 | JDK-8327114 | core-svc/tools | Attach in Linux may have wrong behaviour when pid == ns_pid (Kubernetes debug container) |
| 20 | JDK-8336702 | hotspot/compiler | C2 compilation fails with "all memory state should have been processed" assert |
| 21 | JDK-8349721 | hotspot/compiler | Add aarch64 intrinsics for ML-KEM |
| 22 | JDK-8351412 | hotspot/compiler | Add AVX-512 intrinsics for ML-KEM |
| 23 | JDK-8354926 | hotspot/compiler | Remove remnants of debugging in the fix for JDK-8348561 and JDK-8349721 |
| 24 | JDK-8351034 | hotspot/compiler | Add AVX-512 intrinsics for ML-DSA |
| 25 | JDK-8341527 | hotspot/compiler | AVX-512 intrinsic for SHA3 |
| 26 | JDK-8348561 | hotspot/compiler | Add aarch64 intrinsics for ML-DSA |
| 27 | JDK-8386578 | hotspot/compiler | double_keccak stub does not set its return value on x86 |
| 28 | JDK-8293114 | hotspot/gc | JVM should trim the native heap |
| 29 | JDK-8273153 | hotspot/runtime | Consolidate file_exists into os:file_exists |
| 30 | JDK-8364106 | hotspot/runtime | Include java.runtime.version in thread dump output |
| 31 | JDK-8375125 | hotspot/runtime | assert(false) failed: "Attempting to acquire lock NativeHeapTrimmer_lock/nosafepoint out of order with lock ConcurrentHashTableResize_lock/nosafepoint-2 -- possible deadlock" when using native heap trimmer |
| 32 | JDK-8261242 | hotspot/runtime | [Linux] OSContainer::is_containerized() returns true when run outside a container |
| 33 | JDK-8302744 | hotspot/runtime | Refactor Hotspot container detection code |
| 34 | JDK-8296796 | hotspot/runtime | Provide clean, platform-agnostic interface to C-heap trimming |
| 35 | JDK-8331560 | hotspot/runtime | Refactor Hotspot container detection code so that subsystem delegates to controllers |
| 36 | JDK-8347129 | hotspot/runtime | cpuset cgroups controller is required for no good reason |
| 37 | JDK-8322420 | hotspot/runtime | [Linux] cgroup v2: Limits in parent nested control groups are not detected |
| 38 | JDK-8343599 | hotspot/runtime | Kmem limit and max values swapped when printing container information |
| 39 | JDK-8343191 | hotspot/runtime | Cgroup v1 subsystem fails to set subsystem path |
| 40 | JDK-8347811 | hotspot/runtime | Container detection code for cgroups v2 should use cgroup.controllers |
| 41 | JDK-8349988 | hotspot/runtime | Change cgroup version detection logic to not depend on /proc/cgroups |
| 42 | JDK-8354057 | hotspot/runtime | Odd debug output in -Xlog:os+container=debug on certain systems |
| 43 | JDK-8354878 | hotspot/runtime | File Leak in CgroupSubsystemFactory::determine_type of cgroupSubsystem_linux.cpp:300 |
| 44 | JDK-8341644 | hotspot/runtime | Compile error in cgroup coding when using toolchain clang |
| 45 | JDK-8353478 | performance/libraries | Update crypto microbenchmarks to cover ML-DSA, ML-KEM, and HSS algorithms |
| 46 | JDK-8340327 | security-libs/java.security | A common framework to support public key algorithms with standard parameter sets |
| 47 | JDK-8275914 | security-libs/java.security | SHA3: changing java implementation to help C2 create high-performance code |
| 48 | JDK-8267617 | security-libs/java.security | Certificate's IP x509 NameConstraints raises ArrayIndexOutOfBoundsException |
| 49 | JDK-8300399 | security-libs/java.security | EdDSA does not verify when there is no message |
| 50 | JDK-8320192 | security-libs/java.security | SHAKE256 does not work correctly if n >= 137 |
| 51 | JDK-8338587 | security-libs/java.security | Internal XOF Methods for SHAKE128 and SHAKE256 |
| 52 | JDK-8381771 | security-libs/java.security | Add a check for DNS label not to end with a hyphen |
| 53 | JDK-8356051 | security-libs/java.security | Update SignatureUtil.java with the new KnownOIDs |
| 54 | JDK-8347606 | security-libs/java.security | Optimize Java implementation of ML-DSA |
| 55 | JDK-8298387 | security-libs/java.security | Implement JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm |
| 56 | JDK-8345533 | security-libs/java.security | Switch ML-DSA implementation to FIPS 204 final |
| 57 | JDK-8168469 | security-libs/javax.crypto | Memory leak in JceSecurity |
| 58 | JDK-8298390 | security-libs/javax.crypto | Implement JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism |
| 59 | JDK-8347608 | security-libs/javax.crypto | Optimize Java implementation of ML-KEM |
| 60 | JDK-8350589 | security-libs/javax.crypto | Investigate cleaner implementation of AArch64 ML-DSA intrinsic introduced in JDK-8348561 |
| 61 | JDK-8189441 | security-libs/javax.crypto | Define algorithm names for keys derived from KeyAgreement |
| 62 | JDK-8374755 | security-libs/javax.crypto | ML-KEM's 12-bit decompression can be simplified on aarch64 |
| 63 | JDK-8368694 | security-libs/javax.crypto:pkcs11 | PKCS11-NSS generic keys generated by DH have leading zeroes stripped |