[gnutls-devel] GnuTLS | WIP: fixed operation under multiple threads (!935)

Development of GNU's TLS library gnutls-devel at lists.gnutls.org
Mon Feb 25 14:59:01 CET 2019

As you already said, on all supported platform the read and write to/from int already is atomic. Making the variable atomic just helps unsupported platforms (e.g. 16 bit data bus).

What I think of is code like
if (session->internals.recv_state != RECV_STATE_FALSE_START &&
    session->internals.recv_state != RECV_STATE_FALSE_START_HANDLING &&
    session->internals.recv_state != RECV_STATE_EARLY_START &&
    session->internals.recv_state != RECV_STATE_EARLY_START_HANDLING &&
    !(session->internals.hsk_flags & HSK_EARLY_DATA_IN_FLIGHT))

If a non-optimizing compiler reads the variable 4x, this allows a second thread to change the value between two comparisons. It might be unlikely, but to be sure you would save `session->internals.recv_state` into a temp variable and use that for comparison.

Reply to this email directly or view it on GitLab: https://gitlab.com/gnutls/gnutls/merge_requests/935#note_144663146
You're receiving this email because of your account on gitlab.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.gnupg.org/pipermail/gnutls-devel/attachments/20190225/5ac143c8/attachment-0001.html>

More information about the Gnutls-devel mailing list