Patch Package OTP 28.5.0.7 Released

Patch Package:           OTP 28.5.0.7
Git Tag:                 OTP-28.5.0.7
Date:                    2026-09-22
Trouble Report Id:       OTP-20118, OTP-20256, OTP-20272, OTP-20287,
                         OTP-20327, OTP-20355, OTP-20358, OTP-20365,
                         OTP-20371, OTP-20386, OTP-20388, OTP-20390,
                         OTP-20393
Seq num:                 CVE-2026-65634, CVE-2026-68956,
                         CVE-2026-89422, ERIERL-1355, ERIERL-1356,
                         ERIERL-1361, ERIERL-1363, GH-11338, GH-11344,
                         GH-11534, GH-11586, GH-11619,
                         GH-SA-qhcm-px9c-rvfh, PR-11167, PR-11356,
                         PR-11426, PR-11523, PR-11559, PR-11566,
                         PR-11570, PR-11616, PR-11630, PR-11638,
                         PR-11641, PR-11651, PR-11655
System:                  OTP
Release:                 28
Application:             asn1-5.4.3.1, compiler-9.0.6.3,
                         mnesia-4.25.3.3, public_key-1.20.3.5,
                         ssh-5.5.2.6, ssl-11.6.0.6, stdlib-7.3.0.3
Predecessor:             OTP 28.5.0.6

Check out the git tag OTP-28.5.0.7, 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 beam_lib returns an error tuple, the filename in the information tuple
    is now a list of characters instead of an atom.

    Example:

    1> beam_lib:chunks(code:which(lists), ["nope"]).
    {error,beam_lib,
           {missing_chunk,".../git/otp/lib/stdlib/ebin/lists.beam",
                          "nope"}}
    

    The reason for this change is that a long file name is not guaranteed to fit
    in an atom. Applications or tools that do deep inspection of the beam_lib
    errors (not recommended) will need to be updated.

    Own Id: OTP-20118
    Application(s): stdlib
    Related Id(s): ERIERL-1361, PR-11167

  • Fixed a vulnerability where the max_channels daemon option was not enforced
    for session channels without an active subsystem, allowing a remote
    authenticated user to open an infinite number of channels and exhaust server
    resources despite the configured limit.

    The default value of the max_channels daemon option has been changed from
    infinity to 256. Deployments requiring more than 256 simultaneous channels per
    connection can restore the previous behavior by setting
    {max_channels, infinity}.

    The default value of the max_sessions daemon option has been changed from
    infinity to 1024. Deployments requiring more concurrent SSH connections can
    restore the previous behavior by setting {max_sessions, infinity}.

    Own Id: OTP-20287
    Application(s): ssh
    Related Id(s): GH-SA-qhcm-px9c-rvfh, PR-11523, CVE-2026-68956

asn1-5.4.3.1

The asn1-5.4.3.1 application can be applied independently of other applications
on a full OTP 28 installation.

Fixed Bugs and Malfunctions

  • Fixed a denial-of-service attack in asn1, where abnormally large OID
    components (arcs) could cause resource exhaustion.

    Own Id: OTP-20272
    Related Id(s): PR-11655, CVE-2026-65634

  • The JER backend will no longer break certain values (true, false, null) when
    they are typed as ENUMERATED, they will now be encoded as strings as required
    by the standard.

    Own Id: OTP-20355
    Related Id(s): ERIERL-1355, PR-11559

Full runtime dependencies of asn1-5.4.3.1

erts-14.0, kernel-9.0, stdlib-5.0

compiler-9.0.6.3

The compiler-9.0.6.3 application can be applied independently of other
applications on a full OTP 28 installation.

Fixed Bugs and Malfunctions

  • In rare circumstances, the type analysis pass of the compiler could run for
    many minutes.

    Own Id: OTP-20365
    Related Id(s): GH-11534, PR-11566

  • Certain uses of funs could crash the compiler. For example:

    f() ->
        F = fun Fn(0) -> 0; Fn(N) -> Fn(N - 1) end,
        [F(X) || X <- [1, 2]].
    

    This has been corrected.

    Own Id: OTP-20386
    Related Id(s): GH-11619, PR-11638

Full runtime dependencies of compiler-9.0.6.3

crypto-5.1, erts-13.0, kernel-8.4, stdlib-6.0

mnesia-4.25.3.3

The mnesia-4.25.3.3 application can be applied independently of other
applications on a full OTP 28 installation.

Fixed Bugs and Malfunctions

  • Fixed mnesia:force_load_table/1 getting stuck when the remote node becomes
    unreachable during table loading. When a network loader is aborted due to
    sender node going down and a user has forced a table load, we now retry
    loading from disc instead. Additionally, for disc_only_copies tables, the
    process actually loading the table is the dets server process, not the mnesia
    loader, so it would not receive the abort notification and would hang
    indefinitely. Now it correctly receives the notification and aborts table
    loading.

    Own Id: OTP-20256
    Related Id(s): GH-11344, PR-11426

Full runtime dependencies of mnesia-4.25.3.3

erts-9.0, kernel-5.3, stdlib-5.0

public_key-1.20.3.5

Note! The public_key-1.20.3.5 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

  • Handle that policy qualifiers are optional.

    Own Id: OTP-20393
    Related Id(s): PR-11630

Full runtime dependencies of public_key-1.20.3.5

asn1-5.0, crypto-5.8, erts-13.0, kernel-8.0, stdlib-4.0

ssh-5.5.2.6

Note! The ssh-5.5.2.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.7 (first satisfied in OTP 28.1)

Fixed Bugs and Malfunctions

  • Fixed a vulnerability where the max_channels daemon option was not enforced
    for session channels without an active subsystem, allowing a remote
    authenticated user to open an infinite number of channels and exhaust server
    resources despite the configured limit.

    The default value of the max_channels daemon option has been changed from
    infinity to 256. Deployments requiring more than 256 simultaneous channels per
    connection can restore the previous behavior by setting
    {max_channels, infinity}.

    The default value of the max_sessions daemon option has been changed from
    infinity to 1024. Deployments requiring more concurrent SSH connections can
    restore the previous behavior by setting {max_sessions, infinity}.

    Own Id: OTP-20287
    Related Id(s): GH-SA-qhcm-px9c-rvfh, PR-11523, CVE-2026-68956

    *** POTENTIAL INCOMPATIBILITY ***

  • The SSH daemon no longer rejects a subsystem request that is preceded by
    env or pty-req request on the same channel.

    Own Id: OTP-20371
    Related Id(s): ERIERL-1363, GH-11586, PR-11616

Full runtime dependencies of ssh-5.5.2.6

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

Note! The ssl-11.6.0.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
   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

  • Undecodable certificate_authorities names are now skipped, as they are just
    a hint.

    Own Id: OTP-20327
    Related Id(s): GH-11338, PR-11356

  • Corrected generated keylog information generated from the keylog_hs option
    in the corner case that it was invoked after the client had reached its
    connection state, but the server closed the connection before it reached its
    connection state.

    Own Id: OTP-20358
    Related Id(s): ERIERL-1356, PR-11570

  • Reject unsolicited TLS-1.3 pre_shared_key in client.

    Own Id: OTP-20388
    Related Id(s): PR-11641, CVE-2026-89422

  • Security and robustness hardening returning RFC mandated alert reasons,
    narrowing/correcting length checks.

    Correct signature algorithm handling that slightly mixed up signature
    algorithms and signature algorithms cert in TLS-1.2.

    Add missing TLS-1.3 Brainpool groups support. (Not relevant in 27 patch)

    Enhanced/corrected documentation and spec errors/deviations.

    Own Id: OTP-20390
    Related Id(s): PR-11651

Full runtime dependencies of ssl-11.6.0.6

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

stdlib-7.3.0.3

Note! The stdlib-7.3.0.3 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:
   -- erts-16.0.3 (first satisfied in OTP 28.0.3)

Fixed Bugs and Malfunctions

  • When beam_lib returns an error tuple, the filename in the information tuple
    is now a list of characters instead of an atom.

    Example:

    1> beam_lib:chunks(code:which(lists), ["nope"]).
    {error,beam_lib,
           {missing_chunk,".../git/otp/lib/stdlib/ebin/lists.beam",
                          "nope"}}
    

    The reason for this change is that a long file name is not guaranteed to fit
    in an atom. Applications or tools that do deep inspection of the beam_lib
    errors (not recommended) will need to be updated.

    Own Id: OTP-20118
    Related Id(s): ERIERL-1361, PR-11167

    *** POTENTIAL INCOMPATIBILITY ***

Full runtime dependencies of stdlib-7.3.0.3

compiler-5.0, crypto-4.5, erts-16.0.3, kernel-10.0, sasl-3.0,
syntax_tools-3.2.1

Thanks to

Alan Duffield, ausimian