32131 Commits

Author SHA1 Message Date
David Horstmann
a84be59757
Merge pull request #1366 from gilles-peskine-arm/base64-decode-clean-3.6
Backport 3.6: mbedtls_base64_decode: fix sloppiness
2025-06-17 14:55:39 +01:00
Gilles Peskine
3c9ad42719
Merge pull request #1367 from gilles-peskine-arm/aesni_has_support-volatile-3.6
Backport 3.6: Fix race condition in mbedtls_aesni_has_support
2025-06-13 23:20:28 +02:00
Gilles Peskine
853cfbdced Add a note about processor memory reordering
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-12 18:30:45 +02:00
Gilles Peskine
51dccfb2a6 Improve some explanations
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-11 18:47:31 +02:00
Gilles Peskine
03303d88fb Don't mutate dst_size
This lead to `dst_size` not having the intended value in subsequent code.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-11 18:24:26 +02:00
Gilles Peskine
f5db3e9436 Note that GCM is also impacted
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-11 10:45:41 +02:00
Gilles Peskine
a79525239f
Merge pull request #1359 from Mbed-TLS/bugfix_1351_1352_1353_lms_drivers_3.6bp
[3.6 Backport]Bugfix: lms/lmots driver hardening.
2025-06-10 19:08:15 +02:00
Manuel Pégourié-Gonnard
7ed3653c57
Merge pull request #1363 from gilles-peskine-arm/3.6-restricted-merge-20250606
Merge mbedtls-3.6 into mbedtls-3.6-restricted
2025-06-10 11:01:11 +02:00
Manuel Pégourié-Gonnard
cae443405e
Merge pull request #1347 from mpg/fix-asn1-store-named-data-null-deref-3.6
Backport 3.6: Fix asn1 store named data null deref
2025-06-10 09:50:34 +02:00
Gilles Peskine
55d211388a Adjust test case with invalid base64
Now that Base64 validates the number of trailing equals, adjust the PEM test
case that has a Base64 payload with a wrong number of trailing equals, where
`mbedtls_pem_read_buffer()` now returns a different error code. I'm not sure
what the exact intent of the test was, so add a variant with trailing equals
as well.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-10 09:42:03 +02:00
Gilles Peskine
8c67ac0f7f Fix race condition in mbedtls_aesni_has_support
Fix a race condition in `mbedtls_aes_ni_has_support()` with some compilers.
A compiler could hoist the assignment `done = 1` above the assignment to `c`,
in which case if two threads call `mbedtls_aes_ni_has_support()` at almost
the same time, they could be interleaved as follows:

    Initially: done = 0, c = 0

    thread A                thread B
    if (!done)
      done = 1;                                     # hoisted
                            if (!done)
                                return c & what;    # wrong!
      c = cpuid();
    return c & what

This would lead to thread B using software AES even though AESNI was
available. This is a very minor performance bug. But also, given a very
powerful adversary who can block thread A indefinitely (which may be
possible when attacking an SGX enclave), thread B could use software AES for
a long time, opening the way to a timing side channel attack.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-09 23:48:34 +02:00
Gilles Peskine
13cc0c2122 mbedtls_base64_decode: test dst=NULL with dlen>0
The documentation explicitly says that `*dst = NULL` **or** `dlen = 0`
triggers tell-me-the-output-length mode.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-09 23:08:42 +02:00
Gilles Peskine
e7ed8c4c2f Explain some aspects of the tests
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-09 23:08:40 +02:00
Gilles Peskine
2b3d6a8f28 mbedtls_base64_decode: insist on correct padding
Correct base64 input (excluding ignored characters such as spaces) consists
of exactly 4*k, 4*k-1 or 4*k-2 digits, followed by 0, 1 or 2 equal signs
respectively.

Previously, any number of trailing equal signs up to 2 was accepted, but if
there fewer than 4*k digits-or-equals, the last partial block was counted in
`*olen` in buffer-too-small mode, but was not output despite returning 0.

Now `mbedtls_base64_decode()` insists on correct padding. This is
backward-compatible since the only plausible useful inputs that used to be
accepted were inputs with 4*k-1 or 4*k-2 digits and no trailing equal signs,
and those led to invalid (truncated) output. Furthermore the function now
always reports the exact output size in buffer-too-small mode.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-09 23:01:21 +02:00
Minos Galanakis
255c492dab Added CVE's to ChangeLogs
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-08 23:10:58 +01:00
Minos Galanakis
df2f0aae81 lms.c: Updated documentation
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-06 14:35:07 +01:00
Minos Galanakis
58a4479ace test_suite_lms.data: Updated comments
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-06 14:35:07 +01:00
Gilles Peskine
7df273bb34 Merge remote-tracking branch 'mbedtls-3.6' into mbedtls-3.6-restricted 2025-06-06 10:46:03 +02:00
Gilles Peskine
84999d1a7b Fix mbedtls_base64_decode() accepting invalid inputs with 4n+1 digits
The last digit was ignored.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-05 16:15:41 +02:00
Gilles Peskine
683a46e6c1 mbedtls_base64_decode: assert sloppy behavior with bad number of =
Add unit tests covering cases where the number of digits plus equal signs is
not a multiple of 4. These are invalid inputs, but they are currently
accepted as long as the number of equal signs is at most 2.

The tests assert the current behavior, not behavior that is desirable.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-05 16:15:41 +02:00
Gilles Peskine
715bbf3e0c mbedtls_base64_decode: test the reported output length
Reinforce the unit test for `mbedtls_base64_decode()` with valid inputs to
systematically call the function with a smaller output buffer and with an
empty output buffer. Assert the reported necessary output length in those
cases.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
2025-06-05 16:15:41 +02:00
Minos Galanakis
c7beb847c9 test_suite_lms: Added negative test for corrupted Merkle path
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-05 09:23:59 +01:00
Minos Galanakis
b72573853a test_suite_lms: Added a test for importing invalid sized key
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-05 09:23:59 +01:00
Minos Galanakis
f84bc3f592 Added changelog for check return of merkle leaf
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-05 09:23:59 +01:00
Minos Galanakis
3444757ac4 Added changelog for lms enum casting
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-05 09:23:59 +01:00
Minos Galanakis
3b392af70d Added changelog for lms overread
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-05 09:23:59 +01:00
Minos Galanakis
9b3051fb10 Built-in lms driver: always zeroize output-buffer in create_merkle_leaf_value
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-04 16:23:57 +01:00
Minos Galanakis
ae449bfca5 Built-in lms driver:Check return values of Merkle node creation
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-04 15:54:49 +01:00
Minos Galanakis
caaffc1e7e Built-in lms/lmots driver: Harden public key import against enum truncation
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-04 15:54:46 +01:00
Minos Galanakis
548e2dbf65 Built-in lms driver: Added input guard
Signed-off-by: Minos Galanakis <minos.galanakis@arm.com>
2025-06-04 15:20:38 +01:00
David Horstmann
3f82706cb7
Merge pull request #1349 from felixc-arm/pem-integer-underflow-3.6
[3.6] Fix Integer Underflow when Decoding PEM Keys
2025-06-04 14:36:35 +01:00
Felix Conway
42323eacc9 Add changelog
Signed-off-by: Felix Conway <felix.conway@arm.com>
2025-06-04 10:06:26 +01:00
Felix Conway
6165e71589 Add fix for PEM underflow
Signed-off-by: Felix Conway <felix.conway@arm.com>
2025-06-04 10:06:26 +01:00
Felix Conway
9325883d9f Add test using underflow-causing PEM keyfile
Signed-off-by: Felix Conway <felix.conway@arm.com>
2025-06-04 10:06:17 +01:00
Gilles Peskine
1592639c1f
Merge pull request #10182 from gilles-peskine-arm/f_rng-documentation-3.6
3.6 only: document f_rng callbacks
2025-06-03 15:34:23 +00:00
Manuel Pégourié-Gonnard
e51bde06da Fix possible UB in mbedtls_asn1_write_raw_buffer()
This is mostly unrelated to other commits in this PR, except for the
fact that one of the added X.509 tests revealed that with UBSan.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2025-06-03 11:23:19 +02:00
David Horstmann
23a0d48d1c
Merge pull request #10196 from ronald-cron-arm/move-crypto-struct-inclusion
[Backport 3.6] Move the inclusion of crypto_sizes.h and crypto_struct.h in crypto.h
2025-05-28 15:51:09 +00:00
Manuel Pégourié-Gonnard
d9c141749b
Merge pull request #1345 from davidhorstmann-arm/pkcs7-side-channel-missing-credit-3.6
Add credit to the reporters of the PKCS7 issue
2025-05-28 11:49:35 +02:00
Ronald Cron
4960825a94 Add change log
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
2025-05-28 10:05:32 +02:00
Ronald Cron
3ea3635d2f Move the inclusion of crypto_sizes.h and crypto_struct.h in crypto.h
That way when API are declared, the types they use are defined.

This should resolve the issues related to psa_xyz_init functions
returning a structure described in #7087.

Signed-off-by: Ronald Cron <ronald.cron@arm.com>
2025-05-28 10:02:12 +02:00
Manuel Pégourié-Gonnard
04fe95d95b Add ChangeLog entry
Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2025-05-26 12:38:52 +02:00
Manuel Pégourié-Gonnard
12df5f3a16 Improve unit tests for mbedtls_asn1_store_named_data
Every time we check found->val.p we should also check found->val.len.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2025-05-26 10:55:59 +02:00
Manuel Pégourié-Gonnard
2df7ab7c0c Fix bug in mbedtls_asn1_store_named_data()
When passed a zero-length val, the function was free-ing the buffer as
the documentation suggests:

 * \param val_len   The minimum length of the data buffer needed.
 *                  If this is 0, do not allocate a buffer for the associated
 *                  data.
 *                  If the OID was already present, enlarge, shrink or free
 *                  the existing buffer to fit \p val_len.

However it kept the previous length, leaving the val structure in the
corresponding item in the output list in an inconsistent state:

    p == NULL but len != 0

As a result, functions that would try using this item in the list
(including the same function!) afterwards would trip an dereference the
NULL pointer.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2025-05-26 10:42:14 +02:00
Manuel Pégourié-Gonnard
13f86e689e Add tests for bug in mbedtls_x509_string_to_names()
The commented out tests cause crashes (in different ways) until the bug
is fixed; the first two test are passing already and are here mostly to
provide a reference point.

The bug report was using programs/x509/cert_write, but string_to_names()
is what it was really targetting, which is better for automated tests.
The strings used are a minor adapation of those from the report.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2025-05-22 13:18:49 +02:00
Manuel Pégourié-Gonnard
1e9267c993
Merge pull request #1340 from mpg/fix-string-to-names-uaf-3.6
[3.6] Fix string to names memory management
2025-05-21 14:48:43 +02:00
Manuel Pégourié-Gonnard
8ac3eb9833 Avoid a useless copy in cert_{req,write}
I'm just trying to have a shorter name to avoid repeating a long
expression. This is a job for a pointer, not copying a struct.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2025-05-21 11:17:39 +02:00
Manuel Pégourié-Gonnard
1173786544
Merge pull request #10185 from rojer/tls_consts_3.6
Mark TLS 1.2 algo suite definitons const
2025-05-20 06:55:12 +00:00
Deomid rojer Ryabkov
fb5e2e5e46 Mark ssl_tls12_preset_suiteb_sig_algs const
Signed-off-by: Deomid rojer Ryabkov <rojer@rojer.me>
2025-05-19 20:48:13 +01:00
Deomid rojer Ryabkov
e3aaf82a77 Mark ssl_tls12_preset_default_sig_algs const
To place in flash and save RAM on targets where this applies.

Signed-off-by: Deomid rojer Ryabkov <rojer@rojer.me>
2025-05-19 20:48:08 +01:00
Manuel Pégourié-Gonnard
dad206d25c
Merge pull request #10168 from gilles-peskine-arm/union-initialization-gcc15-basic-fix-3.6
Backport 3.6: Fix insufficient union initialization in contexts
2025-05-19 10:31:47 +00:00