mirror of
https://github.com/openssl/openssl.git
synced 2025-02-05 14:10:53 +08:00
current `translate_msg()` function attempts to set `->msg_name` (and `->msg_namelen`) with `BIO`'s peer name (connection destination) regardless if underlying socket is connected or not. Such implementation uncovers differences in socket implementation between various OSes. As we have learned hard way `sendmsg()` and `sendmmsg()` on `OpenBSD` and (`MacOS` too) fail to send messages with `->msg_name` being set on connected socket. In such case the caller receives `EISCON` errro. I think `translate_msg()` caller should provide a hint to indicate whether we deal with connected (or un-connected) socket. For connected sockets the peer's name should not be set/filled by `translate_msg()`. On the other hand if socket is un-connected, then `translate_msg()` must populate `->msg_name` and `->msg_namelen` members. The caller can use `getpeername(2)` to see if socket is connected. If `getpeername()` succeeds then we must be dealing with connected socket and `translate_msg()` must not set `->msg_name` and `->msg_namelen` members. If `getpeername(2)` fails, then `translate_msg()` must provide peer's name (destination address) in `->msg_name` and set `->msg_namelen` accordingly. The propposed fix introduces `is_connected()` function, which applies `getpeername()` to socket bound to `BIO` instance. The `dgram_sendmmsg()` uses `is_connected()` as a hint for `translate_msg()` function, so msghdr gets initialized with respect to socket state. The change also modifies existing `test/quic_client_test.c` so it also covers the case of connected socket. To keep things simple we can introduce optional argument `connect_first` to `./quic_client_test` function. Without `connect_first` the test run as usual. With `connect_first` the test creates and connects socket first. Then it passes such socket to `BIO` sub-system to perform `QUIC` connect test as usual. Fixes #23251 Reviewed-by: Neil Horman <nhorman@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/23396) |
||
---|---|---|
.. | ||
bf_buff.c | ||
bf_lbuf.c | ||
bf_nbio.c | ||
bf_null.c | ||
bf_prefix.c | ||
bf_readbuff.c | ||
bio_addr.c | ||
bio_cb.c | ||
bio_dump.c | ||
bio_err.c | ||
bio_lib.c | ||
bio_local.h | ||
bio_meth.c | ||
bio_print.c | ||
bio_sock2.c | ||
bio_sock.c | ||
bss_acpt.c | ||
bss_bio.c | ||
bss_conn.c | ||
bss_core.c | ||
bss_dgram_pair.c | ||
bss_dgram.c | ||
bss_fd.c | ||
bss_file.c | ||
bss_log.c | ||
bss_mem.c | ||
bss_null.c | ||
bss_sock.c | ||
build.info | ||
ossl_core_bio.c |