[openssl-commits] [openssl] master update

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


The branch master has been updated
       via  2aaa0b146b967397a6e61fa8df969e7847f82086 (commit)
       via  95658c32436017aeeef3d8598957071baf6769a9 (commit)
      from  681e8cacdbdc44ac00af29b6656fc52745a9baa2 (commit)


- Log -----------------------------------------------------------------
commit 2aaa0b146b967397a6e61fa8df969e7847f82086
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)

commit 95658c32436017aeeef3d8598957071baf6769a9
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)

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

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