# Patch Package OTP 29.1.2 Released

**URL:** <https://erlangforums.com/t/patch-package-otp-29-1-2-released/6047>\
**Category:** Erlang News\
**Tags:** erlang-release\
**Created:** [October 14, 2026, 2:46pm UTC](https://erlangforums.com/t/patch-package-otp-29-1-2-released/6047 "2026-10-14T14:46:48Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![ingela](https://erlangforums.com/letter_avatar_proxy/v4/letter/i/53a042/32.png) [@ingela](https://erlangforums.com/u/ingela)\
**Post date:** [October 14, 2026, 2:46pm UTC](https://erlangforums.com/t/patch-package-otp-29-1-2-released/6047/1 "2026-10-14T14:46:48Z")

</div>

```erlang
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.

# 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`

- Compilation of a function with thousands of clauses would be very slow.

- Sometimes compiling with `deterministic` would not guarantee generation of  
identical BEAM files for every build.

- A crash in `sys_core_fold` on native record patterns has been eliminated.

> #### 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.

> #### 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.

- Fix native record bugs when used together with `try...catch`

> #### 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@host/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.

> #### 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.

> #### 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.

> #### 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.

> #### 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.

- 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.

> #### 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.

- Fixed the following bugs in the SSH application:

- 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.

- 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.

> #### 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.

```erlang
   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.

- The equivalent options dh and dhfile where unintentionally ignored and the  
default value was used instead.

- 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.

- 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.

- 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.

> #### 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`](https://erlang.org/doc/man/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.

> #### 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
