Merge remote-tracking branch 'rl1987/bug26525'

This commit is contained in:
Nick Mathewson 2018-07-09 09:31:12 -04:00
commit 03283c00d8
6 changed files with 27 additions and 26 deletions

4
changes/bug26525 Normal file
View File

@ -0,0 +1,4 @@
o Minor bugfixes (code quality):
- Rename sandbox_getaddrinfo() and other functions to no longer
misleadingly suggest that they are sandbox-only. Fixes bug
26525; bugfix on 0.2.7.1-alpha.

View File

@ -3677,7 +3677,7 @@ tor_free_all(int postfork)
routerparse_free_all(); routerparse_free_all();
ext_orport_free_all(); ext_orport_free_all();
control_free_all(); control_free_all();
sandbox_free_getaddrinfo_cache(); tor_free_getaddrinfo_cache();
protover_free_all(); protover_free_all();
bridges_free_all(); bridges_free_all();
consdiffmgr_free_all(); consdiffmgr_free_all();
@ -3899,7 +3899,7 @@ init_addrinfo(void)
// host name to sandbox // host name to sandbox
gethostname(hname, sizeof(hname)); gethostname(hname, sizeof(hname));
sandbox_add_addrinfo(hname); tor_add_addrinfo(hname);
} }
static sandbox_cfg_t* static sandbox_cfg_t*

View File

@ -277,7 +277,7 @@ tor_addr_lookup,(const char *name, uint16_t family, tor_addr_t *addr))
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_family = family; hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
err = sandbox_getaddrinfo(name, NULL, &hints, &res); err = tor_getaddrinfo(name, NULL, &hints, &res);
/* The check for 'res' here shouldn't be necessary, but it makes static /* The check for 'res' here shouldn't be necessary, but it makes static
* analysis tools happy. */ * analysis tools happy. */
if (!err && res) { if (!err && res) {
@ -306,7 +306,7 @@ tor_addr_lookup,(const char *name, uint16_t family, tor_addr_t *addr))
&((struct sockaddr_in6*)best->ai_addr)->sin6_addr); &((struct sockaddr_in6*)best->ai_addr)->sin6_addr);
result = 0; result = 0;
} }
sandbox_freeaddrinfo(res); tor_freeaddrinfo(res);
return result; return result;
} }
return (err == EAI_AGAIN) ? 1 : -1; return (err == EAI_AGAIN) ? 1 : -1;

View File

@ -121,14 +121,14 @@ sandbox_disable_getaddrinfo_cache(void)
} }
void void
sandbox_freeaddrinfo(struct addrinfo *ai) tor_freeaddrinfo(struct addrinfo *ai)
{ {
if (sandbox_getaddrinfo_cache_disabled) if (sandbox_getaddrinfo_cache_disabled)
freeaddrinfo(ai); freeaddrinfo(ai);
} }
int int
sandbox_getaddrinfo(const char *name, const char *servname, tor_getaddrinfo(const char *name, const char *servname,
const struct addrinfo *hints, const struct addrinfo *hints,
struct addrinfo **res) struct addrinfo **res)
{ {
@ -191,7 +191,7 @@ sandbox_getaddrinfo(const char *name, const char *servname,
} }
int int
sandbox_add_addrinfo(const char *name) tor_add_addrinfo(const char *name)
{ {
struct addrinfo *res; struct addrinfo *res;
struct addrinfo hints; struct addrinfo hints;
@ -204,16 +204,16 @@ sandbox_add_addrinfo(const char *name)
hints.ai_family = families[i]; hints.ai_family = families[i];
res = NULL; res = NULL;
(void) sandbox_getaddrinfo(name, NULL, &hints, &res); (void) tor_getaddrinfo(name, NULL, &hints, &res);
if (res) if (res)
sandbox_freeaddrinfo(res); tor_freeaddrinfo(res);
} }
return 0; return 0;
} }
void void
sandbox_free_getaddrinfo_cache(void) tor_free_getaddrinfo_cache(void)
{ {
cached_getaddrinfo_item_t **next, **item, *this; cached_getaddrinfo_item_t **next, **item, *this;
@ -229,7 +229,7 @@ sandbox_free_getaddrinfo_cache(void)
} }
void void
sandbox_make_getaddrinfo_cache_active(void) tor_make_getaddrinfo_cache_active(void)
{ {
sandbox_getaddrinfo_is_active = 1; sandbox_getaddrinfo_is_active = 1;
} }

View File

@ -22,27 +22,24 @@ MOCK_DECL(int,tor_lookup_hostname,(const char *name, uint32_t *addr));
struct addrinfo; struct addrinfo;
#ifdef USE_SANDBOX_GETADDRINFO #ifdef USE_SANDBOX_GETADDRINFO
/** Pre-calls getaddrinfo in order to pre-record result. */ /** Pre-calls getaddrinfo in order to pre-record result. */
int sandbox_add_addrinfo(const char *addr); int tor_add_addrinfo(const char *addr);
// XXXX rename these. They are named as though they were sandbox-only,
// XXXX but in fact they're the only allowed entry point to getaddrinfo.
// XXXX They don't invoke the sandbox code; they only have an internal cache.
struct addrinfo; struct addrinfo;
/** Replacement for getaddrinfo(), using pre-recorded results. */ /** Replacement for getaddrinfo(), using pre-recorded results. */
int sandbox_getaddrinfo(const char *name, const char *servname, int tor_getaddrinfo(const char *name, const char *servname,
const struct addrinfo *hints, const struct addrinfo *hints,
struct addrinfo **res); struct addrinfo **res);
void sandbox_freeaddrinfo(struct addrinfo *addrinfo); void tor_freeaddrinfo(struct addrinfo *addrinfo);
void sandbox_free_getaddrinfo_cache(void); void tor_free_getaddrinfo_cache(void);
void sandbox_make_getaddrinfo_cache_active(void); void tor_make_getaddrinfo_cache_active(void);
#else /* !(defined(USE_SANDBOX_GETADDRINFO)) */ #else /* !(defined(USE_SANDBOX_GETADDRINFO)) */
#define sandbox_getaddrinfo(name, servname, hints, res) \ #define tor_getaddrinfo(name, servname, hints, res) \
getaddrinfo((name),(servname), (hints),(res)) getaddrinfo((name),(servname), (hints),(res))
#define sandbox_add_addrinfo(name) \ #define tor_add_addrinfo(name) \
((void)(name)) ((void)(name))
#define sandbox_freeaddrinfo(addrinfo) \ #define tor_freeaddrinfo(addrinfo) \
freeaddrinfo((addrinfo)) freeaddrinfo((addrinfo))
#define sandbox_free_getaddrinfo_cache() #define tor_free_getaddrinfo_cache()
#endif /* defined(USE_SANDBOX_GETADDRINFO) */ #endif /* defined(USE_SANDBOX_GETADDRINFO) */
void sandbox_disable_getaddrinfo_cache(void); void sandbox_disable_getaddrinfo_cache(void);

View File

@ -1552,7 +1552,7 @@ install_syscall_filter(sandbox_cfg_t* cfg)
// marking the sandbox as active // marking the sandbox as active
sandbox_active = 1; sandbox_active = 1;
sandbox_make_getaddrinfo_cache_active(); tor_make_getaddrinfo_cache_active();
end: end:
seccomp_release(ctx); seccomp_release(ctx);