You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by mi...@apache.org on 2022/01/22 22:02:12 UTC

svn commit: r1897356 - /httpd/httpd/trunk/modules/ssl/ssl_engine_io.c

Author: minfrin
Date: Sat Jan 22 22:02:11 2022
New Revision: 1897356

URL: http://svn.apache.org/viewvc?rev=1897356&view=rev
Log:
mod_ssl: An edge case exists where SSL_read might return SSL_ERROR_WANT_READ
even in blocking BIO cases. Set guards so that an async MPM is not accessed
at this point. There is no need to set non blocking, mod_ssl's BIO already
knows how to do this. 

Modified:
    httpd/httpd/trunk/modules/ssl/ssl_engine_io.c

Modified: httpd/httpd/trunk/modules/ssl/ssl_engine_io.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/ssl/ssl_engine_io.c?rev=1897356&r1=1897355&r2=1897356&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/ssl/ssl_engine_io.c (original)
+++ httpd/httpd/trunk/modules/ssl/ssl_engine_io.c Sat Jan 22 22:02:11 2022
@@ -796,7 +796,9 @@ static apr_status_t ssl_io_input_read(bi
                  * (This is usually the case when the client forces an SSL
                  * renegotiation which is handled implicitly by OpenSSL.)
                  */
-                inctx->c->cs->sense = CONN_SENSE_WANT_READ;
+                if (inctx->c->cs) {
+                    inctx->c->cs->sense = CONN_SENSE_WANT_READ;
+                }
                 inctx->rc = APR_EAGAIN;
 
                 if (*len > 0) {
@@ -817,7 +819,9 @@ static apr_status_t ssl_io_input_read(bi
                  * (This is usually the case when the client forces an SSL
                  * renegotiation which is handled implicitly by OpenSSL.)
                  */
-                inctx->c->cs->sense = CONN_SENSE_WANT_WRITE;
+                if (inctx->c->cs) {
+                    inctx->c->cs->sense = CONN_SENSE_WANT_WRITE;
+                }
                 inctx->rc = APR_EAGAIN;
 
                 if (*len > 0) {
@@ -983,7 +987,9 @@ static apr_status_t ssl_filter_write(ap_
              * (This is usually the case when the client forces an SSL
              * renegotiation which is handled implicitly by OpenSSL.)
              */
-            outctx->c->cs->sense = CONN_SENSE_WANT_READ;
+            if (outctx->c->cs) {
+                outctx->c->cs->sense = CONN_SENSE_WANT_READ;
+            }
             outctx->rc = APR_EAGAIN;
             ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, outctx->c,
                           "Want read during nonblocking write");
@@ -1516,7 +1522,9 @@ static apr_status_t ssl_io_filter_handsh
              */
             ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, outctx->c,
                           "Want read during nonblocking accept");
-            outctx->c->cs->sense = CONN_SENSE_WANT_READ;
+        	if (outctx->c->cs) {
+                outctx->c->cs->sense = CONN_SENSE_WANT_READ;
+        	}
             outctx->rc = APR_EAGAIN;
             return APR_EAGAIN;
         }
@@ -1526,7 +1534,9 @@ static apr_status_t ssl_io_filter_handsh
              */
             ap_log_cerror(APLOG_MARK, APLOG_TRACE6, 0, outctx->c,
                           "Want write during nonblocking accept");
-            outctx->c->cs->sense = CONN_SENSE_WANT_WRITE;
+        	if (outctx->c->cs) {
+                outctx->c->cs->sense = CONN_SENSE_WANT_WRITE;
+        	}
             outctx->rc = APR_EAGAIN;
             return APR_EAGAIN;
         }
@@ -2362,13 +2372,6 @@ void ssl_io_filter_init(conn_rec *c, req
 #endif
     BIO_set_data(filter_ctx->pbioWrite, (void *)bio_filter_out_ctx_new(filter_ctx, c));
 
-    /* write is non blocking for the benefit of async mpm */
-    if (c->cs) {
-        BIO_set_nbio(filter_ctx->pbioWrite, 1);
-        ap_log_cerror(APLOG_MARK, APLOG_TRACE7, 0, c,
-                      "Enabling non-blocking writes");
-    }
-
     ssl_io_input_add_filter(filter_ctx, c, r, ssl);
 
     SSL_set_bio(ssl, filter_ctx->pbioRead, filter_ctx->pbioWrite);