5.7. Crashes
5.7.1. [Critical] Segmentation fault risk with concurrent updates of identity certificates*
There was the risk of a segmentation fault with concurrent updates of
identity certificates. It was possible to cause a DomainParticipant
crash when an identity certificate was updated via identity certificate
file change and via the set_qos API.
[RTI Issue ID SEC-2676]
5.7.2. [Critical] NULL dereference when simultaneously changing certificate or CRL file while deleting DomainParticipant*
Suppose you had set files_poll_interval to a value other than 0. If
you changed the contents of an identity certificate file or a CRL file
while deleting the DomainParticipant, a race condition would have
occurred because those two operations were not thread-safe with respect
to each other. This race condition led to a NULL dereference in release
libraries and a precondition failure in debug libraries in the internal
function DDS_DomainParticipantGlobals_get_worker_per_threadI.
[RTI Issue ID SEC-2618]
5.7.3. [Critical] Log messages possibly corrupted or lost due to memory reordering on weak memory architectures
On weak memory architectures (such as Arm), memory reordering negatively impacted the logging queue used for distributing security events and logging over DDS.
If the queue became full (which can happen if your application generates many log messages, such as when debug verbosity is set), some log messages may have been lost or corrupted.
If the queue was empty and a new message was produced, it could have caused a crash or an incomplete message being published.
These issues have been resolved by adding memory barriers to the logging queue implementation.
[RTI Issue ID SEC-2587]
5.7.4. [Critical] Invalid read when simultaneously changing CRL file and validating remote DomainParticipant’s identity*
Suppose you had set files_poll_interval to a value other than 0. If
you changed the contents of your CRL file while validating the identity
of a remote DomainParticipant, a race condition would have occurred
because those two operations were not thread-safe with respect to each
other. This race condition led to the reading of invalid memory. A
memory-checking tool such as Valgrind™ would have reported invalid reads
in the function RTI_Security_CertHelper_verifyCertificate() due to
accessing an address freed by a different function
RTI_Security_Authentication_updateCrl().
[RTI Issue ID SEC-2479]
5.7.5. [Critical] Java: segmentation fault while enabling a DataWriter that protects payloads and enables batching*
Consider the following scenario:
You are using the Java API.
The Governance Document has
<data_protection_kind>set to a value other thanNONEfor a given topic.The
DataWriterQoshasbatch.enableset totrue.
Attempting to enable a DataWriter of that topic and with that QoS
would fail with a segmentation fault in the internal function
PRESTypePluginDefaultEndpointData_calculateBatchBufferSize. This
problem only affected releases 7.0.0 to 7.3.0.
[RTI Issue ID SEC-2457]
5.7.6. [Critical] Parsing malformed protected RTPS packets may have caused bus error on some platforms
If rtps_protection_kind was set to a value other than NONE in
the Governance Document, parsing malformed RTPS packets may have caused
a bus error on some platforms, such as a QNX system running on an Arm v7
processor.
[RTI Issue ID SEC-2435]
5.7.7. [Critical] Invalid read when simultaneously changing identity certificate file and validating local DomainParticipant’s identity status*
Suppose you had set files_poll_interval to a value other than 0. If
you changed the contents of your identity certificate file while
validating the identity status of the local DomainParticipant, a race
condition would have occurred because those two operations were not
thread-safe with respect to each other.
The time to validate the local identity status depends on the
dds.participant.trust_plugins.certificate_expiration_advance_notice_duration.sec
property. If the property value is 0, validation takes place at the
expiration date of the identity certificate. Otherwise, it occurs
dds.participant.trust_plugins.certificate_expiration_advance_notice_duration.sec
seconds in advance, and then once every
dds.participant.trust_plugins.certificate_expiration_advance_notice_reminder_period.sec
seconds (1 second by default).
This race condition led to the reading of invalid memory. A memory-checking tool such as Valgrind™ would have reported invalid reads in a function due to accessing an address freed by a different function.
Your application may have crashed with messages such as these:
[...]
ERROR [[...]|SET LISTENER] RTI_Security_Authentication_validateCertificateChain:{[[...],{"plugin_class":"DDS:Auth:PKI-DH"},{"plugin_method":"RTI_Security_Authentication_validateCertificateChain"}]}],"m":"Identity verification failed. Make sure it was signed by the right authority."}}
ERROR [[...]|SET LISTENER] RTI_Security_CertHelper_logMessageForEveryCa:{[[...],{"plugin_class":"RTI:Common"},{"plugin_method":"RTI_Security_CertHelper_logMessageForEveryCa"}]}],"m":"Failed to verify identity. Used authority: /C=US/ST=CA/[...]"}}
../crypto/asn1/tasn_utl.c:101: OpenSSL internal error: refcount error
fish: Job 1, '[...]' terminated by signal SIGABRT (Abort)
[RTI Issue ID SEC-2407]
5.7.8. [Major] Possible crash when using Python API due to collision with OpenSSL symbols when using certain Python releases*
A Python application loading the Security Plugins may have crashed with a segmentation fault during DomainParticipant creation. You would have seen a message similar to:
Thread 1 "python3" received signal SIGSEGV, Segmentation fault.
0x00007fcbc6ff19d5 in OPENSSL_sk_num () from third_party/libcrypto.so.3
[...]
The crash was due to a conflict between the OpenSSL symbols in the library shipped with Connext and those embedded in the Python executable itself. The Security Plugins now look up OpenSSL symbols first within the library, before looking in the global namespace.
To see if your Python release is affected, look for OpenSSL symbols in the Python executable. For example, run the following command on a Linux system:
$> nm -D <python_exe> | grep UI_create_method
0000000000377fe0 T UI_create_method
If the output is not empty, it means the Python executable contains OpenSSL symbols and they will collide with the ones shipped with Connext.
[RTI Issue ID SEC-2376]
* This bug did not affect you if you are upgrading from 6.1.x or earlier.