QUIC MSST: Minor fixes and cleanups
authorHugo Landau <hlandau@openssl.org>
Wed, 26 Apr 2023 14:56:59 +0000 (15:56 +0100)
committerHugo Landau <hlandau@openssl.org>
Fri, 12 May 2023 13:47:14 +0000 (14:47 +0100)
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/20765)

include/internal/quic_stream_map.h
include/openssl/ssl.h.in
ssl/quic/quic_channel.c
ssl/quic/quic_impl.c
ssl/ssl_lib.c

index 5d21c60185008fa3bbedd5ba050f5e5ff69d113a..920f3144b46fb08e4c1927ad9eb1c08289e9ac31 100644 (file)
@@ -129,7 +129,7 @@ struct quic_stream_st {
      *     queue nor has an associated XSO. This condition occurs when and only
      *     when deleted is true.
      *
-     *   - Once there is the case (i.e., no user-facing API object exposing the
+     *   - Once this is the case (i.e., no user-facing API object exposing the
      *     stream), we can delete the stream once we determine that all of our
      *     protocol obligations requiring us to keep the QUIC_STREAM around have
      *     been met.
index 81d49e62995795eaf4d48a40ded14f56a694cee2..fc326a573f8852949019d6664ccfa01c1cff97b6 100644 (file)
@@ -2270,8 +2270,8 @@ __owur SSL *SSL_get0_connection(SSL *s);
 __owur int SSL_is_connection(SSL *s);
 
 #define SSL_STREAM_TYPE_NONE        0
-#define SSL_STREAM_TYPE_READ        1
-#define SSL_STREAM_TYPE_WRITE       2
+#define SSL_STREAM_TYPE_READ        (1U << 0)
+#define SSL_STREAM_TYPE_WRITE       (1U << 1)
 #define SSL_STREAM_TYPE_BIDI        (SSL_STREAM_TYPE_READ | SSL_STREAM_TYPE_WRITE)
 __owur int SSL_get_stream_type(SSL *s);
 
index 7e55b7b5c64d5e06acb5a63afb2e58cfc9dd4604..cb1c99bfcf9444f5e881535d610ecf0c54c66f32 100644 (file)
@@ -2301,11 +2301,11 @@ err:
 QUIC_STREAM *ossl_quic_channel_new_stream_local(QUIC_CHANNEL *ch, int is_uni)
 {
     QUIC_STREAM *qs;
-    int type = 0;
+    int type;
     uint64_t stream_id, *p_next_ordinal;
 
-    type |= ch->is_server ? QUIC_STREAM_INITIATOR_SERVER
-                          : QUIC_STREAM_INITIATOR_CLIENT;
+    type = ch->is_server ? QUIC_STREAM_INITIATOR_SERVER
+                         : QUIC_STREAM_INITIATOR_CLIENT;
 
     if (is_uni) {
         p_next_ordinal = &ch->next_local_stream_ordinal_uni;
index cce1bde5c44674803ae992fa77675498453661a9..581117d537d801aa0851a4c4fe2e43675d21cdf5 100644 (file)
@@ -341,6 +341,8 @@ void ossl_quic_free(SSL *s)
     if (!expect_quic(s, &ctx))
         return;
 
+    quic_lock(ctx.qc);
+
     if (ctx.is_stream) {
         /*
          * When a QSSO is freed, the XSO is freed immediately, because the XSO
@@ -349,8 +351,6 @@ void ossl_quic_free(SSL *s)
          * as deleted for later collection.
          */
 
-        quic_lock(ctx.qc);
-
         assert(ctx.qc->num_xso > 0);
         --ctx.qc->num_xso;
 
@@ -376,8 +376,6 @@ void ossl_quic_free(SSL *s)
         return;
     }
 
-    quic_lock(ctx.qc);
-
     /*
      * Free the default XSO, if any. The QUIC_STREAM is not deleted at this
      * stage, but is freed during the channel free when the whole QSM is freed.
@@ -1902,7 +1900,7 @@ QUIC_TAKES_LOCK
 static size_t ossl_quic_pending_int(const SSL *s)
 {
     QCTX ctx;
-    size_t avail = 0;
+    size_t avail;
     int fin = 0;
 
     if (!expect_quic_with_stream_lock(s, /*remote_init=*/-1, &ctx))
index ad3b1ed15d4460587e5e81143d5b8a817302063f..f7e3f497b8e304222acc4a967c2d422e9d8f3fdf 100644 (file)
@@ -1874,14 +1874,12 @@ int SSL_has_pending(const SSL *s)
      * the records for some reason.
      */
     const SSL_CONNECTION *sc;
-#ifndef OPENSSL_NO_QUIC
-    const QUIC_CONNECTION *qc = QUIC_CONNECTION_FROM_CONST_SSL(s);
 
-    if (qc != NULL)
+#ifndef OPENSSL_NO_QUIC
+    if (IS_QUIC(s))
         return ossl_quic_has_pending(s);
 #endif
 
-
     sc = SSL_CONNECTION_FROM_CONST_SSL(s);
 
     /* Check buffered app data if any first */
@@ -2692,10 +2690,9 @@ int SSL_shutdown(SSL *s)
      * (see ssl3_shutdown).
      */
     SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
-#ifndef OPENSSL_NO_QUIC
-    QUIC_CONNECTION *qc = QUIC_CONNECTION_FROM_SSL(s);
 
-    if (qc != NULL)
+#ifndef OPENSSL_NO_QUIC
+    if (IS_QUIC(s))
         return ossl_quic_conn_shutdown(s, 0, NULL, 0);
 #endif