mbedtls/library
Hanno Becker 12078f4c22 Keep pointer to TLS record sequence number static
The field `cur_out_ctr` in the SSL context keeps track of the
record sequence number for the next outgoing record.

For TLS, this sequence number is implicit and not transmitted
on the wire, while for DTLS, it's part of of the record header.

For DTLS, the position of the record sequence number of the next
outgoing record in that record's header is tracked in the pointer
`out_ctr`. This pointer moves forward along with other pointers
such as `out_hdr` or `out_msg` within the outgoing data buffer
`out_buf` as multiple records are written in the same datagram.

For TLS, the `out_ctr` pointer is logically superfluous, but
for some reason, we're still maintaining it by having it point
to the 8 Bytes prior to the header of the next outgoing record,
and always copying `cur_out_ctr` to this position prior to
encrypting an outgoing record.

After a record has been prepared for writing in `ssl_write_record()`,
the `out_xxx` pointers (except for `out_buf`, which is static),
are shifted forward so that they point to the header and content
of the next outgoing record. This is used only in DTLS in order
to stack multiple records into a single datagram, but the shifting
is happening for TLS as well. However, it has little effect in TLS
because we're always flushing immediately after writing, and afterwards
reset the `out_xxx` pointers.

While the present code works as-is, it is wrong to shift `out_ctr`
in the case of TLS, because it makes `out_ctr` point to the last 8
Bytes of the ciphertext of the last outgoing record. Should we ever
aim to prepare more than one protected record in `out_buf` before
dispatching it to the underlying transport, the superfluous copying
of `cur_out_ctr` to `out_buf` will corrupt the last 8 bytes of the
last record.

This commit aims to fix this problem in the minimal possible way,
by simply not shifting `out_ctr` after a record has been written.
It does deliberately not attempt to remove `out_ctr` for TLS altogether,
because any change in the messaging layer is hard to review, and
we're going to replace it soon anyhow.

The shifting happens in the helper routine mbedtls_ssl_update_out_pointers,
which assumed correctness of `out_hdr` for the beginning of the record header
of the next outgoing record, and derives the other `out_xxx` variables.
We remove the update of `out_ctr` from this function in the case of TLS,
and instead move the proper initialization of `out_ctr` to
`out_buf == initial_out_hdr - 8` to the function
mbedtls_ssl_reset_in_out_pointers().

Signed-off-by: Hanno Becker <hanno.becker@arm.com>
2021-03-02 15:50:47 +00:00
..
.gitignore Split libs with make + general make cleanups 2015-06-25 10:59:56 +02:00
aes.c Merge pull request #3823 from gabor-mezei-arm/3818_MBEDTLS_AES_SETKEY_DEC_ALT_excludes_MBEDTLS_CIPHER_MODE_XTS 2020-11-09 20:44:08 +01:00
aesni.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
arc4.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
aria.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
asn1parse.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
asn1write.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
base64.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
bignum.c mbedtls_mpi_sub_abs: fix buffer overflow in error case 2021-02-01 17:28:03 +01:00
blowfish.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
camellia.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
ccm.c Fix additional data length field check for CCM 2020-10-08 12:09:44 +02:00
certs.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
chacha20.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
chachapoly.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
check_crypto_config.h Minor updates to address review comments 2020-11-30 21:06:05 -08:00
cipher_wrap.c Do not set IV size for ECB mode ciphers 2020-11-06 09:40:21 +01:00
cipher.c Fix unused param warnings in auth_xxcrypt_ext() 2020-12-07 10:42:21 +01:00
cmac.c Update comment to only apply to AES-192 2021-01-29 11:09:50 +01:00
CMakeLists.txt Merge pull request #4092 from ronald-cron-arm/psa-crypto-client 2021-02-15 10:46:35 +01:00
common.h Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
ctr_drbg.c Document mutex invariant for CTR_DRBG 2021-02-22 19:24:03 +01:00
debug.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
des.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
dhm.c Merge development into development-restricted 2020-08-20 11:07:12 +01:00
ecdh.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
ecdsa.c Fix unused argument when compiling with MBEDTLS_ECDSA_SIGN_ALT 2021-02-10 17:07:20 +01:00
ecjpake.c Skip tests requiring known entropy for ECJPAKE ALT implementations 2021-01-22 14:23:08 +01:00
ecp_curves.c Fix uncaught error if fix_negative fails 2020-12-06 22:32:02 +01:00
ecp.c Reworked NO_FALLBACK logic according to review feedback 2021-01-22 09:43:59 +01:00
entropy_poll.c Merge pull request #4110 from gilles-peskine-arm/psa-external-random-in-mbedtls 2021-02-22 14:47:29 +00:00
entropy.c Make entropy double-free work 2021-02-23 11:27:03 +01:00
error.c Simplify conditional guards in error.c 2020-11-16 15:02:16 +01:00
gcm.c Allow GCM selftest to skip non-12-byte IVs for ALT implementations 2021-02-10 15:34:52 +01:00
havege.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
hkdf.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
hmac_drbg.c Document mutex invariant for HMAC_DRBG 2021-02-22 19:24:03 +01:00
Makefile Merge pull request #4092 from ronald-cron-arm/psa-crypto-client 2021-02-15 10:46:35 +01:00
md2.c Merge branch 'development' into development-restricted 2020-12-03 09:59:42 +01:00
md4.c Merge branch 'development' into development-restricted 2020-12-03 09:59:42 +01:00
md5.c Merge branch 'development' into development-restricted 2020-12-03 09:59:42 +01:00
md.c Fix wrong \file name in Doxygen comments 2021-02-23 20:29:38 +01:00
memory_buffer_alloc.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
net_sockets.c Use socklen_t on Android and other POSIX-compliant system 2020-09-30 16:53:37 +08:00
nist_kw.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
oid.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
padlock.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
pem.c Remove Extraneous bytes from buffer post pem write 2020-12-07 17:29:42 +00:00
pk_wrap.c psa: Move from key handle to key identifier 2020-11-10 16:00:41 +01:00
pk.c psa: Move from key handle to key identifier 2020-11-10 16:00:41 +01:00
pkcs5.c Merge pull request #731 from gabor-mezei-arm/692_missing_zeroizations_of_sensitive_data 2020-09-18 16:20:13 +02:00
pkcs11.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
pkcs12.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
pkparse.c fix return code 2020-09-22 11:57:16 +02:00
pkwrite.c adding parentheses to macro definitions, to avoid confusion and possible mistakes in usage. 2021-02-01 14:26:08 +01:00
platform_util.c Fixes two _POSIX_C_SOURCE typos. 2020-11-13 09:20:18 +00:00
platform.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
poly1305.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
psa_crypto_client.c psa: Make sure MBEDTLS_PSA_CRYPTO_CLIENT is defined 2021-02-09 15:36:08 +01:00
psa_crypto_core.h Export "internally" psa_generate_key_internal() 2021-02-16 09:04:50 +01:00
psa_crypto_driver_wrappers.c Call software implementation as a driver 2021-02-16 09:04:50 +01:00
psa_crypto_driver_wrappers.h Call software implementation as a driver 2021-02-16 09:04:50 +01:00
psa_crypto_ecp.c psa: ecp: Improve pre-processor condition and its comment 2021-02-16 09:07:46 +01:00
psa_crypto_ecp.h Add ECP transparent test driver generate_key entry point 2021-02-16 09:07:46 +01:00
psa_crypto_invasive.h Implement MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG 2020-11-23 17:42:54 +01:00
psa_crypto_its.h Update documentation 2020-11-25 13:10:50 +01:00
psa_crypto_random_impl.h Work around MSVC bug with duplicate static declarations 2021-02-16 18:55:05 +01:00
psa_crypto_rsa.c psa: rsa: Rename psa_read_rsa_exponent 2021-02-16 09:07:46 +01:00
psa_crypto_rsa.h Add RSA key generation support to the transparent test driver 2021-02-16 09:04:50 +01:00
psa_crypto_se.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
psa_crypto_se.h Update documentation 2020-11-25 13:10:50 +01:00
psa_crypto_service_integration.h Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
psa_crypto_slot_management.c Rename PSA_KEY_SLOT_COUNT to MBEDTLS_PSA_KEY_SLOT_COUNT 2021-02-15 14:26:44 +01:00
psa_crypto_slot_management.h Rename PSA_KEY_SLOT_COUNT to MBEDTLS_PSA_KEY_SLOT_COUNT 2021-02-15 14:26:44 +01:00
psa_crypto_storage.c Merge pull request #3872 from gabor-mezei-arm/3275_use_PSA_ERROR_DATA_INVALID_where_warranted 2021-02-03 20:54:46 +01:00
psa_crypto_storage.h Rename PSA_KEY_SLOT_COUNT to MBEDTLS_PSA_KEY_SLOT_COUNT 2021-02-15 14:26:44 +01:00
psa_crypto.c Merge pull request #4145 from stevew817/fix_return_code 2021-03-01 13:20:50 +01:00
psa_its_file.c psa_its: Annotate file removal after a failed creation 2020-08-25 22:49:19 +02:00
ripemd160.c Merge branch 'development' into development-restricted 2020-12-03 09:59:42 +01:00
rsa_internal.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
rsa.c Fix mutex leak in RSA 2021-02-22 19:24:03 +01:00
sha1.c Merge pull request #731 from gabor-mezei-arm/692_missing_zeroizations_of_sensitive_data 2020-09-18 16:20:13 +02:00
sha256.c Merge pull request #731 from gabor-mezei-arm/692_missing_zeroizations_of_sensitive_data 2020-09-18 16:20:13 +02:00
sha512.c Merge branch 'development' into development-restricted 2020-12-03 09:59:42 +01:00
ssl_cache.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
ssl_ciphersuites.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
ssl_cli.c psa: Move from key handle to key identifier 2020-11-10 16:00:41 +01:00
ssl_cookie.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
ssl_invasive.h Merge pull request #736 from mpg/cf-varpos-copy-dev-restricted 2020-08-25 14:35:55 +01:00
ssl_msg.c Keep pointer to TLS record sequence number static 2021-03-02 15:50:47 +00:00
ssl_srv.c Merge pull request #3547 from ronald-cron-arm/psa-openless 2020-11-20 18:48:33 +01:00
ssl_ticket.c Stop using deprecated functions in the library 2020-12-03 12:25:10 +01:00
ssl_tls13_keys.c Comment on hardcoding of maximum HKDF key expansion of 255 Bytes 2020-09-16 09:50:17 +01:00
ssl_tls13_keys.h Comment on hardcoding of maximum HKDF key expansion of 255 Bytes 2020-09-16 09:50:17 +01:00
ssl_tls.c Use size_t instead of uint32_t for ssl I/O buffer lengths 2021-01-11 09:13:58 -05:00
threading.c Explain the usage of is_valid in pthread mutexes 2021-02-22 19:24:03 +01:00
timing.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
version_features.c Add MBEDTLS_PSA_CRYPTO_CLIENT configuration option 2021-02-01 13:16:01 +01:00
version.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
x509_create.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
x509_crl.c Merge development into development-restricted 2020-08-20 11:07:12 +01:00
x509_crt.c Merge pull request #773 from paul-elliott-arm/discrepancy_cert 2020-12-03 12:19:39 +01:00
x509_csr.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
x509.c x509.c: Remove one unnecessary cast 2020-09-01 11:04:53 +02:00
x509write_crt.c Mark basic constraints critical as appropriate. 2020-09-21 18:25:35 -07:00
x509write_csr.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00
xtea.c Update copyright notices to use Linux Foundation guidance 2020-08-19 10:35:41 +02:00