Loading changes/ticket40434 0 → 100644 +6 −0 Original line number Diff line number Diff line o Minor bugfix (onion service): - Do not flag an HSDir as non-running in case the descriptor upload or fetch fails. An onion service closes pending directory connections before uploading a new descriptor which can thus lead to wrongly flagging many relays and thus affecting circuit building path selection. Fixes bug 40434; bugfix on 0.2.0.13-alpha. src/feature/dirclient/dirclient.c +16 −1 Original line number Diff line number Diff line Loading @@ -709,7 +709,22 @@ connection_dir_client_request_failed(dir_connection_t *conn) entry_guard_failed(&conn->guard_state); } if (!entry_list_is_constrained(get_options())) router_set_status(conn->identity_digest, 0); /* don't try this one again */ /* We must not set a directory to non-running for HS purposes else we end * up flagging nodes from the hashring has unusable. It doesn't have direct * effect on the HS subsystem because the nodes are selected regardless of * their status but still, we shouldn't flag them as non running. * * One example where this can go bad is if a tor instance gets added a lot * of ephemeral services and with a network with problem then many nodes in * the consenus ends up unusable. * * Furthermore, a service does close any pending directory connections * before uploading a descriptor and thus we can end up here in a natural * way since closing a pending directory connection leads to this code * path. */ if (!DIR_PURPOSE_IS_HS(TO_CONN(conn)->purpose)) { router_set_status(conn->identity_digest, 0); } if (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC || conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) { log_info(LD_DIR, "Giving up on serverdesc/extrainfo fetch from " Loading src/feature/dircommon/directory.h +6 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,12 @@ const dir_connection_t *CONST_TO_DIR_CONN(const connection_t *c); (p)==DIR_PURPOSE_UPLOAD_SIGNATURES || \ (p)==DIR_PURPOSE_UPLOAD_HSDESC) /** True iff p is a purpose corresponding to onion service that is either * uploading or fetching actions. */ #define DIR_PURPOSE_IS_HS(p) \ ((p) == DIR_PURPOSE_FETCH_HSDESC || \ (p) == DIR_PURPOSE_UPLOAD_HSDESC) enum compress_method_t; int parse_http_response(const char *headers, int *code, time_t *date, enum compress_method_t *compression, char **response); Loading Loading
changes/ticket40434 0 → 100644 +6 −0 Original line number Diff line number Diff line o Minor bugfix (onion service): - Do not flag an HSDir as non-running in case the descriptor upload or fetch fails. An onion service closes pending directory connections before uploading a new descriptor which can thus lead to wrongly flagging many relays and thus affecting circuit building path selection. Fixes bug 40434; bugfix on 0.2.0.13-alpha.
src/feature/dirclient/dirclient.c +16 −1 Original line number Diff line number Diff line Loading @@ -709,7 +709,22 @@ connection_dir_client_request_failed(dir_connection_t *conn) entry_guard_failed(&conn->guard_state); } if (!entry_list_is_constrained(get_options())) router_set_status(conn->identity_digest, 0); /* don't try this one again */ /* We must not set a directory to non-running for HS purposes else we end * up flagging nodes from the hashring has unusable. It doesn't have direct * effect on the HS subsystem because the nodes are selected regardless of * their status but still, we shouldn't flag them as non running. * * One example where this can go bad is if a tor instance gets added a lot * of ephemeral services and with a network with problem then many nodes in * the consenus ends up unusable. * * Furthermore, a service does close any pending directory connections * before uploading a descriptor and thus we can end up here in a natural * way since closing a pending directory connection leads to this code * path. */ if (!DIR_PURPOSE_IS_HS(TO_CONN(conn)->purpose)) { router_set_status(conn->identity_digest, 0); } if (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC || conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) { log_info(LD_DIR, "Giving up on serverdesc/extrainfo fetch from " Loading
src/feature/dircommon/directory.h +6 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,12 @@ const dir_connection_t *CONST_TO_DIR_CONN(const connection_t *c); (p)==DIR_PURPOSE_UPLOAD_SIGNATURES || \ (p)==DIR_PURPOSE_UPLOAD_HSDESC) /** True iff p is a purpose corresponding to onion service that is either * uploading or fetching actions. */ #define DIR_PURPOSE_IS_HS(p) \ ((p) == DIR_PURPOSE_FETCH_HSDESC || \ (p) == DIR_PURPOSE_UPLOAD_HSDESC) enum compress_method_t; int parse_http_response(const char *headers, int *code, time_t *date, enum compress_method_t *compression, char **response); Loading