Skip to content

Commit

Permalink
Socket callbacks were passed SOCK_STREAM instead of SOCK_DGRAM on udp
Browse files Browse the repository at this point in the history
A regression was introduced in 1.20.0 that would pass SOCK_STREAM on udp
connections due to code refactoring.  If a client application validated this
data, it could cause issues as seen in gRPC.

Fixes Issue: #571
Fix By: Brad House (@bradh352)
  • Loading branch information
bradh352 committed Oct 12, 2023
1 parent 432c425 commit a070d78
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions src/lib/ares_process.c
Original file line number Diff line number Diff line change
Expand Up @@ -1065,6 +1065,7 @@ static ares_status_t open_socket(ares_channel channel,
unsigned short port;
struct server_connection *conn;
ares__llist_node_t *node;
int type = is_tcp?SOCK_STREAM:SOCK_DGRAM;

if (is_tcp) {
port = aresx_sitous(server->addr.tcp_port?
Expand Down Expand Up @@ -1098,8 +1099,7 @@ static ares_status_t open_socket(ares_channel channel,
}

/* Acquire a socket. */
s = ares__open_socket(channel, server->addr.family,
is_tcp?SOCK_STREAM:SOCK_DGRAM, 0);
s = ares__open_socket(channel, server->addr.family, type, 0);
if (s == ARES_SOCKET_BAD)
return ARES_ECONNREFUSED;

Expand Down Expand Up @@ -1129,8 +1129,7 @@ static ares_status_t open_socket(ares_channel channel,
#endif

if (channel->sock_config_cb) {
int err = channel->sock_config_cb(s, SOCK_STREAM,
channel->sock_config_cb_data);
int err = channel->sock_config_cb(s, type, channel->sock_config_cb_data);
if (err < 0) {
ares__close_socket(channel, s);
return ARES_ECONNREFUSED;
Expand All @@ -1148,8 +1147,7 @@ static ares_status_t open_socket(ares_channel channel,
}

if (channel->sock_create_cb) {
int err = channel->sock_create_cb(s, SOCK_STREAM,
channel->sock_create_cb_data);
int err = channel->sock_create_cb(s, type, channel->sock_create_cb_data);
if (err < 0) {
ares__close_socket(channel, s);
return ARES_ECONNREFUSED;
Expand Down

0 comments on commit a070d78

Please sign in to comment.