From otp@REDACTED Wed Oct 14 16:40:13 2026 From: otp@REDACTED (Erlang/OTP) Date: Wed, 14 Oct 2026 16:40:13 +0200 (CEST) Subject: Patch Package OTP 29.1.2 Released Message-ID: <20261014144013.C3C352C53B@hel.cslab.ericsson.net> Patch Package: OTP 29.1.2 Git Tag: OTP-29.1.2 Date: 2026-10-14 Trouble Report Id: OTP-20359, OTP-20360, OTP-20385, OTP-20392, OTP-20394, OTP-20408, OTP-20415, OTP-20418, OTP-20420, OTP-20423, OTP-20426, OTP-20427, OTP-20428, OTP-20437, OTP-20438, OTP-20439, OTP-20440, OTP-20442, OTP-20444, OTP-20445, OTP-20447, OTP-20456 Seq num: CVE-2026-105236, CVE-2026-42789, CVE-2026-48856, CVE-2026-94200, CVE-2026-96596, ERIERL-1362, ERIERL-1367, GH-11620, GH-11691, GH-11702, GH-11709, GH-11724, GH-11735, GH-11748, GH-11762, GH-SA-m75x-4vwg-ggjh, GH-SA-q7cq-pfgf-5hr7, OTP-20155, OTP-20346, PR-11474, PR-11561, PR-11623, PR-11662, PR-11692, PR-11707, PR-11708, PR-11719, PR-11720, PR-11727, PR-11753, PR-11755, PR-11763, PR-11767, PR-11768, PR-11773, PR-11791, PR-11808, PR-11823, PR-11824, PR-11825 System: OTP Release: 29 Application: compiler-10.0.7, dialyzer-6.0.4, erts-17.1.1, inets-9.8.1, mnesia-4.27.1, odbc-2.17.2, public_key-1.21.8, snmp-5.20.6, ssh-6.0.7, ssl-11.7.8, stdlib-8.1.1 Predecessor: OTP 29.1.1 Check out the git tag OTP-29.1.2, and build a full OTP system including documentation. Apply one or more applications from this build as patches to your installation using the 'otp_patch_apply' tool. For information on install requirements, see descriptions for each application version below. # POTENTIAL INCOMPATIBILITIES - When the max_channels limit is reached for a port-forwarding channel (direct-tcpip or forwarded-tcpip), the SSH daemon now refuses the individual channel with SSH_MSG_CHANNEL_OPEN_FAILURE and keeps the connection alive, instead of terminating the whole SSH connection. Port-forwarding channels now behave like session channels, which already survived the limit, and this matches OpenSSH. Applications that relied on the connection being closed when the channel limit was reached must instead handle the channel-open failure. Own Id: OTP-20420 Application(s): ssh Related Id(s): PR-11708 # compiler-10.0.7 The compiler-10.0.7 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - Fix native record bugs when used together with `try...catch` Own Id: OTP-20415 Related Id(s): GH-11691, PR-11719 - Compilation of a function with thousands of clauses would be very slow. Own Id: OTP-20437 Related Id(s): GH-11735, PR-11767 - Sometimes compiling with `deterministic` would not guarantee generation of identical BEAM files for every build. Own Id: OTP-20438 Related Id(s): GH-11748, PR-11753 - A crash in `sys_core_fold` on native record patterns has been eliminated. Own Id: OTP-20440 Related Id(s): GH-11724, PR-11768 > #### Full runtime dependencies of compiler-10.0.7 > > crypto-5.1, erts-13.0, kernel-8.4, stdlib-8.0 # dialyzer-6.0.4 The dialyzer-6.0.4 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - Dialyzer will now avoid an infinite loop when multiple nominal types with the same structure are analyzed together. Own Id: OTP-20444 Related Id(s): GH-11762, PR-11763 > #### Full runtime dependencies of dialyzer-6.0.4 > > compiler-10.0, erts-12.0, kernel-8.0, stdlib-5.0, syntax_tools-2.0 # erts-17.1.1 The erts-17.1.1 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - Two trace sessions that trace `garbage_collection` on the same process crash the emulator on the first collection. `trace_gc()` in `erl_trace.c` builds the GC info list on a temporary heap for the first session and frees it inside the session loop. The next session reuses `msg`, which now points into freed memory. The memory is now freed after the session loop, which removes the use-after-free. Own Id: OTP-20385 Related Id(s): PR-11623 - Fix native record bugs when used together with `try...catch` Own Id: OTP-20415 Related Id(s): GH-11691, PR-11719 > #### Full runtime dependencies of erts-17.1.1 > > kernel-9.0, sasl-3.3, stdlib-4.1 # inets-9.8.1 The inets-9.8.1 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - Credentials supplied in the userinfo component of a request URI (`http://user:password@REDACTED/path`) were still sent to the redirect target when `httpc` followed a cross-origin redirect. The userinfo component is now cleared together with the sensitive headers whenever the redirect target differs in host or port from the original request. Redirects that stay within the same origin are unaffected and still carry the credentials. Own Id: OTP-20456 Related Id(s): GH-SA-m75x-4vwg-ggjh, PR-11825, CVE-2026-48856, OTP-20155 > #### Full runtime dependencies of inets-9.8.1 > > erts-14.0, kernel-9.0, mnesia-4.12, public_key-1.13, runtime_tools-1.8.14, > ssl-9.0, stdlib-5.0, stdlib-6.0 # mnesia-4.27.1 The mnesia-4.27.1 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - Fixed the type specification for mnesia:restore/2, which incorrectly listed the operation `restore_tables` instead of `recreate_tables`, causing Dialyzer to reject valid calls and accept invalid ones. Own Id: OTP-20442 Related Id(s): PR-11755 > #### Full runtime dependencies of mnesia-4.27.1 > > erts-9.0, kernel-5.3, stdlib-5.0 # odbc-2.17.2 The odbc-2.17.2 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - Fix error handling to avoid possible memory issues that could cause odbc port program to fail. Own Id: OTP-20439 Related Id(s): PR-11808 > #### Full runtime dependencies of odbc-2.17.2 > > erts-6.0, kernel-3.0, stdlib-2.0 # public_key-1.21.8 The public_key-1.21.8 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - Enforce the RFC 5280 basic-constraints CA checks for X.509 version 1 and version 2 certificates during certificate path validation. A v1/v2 certificate carries no extensions and therefore no basicConstraints, so it must never be accepted as a CA; such a certificate is now rejected in issuer position with {bad_cert, missing_basic_constraint} while remaining valid as a leaf. This closes the version-1 path left uncovered by the earlier CVE-2026-42789 fix. Own Id: OTP-20423 Related Id(s): PR-11727, CVE-2026-42789 > #### Full runtime dependencies of public_key-1.21.8 > > asn1-5.0, crypto-5.8, erts-13.0, kernel-8.0, stdlib-4.0 # snmp-5.20.6 The snmp-5.20.6 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - The SNMP agent no longer fails to answer an SNMPv3 message whose msgUserName matches the configured terminating-discovery trigger_username (by default the empty string) and whose msgAuthoritativeEngineID is the agent's own engine ID. Such a message is not a stage-1 discovery request, but the agent treated it as one and then failed while generating the report, logging a configuration error and discarding the request without responding. The agent now answers it with a usmStatsUnknownUserNames report, as prescribed by RFC 3414, section 3.2. As a consequence of the same change, a message carrying the trigger user name together with an unknown, non-empty engine ID is now answered with a usmStatsUnknownEngineIDs report instead of being silently discarded. Own Id: OTP-20427 Related Id(s): ERIERL-1362, PR-11823 - The byte-length bounds added in OTP-20346 for varbind values now apply to every integer field decoded by snmp_pdus: the v3 header fields msgID, msgMaxSize and msgSecurityModel, the USM security parameters msgAuthoritativeEngineBoots and msgAuthoritativeEngineTime, and the PDU fields request-id, error-status, error-index, non-repeaters, max-repetitions, generic-trap and specific-trap. Each field accepts at most the number of BER content octets that its type requires, instead of an arbitrary number of octets that were converted into a large integer. An over-long integer is now signalled with an exit rather than a throw. Code that calls the exported snmp_pdus decode functions inside a catch will receive {'EXIT', Reason} where it previously received the thrown term directly. Inside the agent and manager, such a message is now discarded and counted in snmpInASNParseErrs; previously it caused a case_clause failure during message processing. Own Id: OTP-20428 Related Id(s): GH-SA-q7cq-pfgf-5hr7, PR-11824, OTP-20346 > #### Full runtime dependencies of snmp-5.20.6 > > asn1-5.4, crypto-4.6, erts-12.0, kernel-8.0, mnesia-4.12, > runtime_tools-1.8.14, stdlib-5.0 # ssh-6.0.7 The ssh-6.0.7 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - Fixed a bug where SSH CLI sessions using {shell, {shell, start, []}} did not handle latin1-encoded put_chars messages from the Erlang shell. This caused exception output (e.g. "\*\* exception error: ...") to not be displayed on the SSH client, and {unhandled_request, ...} messages to appear on the daemon host. Own Id: OTP-20359 Related Id(s): PR-11474 - Fixed the following bugs in the SSH application: - The SFTP client (ssh_sftp) checked the channel state record against 0 instead of the exit status integer when handling an exit_status message. The success branch was therefore dead code, and every SFTP subsystem exit ??? including a clean exit with status 0 ??? was reported to callers as an error. A clean exit is now reported as a normal stop. - The SSH_FXP_EXTENDED_REPLY decoder in ssh_xfer bound only a single byte of the reply payload instead of the full binary (the pattern was missing a /binary specifier). This made SFTP extension operations such as statvfs@REDACTED fail with a function_clause crash whenever the payload was not exactly one byte. - The TCP forwarding acceptor supervisor used the default permanent restart strategy, causing the acceptor to be restarted unnecessarily when a forwarded socket closed normally. The child now uses a transient restart strategy. - The keyboard_interact_fun handling returned the atom nok instead of not_ok on an invalid response, causing a crash during SSH message encoding instead of a clean authentication rejection. - The ssh*client_channel catch pattern error:{undef, *} never matched Erlang's actual error:undef exception, so a missing optional handle_call/3 or handle_cast/2 callback crashed the channel process instead of being ignored. The catch now matches error:undef and uses erlang:function_exported/3 to tell a genuinely missing optional callback (ignored, as before) from an undef raised deeper inside an implemented callback (now re-raised instead of being silently swallowed). - Both ssh_tcpip_forward_client and ssh_tcpip_forward_srv called gen_tcp:close(undefined) in terminate/2 when the forwarding socket was never established (or already closed), producing noisy crash reports on normal forward teardown. terminate/2 now handles the undefined socket. Own Id: OTP-20360 Related Id(s): PR-11561 - Fixed an SSH port-forwarding acceptor crash triggered by a peer that connects and immediately resets the connection. Transient TCP errors from accept and peername are now handled gracefully instead of terminating the acceptor. Own Id: OTP-20392 Related Id(s): PR-11720 - When the max_channels limit is reached for a port-forwarding channel (direct-tcpip or forwarded-tcpip), the SSH daemon now refuses the individual channel with SSH_MSG_CHANNEL_OPEN_FAILURE and keeps the connection alive, instead of terminating the whole SSH connection. Port-forwarding channels now behave like session channels, which already survived the limit, and this matches OpenSSH. Applications that relied on the connection being closed when the channel limit was reached must instead handle the channel-open failure. Own Id: OTP-20420 Related Id(s): PR-11708 *** POTENTIAL INCOMPATIBILITY *** > #### Full runtime dependencies of ssh-6.0.7 > > crypto-5.7, erts-14.0, kernel-10.3, public_key-1.6.1, runtime_tools-1.15.1, > stdlib-8.0 # ssl-11.7.8 Note! The ssl-11.7.8 application _cannot_ be applied independently of other applications on an arbitrary OTP 29 installation. On a full OTP 29 installation, also the following runtime dependency has to be satisfied: -- public_key-1.21.1 (first satisfied in OTP 29.0.1) ## Fixed Bugs and Malfunctions - DoS attack prevention missed corner case, now fall back to the incomplete peer-only chain handling when paths/2 yields no path, restoring the OTP 28 behavior and matching OpenSSL, curl and browsers. The digraph and its chain-length limit from PR #11343 are unchanged, so the DoS protection is preserved; the extra cost is one trust-store lookup, as for a leaf-only chain. Own Id: OTP-20394 Related Id(s): GH-11620, PR-11662 - The equivalent options dh and dhfile where unintentionally ignored and the default value was used instead. Own Id: OTP-20408 Related Id(s): ERIERL-1367, PR-11692 - Redesign TLS-1.3 auto client ticket handling to adhere to RFC single-use by consuming a ticket when offered removing it from the client ticket store. This resolves unnecessary connections errors for concurrent client connections that previously could end up trying to use the same ticket, or tickets being evicted form the client store when a client still needed to look it up. Own Id: OTP-20418 Related Id(s): GH-11702, GH-11709, PR-11707 - Validate the handshake message type when decoding TLS-1.3 hello extensions (RFC 8446 / RFC 9846). A malicious or man-in-the-middle TLS-1.3 server could send a NewSessionTicket carrying a zero-length early_data extension, which a client with automatic session-ticket management (session_tickets => auto) stored and then crashed on during a later resumption, taking down the node-global client ticket store and disrupting TLS-1.3 resumption for the whole node. Extensions are now decoded only in the handshake messages in which they are permitted, so such a ticket is ignored instead of poisoning the store. This avoids a denial-of-service possibility. Own Id: OTP-20426 Related Id(s): PR-11773, CVE-2026-94200 - Fixed a TLS/DTLS session resumption flaw ((D)TLS-1.2 abbreviated handshake) where an SNI-aware server could resume a cached session even when the resumption request's server_name differed from the one that established the session, violating RFC 6066 ??3. In virtual-hosting deployments where several SNI names share one server certificate but apply different client-authentication trust, a client could resume a session established under one SNI name while connecting under another ??? bypassing the second virtual service's client-authentication boundary and skipping the certificate exchange. The server now binds the establishing SNI hostname to the session and refuses resumption (falling back to a full handshake) when the requested SNI differs. A request without SNI only matches a session established without SNI, so ordinary non-SNI resumption is unaffected. As a related correction, a listener's derived reuse_sessions default (enabled under verify_none) is no longer carried into an SNI virtual service that switches to verify_peer; such a service must enable reuse_sessions explicitly. Own Id: OTP-20445 Related Id(s): PR-11773, CVE-2026-105236 > #### Full runtime dependencies of ssl-11.7.8 > > crypto-5.8, erts-16.0, inets-5.10.7, kernel-10.3, public_key-1.21.1, > runtime_tools-1.15.1, stdlib-7.0 # stdlib-8.1.1 The stdlib-8.1.1 application can be applied independently of other applications on a full OTP 29 installation. ## Fixed Bugs and Malfunctions - A loop with Unreachable Exit Condition ('Infinite Loop') vulnerability in the `erl_tar` module allowed an attacker who supplied a tar archive to cause a denial of service via a crafted GNU sparse member. This has been corrected. In addition, when attempting to extract a tar file with a legal GNU sparse member, extraction could fail with a `badarg` exception. That has also been corrected. Own Id: OTP-20447 Related Id(s): PR-11791, CVE-2026-96596 > #### Full runtime dependencies of stdlib-8.1.1 > > compiler-5.0, crypto-4.5, erts-16.0.3, kernel-11.0, sasl-3.0, > syntax_tools-3.2.1 # Thanks to Alexey Aristov, Daniel Gorin, Marcelino Alberdi Pereira, Marko Mindek, Miguel Rubinos Rodr??guez From otp@REDACTED Wed Oct 14 17:10:33 2026 From: otp@REDACTED (Erlang/OTP) Date: Wed, 14 Oct 2026 17:10:33 +0200 (CEST) Subject: Patch Package OTP 28.5.0.8 Released Message-ID: <20261014151033.837582C53E@hel.cslab.ericsson.net> Patch Package: OTP 28.5.0.8 Git Tag: OTP-28.5.0.8 Date: 2026-10-14 Trouble Report Id: OTP-20359, OTP-20360, OTP-20385, OTP-20392, OTP-20394, OTP-20408, OTP-20418, OTP-20420, OTP-20423, OTP-20426, OTP-20427, OTP-20428, OTP-20437, OTP-20438, OTP-20439, OTP-20442, OTP-20444, OTP-20445, OTP-20456 Seq num: CVE-2026-105236, CVE-2026-42789, CVE-2026-48856, CVE-2026-94200, ERIERL-1362, ERIERL-1367, GH-11620, GH-11702, GH-11709, GH-11735, GH-11748, GH-11762, GH-SA-m75x-4vwg-ggjh, GH-SA-q7cq-pfgf-5hr7, OTP-20155, OTP-20346, PR-11474, PR-11561, PR-11623, PR-11662, PR-11692, PR-11707, PR-11708, PR-11720, PR-11727, PR-11753, PR-11755, PR-11763, PR-11767, PR-11773, PR-11808, PR-11823, PR-11824, PR-11825 System: OTP Release: 28 Application: compiler-9.0.6.4, dialyzer-5.4.0.2, erts-16.4.0.7, inets-9.6.2.4, mnesia-4.25.3.4, odbc-2.16.1.1, public_key-1.20.3.6, snmp-5.20.2.3, ssh-5.5.2.7, ssl-11.6.0.7 Predecessor: OTP 28.5.0.7 Check out the git tag OTP-28.5.0.8, and build a full OTP system including documentation. Apply one or more applications from this build as patches to your installation using the 'otp_patch_apply' tool. For information on install requirements, see descriptions for each application version below. # POTENTIAL INCOMPATIBILITIES - When the max_channels limit is reached for a port-forwarding channel (direct-tcpip or forwarded-tcpip), the SSH daemon now refuses the individual channel with SSH_MSG_CHANNEL_OPEN_FAILURE and keeps the connection alive, instead of terminating the whole SSH connection. Port-forwarding channels now behave like session channels, which already survived the limit, and this matches OpenSSH. Applications that relied on the connection being closed when the channel limit was reached must instead handle the channel-open failure. Own Id: OTP-20420 Application(s): ssh Related Id(s): PR-11708 # compiler-9.0.6.4 The compiler-9.0.6.4 application can be applied independently of other applications on a full OTP 28 installation. ## Fixed Bugs and Malfunctions - Compilation of a function with thousands of clauses would be very slow. Own Id: OTP-20437 Related Id(s): GH-11735, PR-11767 - Sometimes compiling with `deterministic` would not guarantee generation of identical BEAM files for every build. Own Id: OTP-20438 Related Id(s): GH-11748, PR-11753 > #### Full runtime dependencies of compiler-9.0.6.4 > > crypto-5.1, erts-13.0, kernel-8.4, stdlib-6.0 # dialyzer-5.4.0.2 The dialyzer-5.4.0.2 application can be applied independently of other applications on a full OTP 28 installation. ## Fixed Bugs and Malfunctions - Dialyzer will now avoid an infinite loop when multiple nominal types with the same structure are analyzed together. Own Id: OTP-20444 Related Id(s): GH-11762, PR-11763 > #### Full runtime dependencies of dialyzer-5.4.0.2 > > compiler-8.0, erts-12.0, kernel-8.0, stdlib-5.0, syntax_tools-2.0 # erts-16.4.0.7 The erts-16.4.0.7 application can be applied independently of other applications on a full OTP 28 installation. ## Fixed Bugs and Malfunctions - Two trace sessions that trace `garbage_collection` on the same process crash the emulator on the first collection. `trace_gc()` in `erl_trace.c` builds the GC info list on a temporary heap for the first session and frees it inside the session loop. The next session reuses `msg`, which now points into freed memory. The memory is now freed after the session loop, which removes the use-after-free. Own Id: OTP-20385 Related Id(s): PR-11623 > #### Full runtime dependencies of erts-16.4.0.7 > > kernel-9.0, sasl-3.3, stdlib-4.1 # inets-9.6.2.4 The inets-9.6.2.4 application can be applied independently of other applications on a full OTP 28 installation. ## Fixed Bugs and Malfunctions - Credentials supplied in the userinfo component of a request URI (`http://user:password@REDACTED/path`) were still sent to the redirect target when `httpc` followed a cross-origin redirect. The userinfo component is now cleared together with the sensitive headers whenever the redirect target differs in host or port from the original request. Redirects that stay within the same origin are unaffected and still carry the credentials. Own Id: OTP-20456 Related Id(s): GH-SA-m75x-4vwg-ggjh, PR-11825, CVE-2026-48856, OTP-20155 > #### Full runtime dependencies of inets-9.6.2.4 > > erts-14.0, kernel-9.0, mnesia-4.12, public_key-1.13, runtime_tools-1.8.14, > ssl-9.0, stdlib-5.0, stdlib-6.0 # mnesia-4.25.3.4 The mnesia-4.25.3.4 application can be applied independently of other applications on a full OTP 28 installation. ## Fixed Bugs and Malfunctions - Fixed the type specification for mnesia:restore/2, which incorrectly listed the operation `restore_tables` instead of `recreate_tables`, causing Dialyzer to reject valid calls and accept invalid ones. Own Id: OTP-20442 Related Id(s): PR-11755 > #### Full runtime dependencies of mnesia-4.25.3.4 > > erts-9.0, kernel-5.3, stdlib-5.0 # odbc-2.16.1.1 The odbc-2.16.1.1 application can be applied independently of other applications on a full OTP 28 installation. ## Fixed Bugs and Malfunctions - Fix error handling to avoid possible memory issues that could cause odbc port program to fail. Own Id: OTP-20439 Related Id(s): PR-11808 > #### Full runtime dependencies of odbc-2.16.1.1 > > erts-6.0, kernel-3.0, stdlib-2.0 # public_key-1.20.3.6 Note! The public_key-1.20.3.6 application _cannot_ be applied independently of other applications on an arbitrary OTP 28 installation. On a full OTP 28 installation, also the following runtime dependency has to be satisfied: -- crypto-5.8 (first satisfied in OTP 28.3) ## Fixed Bugs and Malfunctions - Enforce the RFC 5280 basic-constraints CA checks for X.509 version 1 and version 2 certificates during certificate path validation. A v1/v2 certificate carries no extensions and therefore no basicConstraints, so it must never be accepted as a CA; such a certificate is now rejected in issuer position with {bad_cert, missing_basic_constraint} while remaining valid as a leaf. This closes the version-1 path left uncovered by the earlier CVE-2026-42789 fix. Own Id: OTP-20423 Related Id(s): PR-11727, CVE-2026-42789 > #### Full runtime dependencies of public_key-1.20.3.6 > > asn1-5.0, crypto-5.8, erts-13.0, kernel-8.0, stdlib-4.0 # snmp-5.20.2.3 The snmp-5.20.2.3 application can be applied independently of other applications on a full OTP 28 installation. ## Fixed Bugs and Malfunctions - The SNMP agent no longer fails to answer an SNMPv3 message whose msgUserName matches the configured terminating-discovery trigger_username (by default the empty string) and whose msgAuthoritativeEngineID is the agent's own engine ID. Such a message is not a stage-1 discovery request, but the agent treated it as one and then failed while generating the report, logging a configuration error and discarding the request without responding. The agent now answers it with a usmStatsUnknownUserNames report, as prescribed by RFC 3414, section 3.2. As a consequence of the same change, a message carrying the trigger user name together with an unknown, non-empty engine ID is now answered with a usmStatsUnknownEngineIDs report instead of being silently discarded. Own Id: OTP-20427 Related Id(s): ERIERL-1362, PR-11823 - The byte-length bounds added in OTP-20346 for varbind values now apply to every integer field decoded by snmp_pdus: the v3 header fields msgID, msgMaxSize and msgSecurityModel, the USM security parameters msgAuthoritativeEngineBoots and msgAuthoritativeEngineTime, and the PDU fields request-id, error-status, error-index, non-repeaters, max-repetitions, generic-trap and specific-trap. Each field accepts at most the number of BER content octets that its type requires, instead of an arbitrary number of octets that were converted into a large integer. An over-long integer is now signalled with an exit rather than a throw. Code that calls the exported snmp_pdus decode functions inside a catch will receive {'EXIT', Reason} where it previously received the thrown term directly. Inside the agent and manager, such a message is now discarded and counted in snmpInASNParseErrs; previously it caused a case_clause failure during message processing. Own Id: OTP-20428 Related Id(s): GH-SA-q7cq-pfgf-5hr7, PR-11824, OTP-20346 > #### Full runtime dependencies of snmp-5.20.2.3 > > asn1-5.4, crypto-4.6, erts-12.0, kernel-8.0, mnesia-4.12, > runtime_tools-1.8.14, stdlib-5.0 # ssh-5.5.2.7 Note! The ssh-5.5.2.7 application _cannot_ be applied independently of other applications on an arbitrary OTP 28 installation. On a full OTP 28 installation, also the following runtime dependency has to be satisfied: -- crypto-5.7 (first satisfied in OTP 28.1) ## Fixed Bugs and Malfunctions - Fixed a bug where SSH CLI sessions using {shell, {shell, start, []}} did not handle latin1-encoded put_chars messages from the Erlang shell. This caused exception output (e.g. "\*\* exception error: ...") to not be displayed on the SSH client, and {unhandled_request, ...} messages to appear on the daemon host. Own Id: OTP-20359 Related Id(s): PR-11474 - Fixed the following bugs in the SSH application: - The SFTP client (ssh_sftp) checked the channel state record against 0 instead of the exit status integer when handling an exit_status message. The success branch was therefore dead code, and every SFTP subsystem exit ??? including a clean exit with status 0 ??? was reported to callers as an error. A clean exit is now reported as a normal stop. - The SSH_FXP_EXTENDED_REPLY decoder in ssh_xfer bound only a single byte of the reply payload instead of the full binary (the pattern was missing a /binary specifier). This made SFTP extension operations such as statvfs@REDACTED fail with a function_clause crash whenever the payload was not exactly one byte. - The TCP forwarding acceptor supervisor used the default permanent restart strategy, causing the acceptor to be restarted unnecessarily when a forwarded socket closed normally. The child now uses a transient restart strategy. - The keyboard_interact_fun handling returned the atom nok instead of not_ok on an invalid response, causing a crash during SSH message encoding instead of a clean authentication rejection. - The ssh*client_channel catch pattern error:{undef, *} never matched Erlang's actual error:undef exception, so a missing optional handle_call/3 or handle_cast/2 callback crashed the channel process instead of being ignored. The catch now matches error:undef and uses erlang:function_exported/3 to tell a genuinely missing optional callback (ignored, as before) from an undef raised deeper inside an implemented callback (now re-raised instead of being silently swallowed). - Both ssh_tcpip_forward_client and ssh_tcpip_forward_srv called gen_tcp:close(undefined) in terminate/2 when the forwarding socket was never established (or already closed), producing noisy crash reports on normal forward teardown. terminate/2 now handles the undefined socket. Own Id: OTP-20360 Related Id(s): PR-11561 - Fixed an SSH port-forwarding acceptor crash triggered by a peer that connects and immediately resets the connection. Transient TCP errors from accept and peername are now handled gracefully instead of terminating the acceptor. Own Id: OTP-20392 Related Id(s): PR-11720 - When the max_channels limit is reached for a port-forwarding channel (direct-tcpip or forwarded-tcpip), the SSH daemon now refuses the individual channel with SSH_MSG_CHANNEL_OPEN_FAILURE and keeps the connection alive, instead of terminating the whole SSH connection. Port-forwarding channels now behave like session channels, which already survived the limit, and this matches OpenSSH. Applications that relied on the connection being closed when the channel limit was reached must instead handle the channel-open failure. Own Id: OTP-20420 Related Id(s): PR-11708 *** POTENTIAL INCOMPATIBILITY *** > #### Full runtime dependencies of ssh-5.5.2.7 > > crypto-5.7, erts-14.0, kernel-10.3, public_key-1.6.1, runtime_tools-1.15.1, > stdlib-5.0, stdlib-6.0 # ssl-11.6.0.7 Note! The ssl-11.6.0.7 application _cannot_ be applied independently of other applications on an arbitrary OTP 28 installation. On a full OTP 28 installation, also the following runtime dependencies have to be satisfied: -- crypto-5.8 (first satisfied in OTP 28.3) -- public_key-1.20.3.1 (first satisfied in OTP 28.5.0.1) ## Fixed Bugs and Malfunctions - DoS attack prevention missed corner case, now fall back to the incomplete peer-only chain handling when paths/2 yields no path, restoring the OTP 28 behavior and matching OpenSSL, curl and browsers. The digraph and its chain-length limit from PR #11343 are unchanged, so the DoS protection is preserved; the extra cost is one trust-store lookup, as for a leaf-only chain. Own Id: OTP-20394 Related Id(s): GH-11620, PR-11662 - The equivalent options dh and dhfile where unintentionally ignored and the default value was used instead. Own Id: OTP-20408 Related Id(s): ERIERL-1367, PR-11692 - Redesign TLS-1.3 auto client ticket handling to adhere to RFC single-use by consuming a ticket when offered removing it from the client ticket store. This resolves unnecessary connections errors for concurrent client connections that previously could end up trying to use the same ticket, or tickets being evicted form the client store when a client still needed to look it up. Own Id: OTP-20418 Related Id(s): GH-11702, GH-11709, PR-11707 - Validate the handshake message type when decoding TLS-1.3 hello extensions (RFC 8446 / RFC 9846). A malicious or man-in-the-middle TLS-1.3 server could send a NewSessionTicket carrying a zero-length early_data extension, which a client with automatic session-ticket management (session_tickets => auto) stored and then crashed on during a later resumption, taking down the node-global client ticket store and disrupting TLS-1.3 resumption for the whole node. Extensions are now decoded only in the handshake messages in which they are permitted, so such a ticket is ignored instead of poisoning the store. This avoids a denial-of-service possibility. Own Id: OTP-20426 Related Id(s): PR-11773, CVE-2026-94200 - Fixed a TLS/DTLS session resumption flaw ((D)TLS-1.2 abbreviated handshake) where an SNI-aware server could resume a cached session even when the resumption request's server_name differed from the one that established the session, violating RFC 6066 ??3. In virtual-hosting deployments where several SNI names share one server certificate but apply different client-authentication trust, a client could resume a session established under one SNI name while connecting under another ??? bypassing the second virtual service's client-authentication boundary and skipping the certificate exchange. The server now binds the establishing SNI hostname to the session and refuses resumption (falling back to a full handshake) when the requested SNI differs. A request without SNI only matches a session established without SNI, so ordinary non-SNI resumption is unaffected. As a related correction, a listener's derived reuse_sessions default (enabled under verify_none) is no longer carried into an SNI virtual service that switches to verify_peer; such a service must enable reuse_sessions explicitly. Own Id: OTP-20445 Related Id(s): PR-11773, CVE-2026-105236 > #### Full runtime dependencies of ssl-11.6.0.7 > > crypto-5.8, erts-16.0, inets-5.10.7, kernel-10.3, public_key-1.20.3.1, > runtime_tools-1.15.1, stdlib-7.0 # Thanks to Alexey Aristov, Daniel Gorin, Marcelino Alberdi Pereira, Marko Mindek, Miguel Rubinos Rodr??guez From otp@REDACTED Wed Oct 14 17:37:53 2026 From: otp@REDACTED (Erlang/OTP) Date: Wed, 14 Oct 2026 17:37:53 +0200 (CEST) Subject: Patch Package OTP 27.3.4.19 Released Message-ID: <20261014153753.ABD3C2C548@hel.cslab.ericsson.net> Patch Package: OTP 27.3.4.19 Git Tag: OTP-27.3.4.19 Date: 2026-10-14 Trouble Report Id: OTP-20360, OTP-20385, OTP-20392, OTP-20394, OTP-20408, OTP-20418, OTP-20420, OTP-20423, OTP-20426, OTP-20427, OTP-20428, OTP-20430, OTP-20437, OTP-20438, OTP-20439, OTP-20442, OTP-20445, OTP-20456 Seq num: CVE-2026-105236, CVE-2026-42789, CVE-2026-48856, CVE-2026-94200, ERIERL-1362, ERIERL-1367, GH-11620, GH-11702, GH-11709, GH-11735, GH-11748, GH-SA-m75x-4vwg-ggjh, GH-SA-q7cq-pfgf-5hr7, OTP-20155, OTP-20346, PR-11561, PR-11623, PR-11662, PR-11692, PR-11707, PR-11708, PR-11720, PR-11727, PR-11751, PR-11753, PR-11755, PR-11767, PR-11773, PR-11808, PR-11823, PR-11824, PR-11825 System: OTP Release: 27 Application: compiler-8.6.1.8, erts-15.2.7.14, inets-9.3.2.8, mnesia-4.23.5.6, odbc-2.15.0.1, public_key-1.17.1.7, snmp-5.18.2.2, ssh-5.2.11.14, ssl-11.2.12.14 Predecessor: OTP 27.3.4.18 Check out the git tag OTP-27.3.4.19, and build a full OTP system including documentation. Apply one or more applications from this build as patches to your installation using the 'otp_patch_apply' tool. For information on install requirements, see descriptions for each application version below. # POTENTIAL INCOMPATIBILITIES - When the max_channels limit is reached for a port-forwarding channel (direct-tcpip or forwarded-tcpip), the SSH daemon now refuses the individual channel with SSH_MSG_CHANNEL_OPEN_FAILURE and keeps the connection alive, instead of terminating the whole SSH connection. Port-forwarding channels now behave like session channels, which already survived the limit, and this matches OpenSSH. Applications that relied on the connection being closed when the channel limit was reached must instead handle the channel-open failure. Own Id: OTP-20420 Application(s): ssh Related Id(s): PR-11708 # compiler-8.6.1.8 The compiler-8.6.1.8 application can be applied independently of other applications on a full OTP 27 installation. ## Fixed Bugs and Malfunctions - Compilation of a function with thousands of clauses would be very slow. Own Id: OTP-20437 Related Id(s): GH-11735, PR-11767 - Sometimes compiling with `deterministic` would not guarantee generation of identical BEAM files for every build. Own Id: OTP-20438 Related Id(s): GH-11748, PR-11753 > #### Full runtime dependencies of compiler-8.6.1.8 > > crypto-5.1, erts-13.0, kernel-8.4, stdlib-6.0 # erts-15.2.7.14 The erts-15.2.7.14 application can be applied independently of other applications on a full OTP 27 installation. ## Fixed Bugs and Malfunctions - Two trace sessions that trace `garbage_collection` on the same process crash the emulator on the first collection. `trace_gc()` in `erl_trace.c` builds the GC info list on a temporary heap for the first session and frees it inside the session loop. The next session reuses `msg`, which now points into freed memory. The memory is now freed after the session loop, which removes the use-after-free. Own Id: OTP-20385 Related Id(s): PR-11623 > #### Full runtime dependencies of erts-15.2.7.14 > > kernel-9.0, sasl-3.3, stdlib-4.1 # inets-9.3.2.8 The inets-9.3.2.8 application can be applied independently of other applications on a full OTP 27 installation. ## Fixed Bugs and Malfunctions - Credentials supplied in the userinfo component of a request URI (`http://user:password@REDACTED/path`) were still sent to the redirect target when `httpc` followed a cross-origin redirect. The userinfo component is now cleared together with the sensitive headers whenever the redirect target differs in host or port from the original request. Redirects that stay within the same origin are unaffected and still carry the credentials. Own Id: OTP-20456 Related Id(s): GH-SA-m75x-4vwg-ggjh, PR-11825, CVE-2026-48856, OTP-20155 > #### Full runtime dependencies of inets-9.3.2.8 > > erts-14.0, kernel-9.0, mnesia-4.12, public_key-1.13, runtime_tools-1.8.14, > ssl-9.0, stdlib-5.0, stdlib-6.0 # mnesia-4.23.5.6 The mnesia-4.23.5.6 application can be applied independently of other applications on a full OTP 27 installation. ## Fixed Bugs and Malfunctions - Fixed the type specification for mnesia:restore/2, which incorrectly listed the operation `restore_tables` instead of `recreate_tables`, causing Dialyzer to reject valid calls and accept invalid ones. Own Id: OTP-20442 Related Id(s): PR-11755 > #### Full runtime dependencies of mnesia-4.23.5.6 > > erts-9.0, kernel-5.3, stdlib-5.0 # odbc-2.15.0.1 The odbc-2.15.0.1 application can be applied independently of other applications on a full OTP 27 installation. ## Fixed Bugs and Malfunctions - Fix error handling to avoid possible memory issues that could cause odbc port program to fail. Own Id: OTP-20439 Related Id(s): PR-11808 > #### Full runtime dependencies of odbc-2.15.0.1 > > erts-6.0, kernel-3.0, stdlib-2.0 # public_key-1.17.1.7 The public_key-1.17.1.7 application can be applied independently of other applications on a full OTP 27 installation. ## Fixed Bugs and Malfunctions - Enforce the RFC 5280 basic-constraints CA checks for X.509 version 1 and version 2 certificates during certificate path validation. A v1/v2 certificate carries no extensions and therefore no basicConstraints, so it must never be accepted as a CA; such a certificate is now rejected in issuer position with {bad_cert, missing_basic_constraint} while remaining valid as a leaf. This closes the version-1 path left uncovered by the earlier CVE-2026-42789 fix. Own Id: OTP-20423 Related Id(s): PR-11727, CVE-2026-42789 > #### Full runtime dependencies of public_key-1.17.1.7 > > asn1-5.0, crypto-5.0, erts-13.0, kernel-8.0, stdlib-4.0 # snmp-5.18.2.2 The snmp-5.18.2.2 application can be applied independently of other applications on a full OTP 27 installation. ## Fixed Bugs and Malfunctions - The SNMP agent no longer fails to answer an SNMPv3 message whose msgUserName matches the configured terminating-discovery trigger_username (by default the empty string) and whose msgAuthoritativeEngineID is the agent's own engine ID. Such a message is not a stage-1 discovery request, but the agent treated it as one and then failed while generating the report, logging a configuration error and discarding the request without responding. The agent now answers it with a usmStatsUnknownUserNames report, as prescribed by RFC 3414, section 3.2. As a consequence of the same change, a message carrying the trigger user name together with an unknown, non-empty engine ID is now answered with a usmStatsUnknownEngineIDs report instead of being silently discarded. Own Id: OTP-20427 Related Id(s): ERIERL-1362, PR-11823 - The byte-length bounds added in OTP-20346 for varbind values now apply to every integer field decoded by snmp_pdus: the v3 header fields msgID, msgMaxSize and msgSecurityModel, the USM security parameters msgAuthoritativeEngineBoots and msgAuthoritativeEngineTime, and the PDU fields request-id, error-status, error-index, non-repeaters, max-repetitions, generic-trap and specific-trap. Each field accepts at most the number of BER content octets that its type requires, instead of an arbitrary number of octets that were converted into a large integer. An over-long integer is now signalled with an exit rather than a throw. Code that calls the exported snmp_pdus decode functions inside a catch will receive {'EXIT', Reason} where it previously received the thrown term directly. Inside the agent and manager, such a message is now discarded and counted in snmpInASNParseErrs; previously it caused a case_clause failure during message processing. Own Id: OTP-20428 Related Id(s): GH-SA-q7cq-pfgf-5hr7, PR-11824, OTP-20346 > #### Full runtime dependencies of snmp-5.18.2.2 > > crypto-4.6, erts-12.0, kernel-8.0, mnesia-4.12, runtime_tools-1.8.14, > stdlib-5.0 # ssh-5.2.11.14 The ssh-5.2.11.14 application can be applied independently of other applications on a full OTP 27 installation. ## Fixed Bugs and Malfunctions - Fixed the following bugs in the SSH application: - The SFTP client (ssh_sftp) checked the channel state record against 0 instead of the exit status integer when handling an exit_status message. The success branch was therefore dead code, and every SFTP subsystem exit ??? including a clean exit with status 0 ??? was reported to callers as an error. A clean exit is now reported as a normal stop. - The SSH_FXP_EXTENDED_REPLY decoder in ssh_xfer bound only a single byte of the reply payload instead of the full binary (the pattern was missing a /binary specifier). This made SFTP extension operations such as statvfs@REDACTED fail with a function_clause crash whenever the payload was not exactly one byte. - The TCP forwarding acceptor supervisor used the default permanent restart strategy, causing the acceptor to be restarted unnecessarily when a forwarded socket closed normally. The child now uses a transient restart strategy. - The keyboard_interact_fun handling returned the atom nok instead of not_ok on an invalid response, causing a crash during SSH message encoding instead of a clean authentication rejection. - The ssh*client_channel catch pattern error:{undef, *} never matched Erlang's actual error:undef exception, so a missing optional handle_call/3 or handle_cast/2 callback crashed the channel process instead of being ignored. The catch now matches error:undef and uses erlang:function_exported/3 to tell a genuinely missing optional callback (ignored, as before) from an undef raised deeper inside an implemented callback (now re-raised instead of being silently swallowed). - Both ssh_tcpip_forward_client and ssh_tcpip_forward_srv called gen_tcp:close(undefined) in terminate/2 when the forwarding socket was never established (or already closed), producing noisy crash reports on normal forward teardown. terminate/2 now handles the undefined socket. Own Id: OTP-20360 Related Id(s): PR-11561 - Fixed an SSH port-forwarding acceptor crash triggered by a peer that connects and immediately resets the connection. Transient TCP errors from accept and peername are now handled gracefully instead of terminating the acceptor. Own Id: OTP-20392 Related Id(s): PR-11720 - When the max_channels limit is reached for a port-forwarding channel (direct-tcpip or forwarded-tcpip), the SSH daemon now refuses the individual channel with SSH_MSG_CHANNEL_OPEN_FAILURE and keeps the connection alive, instead of terminating the whole SSH connection. Port-forwarding channels now behave like session channels, which already survived the limit, and this matches OpenSSH. Applications that relied on the connection being closed when the channel limit was reached must instead handle the channel-open failure. Own Id: OTP-20420 Related Id(s): PR-11708 *** POTENTIAL INCOMPATIBILITY *** > #### Full runtime dependencies of ssh-5.2.11.14 > > crypto-5.0, erts-14.0, kernel-9.0, public_key-1.6.1, runtime_tools-1.15.1, > stdlib-5.0, stdlib-6.0 # ssl-11.2.12.14 Note! The ssl-11.2.12.14 application _cannot_ be applied independently of other applications on an arbitrary OTP 27 installation. On a full OTP 27 installation, also the following runtime dependency has to be satisfied: -- public_key-1.17.1.3 (first satisfied in OTP 27.3.4.12) ## Fixed Bugs and Malfunctions - DoS attack prevention missed corner case, now fall back to the incomplete peer-only chain handling when paths/2 yields no path, restoring the OTP 28 behavior and matching OpenSSL, curl and browsers. The digraph and its chain-length limit from PR #11343 are unchanged, so the DoS protection is preserved; the extra cost is one trust-store lookup, as for a leaf-only chain. Own Id: OTP-20394 Related Id(s): GH-11620, PR-11662 - The equivalent options dh and dhfile where unintentionally ignored and the default value was used instead. Own Id: OTP-20408 Related Id(s): ERIERL-1367, PR-11692 - Redesign TLS-1.3 auto client ticket handling to adhere to RFC single-use by consuming a ticket when offered removing it from the client ticket store. This resolves unnecessary connections errors for concurrent client connections that previously could end up trying to use the same ticket, or tickets being evicted form the client store when a client still needed to look it up. Own Id: OTP-20418 Related Id(s): GH-11702, GH-11709, PR-11707 - Validate the handshake message type when decoding TLS-1.3 hello extensions (RFC 8446 / RFC 9846). A malicious or man-in-the-middle TLS-1.3 server could send a NewSessionTicket carrying a zero-length early_data extension, which a client with automatic session-ticket management (session_tickets => auto) stored and then crashed on during a later resumption, taking down the node-global client ticket store and disrupting TLS-1.3 resumption for the whole node. Extensions are now decoded only in the handshake messages in which they are permitted, so such a ticket is ignored instead of poisoning the store. This avoids a denial-of-service possibility. Own Id: OTP-20426 Related Id(s): PR-11773, CVE-2026-94200 - Fix a tls_sender crash during Erlang distribution over TLS (-proto_dist inet_tls). When a distribution peer disappeared while data was still being sent to it, the sender process crashed with a function_clause in gen:reply/2 instead of tearing the connection down cleanly. As a side effect the surviving node reported a nodedown_reason of {function_clause, ...} rather than a normal teardown reason, which could confuse code that distinguishes a planned shutdown from a genuine failure. Own Id: OTP-20430 Related Id(s): PR-11751 - Fixed a TLS/DTLS session resumption flaw ((D)TLS-1.2 abbreviated handshake) where an SNI-aware server could resume a cached session even when the resumption request's server_name differed from the one that established the session, violating RFC 6066 ??3. In virtual-hosting deployments where several SNI names share one server certificate but apply different client-authentication trust, a client could resume a session established under one SNI name while connecting under another ??? bypassing the second virtual service's client-authentication boundary and skipping the certificate exchange. The server now binds the establishing SNI hostname to the session and refuses resumption (falling back to a full handshake) when the requested SNI differs. A request without SNI only matches a session established without SNI, so ordinary non-SNI resumption is unaffected. As a related correction, a listener's derived reuse_sessions default (enabled under verify_none) is no longer carried into an SNI virtual service that switches to verify_peer; such a service must enable reuse_sessions explicitly. Own Id: OTP-20445 Related Id(s): PR-11773, CVE-2026-105236 > #### Full runtime dependencies of ssl-11.2.12.14 > > crypto-5.1, erts-15.0, inets-5.10.7, kernel-9.0, public_key-1.17.1.3, > runtime_tools-1.15.1, stdlib-6.0 # Thanks to Alexey Aristov, Daniel Gorin, Marko Mindek