mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
relay: Don't allow DirPort on non-IPv4
Our code doesn't allow it and so this prevents an assert() crash if the DirPort is for instance IPv6 only. Fixes #40494 Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
@@ -352,6 +352,7 @@ check_and_prune_server_ports(smartlist_t *ports,
|
||||
int n_orport_listeners = 0;
|
||||
int n_dirport_advertised = 0;
|
||||
int n_dirport_listeners = 0;
|
||||
int n_dirport_listeners_v4 = 0;
|
||||
int n_low_port = 0;
|
||||
int r = 0;
|
||||
|
||||
@@ -362,8 +363,12 @@ check_and_prune_server_ports(smartlist_t *ports,
|
||||
if (port->type == CONN_TYPE_DIR_LISTENER) {
|
||||
if (! port->server_cfg.no_advertise)
|
||||
++n_dirport_advertised;
|
||||
if (! port->server_cfg.no_listen)
|
||||
if (! port->server_cfg.no_listen) {
|
||||
++n_dirport_listeners;
|
||||
if (port_binds_ipv4(port)) {
|
||||
++n_dirport_listeners_v4;
|
||||
}
|
||||
}
|
||||
} else if (port->type == CONN_TYPE_OR_LISTENER) {
|
||||
if (! port->server_cfg.no_advertise) {
|
||||
++n_orport_advertised;
|
||||
@@ -408,6 +413,12 @@ check_and_prune_server_ports(smartlist_t *ports,
|
||||
"address. Tor needs to listen on an IPv4 address too.");
|
||||
r = -1;
|
||||
}
|
||||
if (n_dirport_advertised && n_dirport_listeners_v4 == 0) {
|
||||
log_warn(LD_CONFIG, "We are listening on a non-IPv4 DirPort. This is not "
|
||||
"allowed. Consider either setting an IPv4 address or "
|
||||
"simply removing it because it is not used anymore.");
|
||||
r = -1;
|
||||
}
|
||||
|
||||
if (n_low_port && options->AccountingMax &&
|
||||
(!have_capability_support() || options->KeepBindCapabilities == 0)) {
|
||||
|
||||
Reference in New Issue
Block a user