Commit 243dee74 authored by Daniel Black's avatar Daniel Black

MDEV-34437: handle error on getaddrinfo

When getaddrinfo returns and error, the contents
of ai are invalid so we cannot continue based
on their data structures.

In the previous branch of the if statement, we
abort there if there is an error so for consistency
we abort here too.

The test case fixes the port number to UINTMAX32
for both an enumberated bind-address and the
default bind-address covering the two calls to
getaddrinfo.

Review thanks Sanja.
parent 1d76794a
#
# MDEV-34437 SIGSEGV in vio_get_normalized_ip when using extra-port
#
FOUND 1 /\[ERROR\] Can't create IP socket: Servname not supported/ in errorlog.err
FOUND 1 /\[ERROR\] Can't create IP socket: Servname not supported/ in errorlog.err
# restart
# End of 10.11 tests
# mysqld refuses to run as root normally.
--source include/not_as_root.inc
--source include/have_debug.inc
--source include/not_embedded.inc
--source include/linux.inc
--source include/shutdown_mysqld.inc
# Try to start the server, with bad values for some options.
# Make sure, the starts fails, and expected message is in the error log
--let errorlog=$MYSQL_TMP_DIR/errorlog.err
--let SEARCH_FILE=$errorlog
--echo #
--echo # MDEV-34437 SIGSEGV in vio_get_normalized_ip when using extra-port
--echo #
# getaddrinfo failure by fixing port to invalid value
--error 1
--exec $MYSQLD --defaults-group-suffix=.1 --defaults-file=$MYSQLTEST_VARDIR/my.cnf --debug='d,sabotage_port_number' --log-error=$errorlog
--let SEARCH_PATTERN=\[ERROR\] Can't create IP socket: Servname not supported
--source include/search_pattern_in_file.inc
--remove_file $SEARCH_FILE
--error 1
--exec $MYSQLD --defaults-group-suffix=.1 --defaults-file=$MYSQLTEST_VARDIR/my.cnf --debug='d,sabotage_port_number' --bind-address=0.0.0.0 --log-error=$errorlog
--let SEARCH_PATTERN=\[ERROR\] Can't create IP socket: Servname not supported
--source include/search_pattern_in_file.inc
--remove_file $SEARCH_FILE
--source include/start_mysqld.inc
--echo # End of 10.11 tests
......@@ -2329,6 +2329,7 @@ static void activate_tcp_port(uint port,
else
real_bind_addr_str= my_bind_addr_str;
DBUG_EXECUTE_IF("sabotage_port_number", port= UINT_MAX32;);
my_snprintf(port_buf, NI_MAXSERV, "%d", port);
if (real_bind_addr_str && *real_bind_addr_str)
......@@ -2372,6 +2373,13 @@ static void activate_tcp_port(uint port,
else
{
error= getaddrinfo(real_bind_addr_str, port_buf, &hints, &ai);
if (unlikely(error != 0))
{
sql_print_error("%s: %s", ER_DEFAULT(ER_IPSOCK_ERROR),
gai_strerror(error));
unireg_abort(1); /* purecov: tested */
}
head= ai;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment