[openssl-commits] [openssl] OpenSSL_1_1_1-stable update

kaduk at mit.edu kaduk at mit.edu
Sun Nov 4 04:52:46 UTC 2018


The branch OpenSSL_1_1_1-stable has been updated
       via  33a37a6179bcef6917a28edf7c90a65dcd89ff4a (commit)
       via  a649b52f86a2aa039a15d9c8c0de5b6786bac0fc (commit)
      from  cd01707b7f7e71b6c5df013212c9b3613e9eab7c (commit)


- Log -----------------------------------------------------------------
commit 33a37a6179bcef6917a28edf7c90a65dcd89ff4a
Author: Benjamin Kaduk <bkaduk at akamai.com>
Date:   Mon Oct 22 11:54:20 2018 -0500

    Restore sensible "sess_accept" counter tracking
    
    Commit 9ef9088c1585e13b9727796f15f77da64dbbe623 switched the SSL/SSL_CTX
    statistics counters to using Thread-Sanitizer-friendly primitives.
    However, it erroneously converted an addition of -1
    (for s->session_ctx->stats.sess_accept) to an addition of +1, since that
    is the only counter API provided by the internal tsan_assist.h header
    until the previous commit.  This means that for each accepted (initial)
    connection, the session_ctx's counter would get doubly incremented, and the
    (switched) ctx's counter would also get incremented.
    
    Restore the counter decrement so that each accepted connection increments
    exactly one counter exactly once (in net effect).
    
    Reviewed-by: Paul Dale <paul.dale at oracle.com>
    (Merged from https://github.com/openssl/openssl/pull/7464)
    
    (cherry picked from commit 2aaa0b146b967397a6e61fa8df969e7847f82086)

commit a649b52f86a2aa039a15d9c8c0de5b6786bac0fc
Author: Benjamin Kaduk <bkaduk at akamai.com>
Date:   Mon Oct 22 11:51:35 2018 -0500

    Add tsan_decr() API, counterpart of tsan_counter()
    
    The existing tsan_counter() API increments a reference counter.
    Provide a new API, tsan_decr(), to decrement such a reference counter.
    This can be used, for example, when a reference is added to the session_ctx's
    sess_accept stats but should more properly be tracked in the regular ctx's
    statistics.
    
    Reviewed-by: Paul Dale <paul.dale at oracle.com>
    (Merged from https://github.com/openssl/openssl/pull/7464)
    
    (cherry picked from commit 95658c32436017aeeef3d8598957071baf6769a9)

-----------------------------------------------------------------------

Summary of changes:
 include/internal/tsan_assist.h | 6 ++++++
 ssl/statem/extensions.c        | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/include/internal/tsan_assist.h b/include/internal/tsan_assist.h
index 2c76383..f30ffe3 100644
--- a/include/internal/tsan_assist.h
+++ b/include/internal/tsan_assist.h
@@ -57,6 +57,7 @@
 #  define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed)
 #  define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed)
 #  define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed)
+#  define tsan_decr(ptr) atomic_fetch_add_explicit((ptr), -1, memory_order_relaxed)
 #  define tsan_ld_acq(ptr) atomic_load_explicit((ptr), memory_order_acquire)
 #  define tsan_st_rel(ptr, val) atomic_store_explicit((ptr), (val), memory_order_release)
 # endif
@@ -69,6 +70,7 @@
 #  define tsan_load(ptr) __atomic_load_n((ptr), __ATOMIC_RELAXED)
 #  define tsan_store(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELAXED)
 #  define tsan_counter(ptr) __atomic_fetch_add((ptr), 1, __ATOMIC_RELAXED)
+#  define tsan_decr(ptr) __atomic_fetch_add((ptr), -1, __ATOMIC_RELAXED)
 #  define tsan_ld_acq(ptr) __atomic_load_n((ptr), __ATOMIC_ACQUIRE)
 #  define tsan_st_rel(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELEASE)
 # endif
@@ -113,8 +115,11 @@
 #  pragma intrinsic(_InterlockedExchangeAdd64)
 #  define tsan_counter(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), 1) \
                                                  : _InterlockedExchangeAdd((ptr), 1))
+#  define tsan_decr(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), -1) \
+                                                 : _InterlockedExchangeAdd((ptr), -1))
 # else
 #  define tsan_counter(ptr) _InterlockedExchangeAdd((ptr), 1)
+#  define tsan_decr(ptr) _InterlockedExchangeAdd((ptr), -1)
 # endif
 # if !defined(_ISO_VOLATILE)
 #  define tsan_ld_acq(ptr) (*(ptr))
@@ -129,6 +134,7 @@
 # define tsan_load(ptr) (*(ptr))
 # define tsan_store(ptr, val) (*(ptr) = (val))
 # define tsan_counter(ptr) ((*(ptr))++)
+# define tsan_decr(ptr) ((*(ptr))--)
 /*
  * Lack of tsan_ld_acq and tsan_ld_rel means that compiler support is not
  * sophisticated enough to support them. Code that relies on them should be
diff --git a/ssl/statem/extensions.c b/ssl/statem/extensions.c
index 8d4939d..ad4256d 100644
--- a/ssl/statem/extensions.c
+++ b/ssl/statem/extensions.c
@@ -962,7 +962,7 @@ static int final_server_name(SSL *s, unsigned int context, int sent)
      */
     if (SSL_IS_FIRST_HANDSHAKE(s) && s->ctx != s->session_ctx) {
         tsan_counter(&s->ctx->stats.sess_accept);
-        tsan_counter(&s->session_ctx->stats.sess_accept);
+        tsan_decr(&s->session_ctx->stats.sess_accept);
     }
 
     /*


More information about the openssl-commits mailing list