diff options
-rw-r--r-- | crypto/bio/bss_conn.c | 19 | ||||
-rw-r--r-- | doc/man3/BIO_s_connect.pod | 12 | ||||
-rw-r--r-- | include/openssl/bio.h.in | 2 | ||||
-rw-r--r-- | ssl/quic/quic_impl.c | 2 | ||||
-rw-r--r-- | util/other.syms | 2 |
5 files changed, 23 insertions, 14 deletions
diff --git a/crypto/bio/bss_conn.c b/crypto/bio/bss_conn.c index 8d29f94bd1..f09160b3c0 100644 --- a/crypto/bio/bss_conn.c +++ b/crypto/bio/bss_conn.c @@ -347,8 +347,7 @@ static int conn_free(BIO *a) return 0; data = (BIO_CONNECT *)a->ptr; - if (data->dgram_bio != NULL) - BIO_free(data->dgram_bio); + BIO_free(data->dgram_bio); if (a->shutdown) { conn_close_socket(a); @@ -372,8 +371,12 @@ static int conn_read(BIO *b, char *out, int outl) return ret; } - if (data->dgram_bio != NULL) - return BIO_read(data->dgram_bio, out, outl); + if (data->dgram_bio != NULL) { + BIO_clear_retry_flags(b); + ret = BIO_read(data->dgram_bio, out, outl); + BIO_set_flags(b, BIO_get_retry_flags(data->dgram_bio)); + return ret; + } if (out != NULL) { clear_socket_error(); @@ -406,8 +409,12 @@ static int conn_write(BIO *b, const char *in, int inl) return ret; } - if (data->dgram_bio != NULL) - return BIO_write(data->dgram_bio, in, inl); + if (data->dgram_bio != NULL) { + BIO_clear_retry_flags(b); + ret = BIO_write(data->dgram_bio, in, inl); + BIO_set_flags(b, BIO_get_retry_flags(data->dgram_bio)); + return ret; + } clear_socket_error(); # ifndef OPENSSL_NO_KTLS diff --git a/doc/man3/BIO_s_connect.pod b/doc/man3/BIO_s_connect.pod index 0c1106c523..35d67787ff 100644 --- a/doc/man3/BIO_s_connect.pod +++ b/doc/man3/BIO_s_connect.pod @@ -7,7 +7,7 @@ BIO_set_conn_hostname, BIO_set_conn_port, BIO_set_conn_address, BIO_set_conn_ip_family, BIO_get_conn_hostname, BIO_get_conn_port, BIO_get_conn_address, BIO_get_conn_ip_family, -BIO_set_nbio, BIO_set_sock_type, BIO_get_sock_type, BIO_get_dgram_bio, +BIO_set_nbio, BIO_set_sock_type, BIO_get_sock_type, BIO_get0_dgram_bio, BIO_do_connect - connect BIO =head1 SYNOPSIS @@ -31,7 +31,7 @@ BIO_do_connect - connect BIO int BIO_set_sock_type(BIO *b, int sock_type); int BIO_get_sock_type(BIO *b); - int BIO_get_dgram_bio(BIO *B, BIO **dgram_bio); + int BIO_get0_dgram_bio(BIO *B, BIO **dgram_bio); long BIO_do_connect(BIO *b); @@ -112,8 +112,10 @@ default) and B<SOCK_DGRAM>. If B<SOCK_DGRAM> is configured, the connection created is a UDP datagram socket handled via L<BIO_s_datagram(3)>. I/O calls such as L<BIO_read(3)> and L<BIO_write(3)> are forwarded transparently to an internal L<BIO_s_datagram(3)> instance. The created L<BIO_s_datagram(3)> -instance can be retrieved using BIO_get_dgram_bio() if desired, which writes -a pointer to the L<BIO_s_datagram(3)> instance to I<*dgram_bio>. +instance can be retrieved using BIO_get0_dgram_bio() if desired, which writes +a pointer to the L<BIO_s_datagram(3)> instance to I<*dgram_bio>. The lifetime +of the internal L<BIO_s_datagram(3)> is managed by BIO_s_connect() and does not +need to be freed by the caller. BIO_get_sock_type() retrieves the value set using BIO_set_sock_type(). @@ -181,7 +183,7 @@ BIO_set_sock_type() returns 1 on success or 0 on failure. BIO_get_sock_type() returns a socket type or 0 if the call is not supported. -BIO_get_dgram_bio() returns 1 on success or 0 on failure. +BIO_get0_dgram_bio() returns 1 on success or 0 on failure. =head1 EXAMPLES diff --git a/include/openssl/bio.h.in b/include/openssl/bio.h.in index e6af3470a5..aa05d7d9cf 100644 --- a/include/openssl/bio.h.in +++ b/include/openssl/bio.h.in @@ -495,7 +495,7 @@ typedef struct bio_poll_descriptor_st { # define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) # define BIO_set_sock_type(b,t) BIO_ctrl(b,BIO_C_SET_SOCK_TYPE,(t),NULL) # define BIO_get_sock_type(b) BIO_ctrl(b,BIO_C_GET_SOCK_TYPE,0,NULL) -# define BIO_get_dgram_bio(b, p) BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p)) +# define BIO_get0_dgram_bio(b, p) BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p)) /* BIO_s_accept() */ # define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ diff --git a/ssl/quic/quic_impl.c b/ssl/quic/quic_impl.c index 839168040b..11c8afce8a 100644 --- a/ssl/quic/quic_impl.c +++ b/ssl/quic/quic_impl.c @@ -1581,7 +1581,7 @@ static int quic_do_handshake(QCTX *ctx) * We do this as late as possible because some BIOs (e.g. BIO_s_connect) * may not be able to provide us with a peer address until they have * finished their own processing. They may not be able to perform this - * processing until an application has figured configuring that BIO + * processing until an application has finished configuring that BIO * (e.g. with setter calls), which might happen after SSL_set_bio is * called. */ diff --git a/util/other.syms b/util/other.syms index cd1f73468d..4bac4afeaa 100644 --- a/util/other.syms +++ b/util/other.syms @@ -169,7 +169,7 @@ BIO_dgram_set_peer define BIO_dgram_recv_timedout define BIO_dgram_send_timedout define BIO_dgram_detect_peer_addr define -BIO_get_dgram_bio define +BIO_get0_dgram_bio define BIO_get_sock_type define BIO_set_sock_type define BIO_do_accept define |