mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 20:33:31 +01:00
map_anon: define a macro if it is possible for noinherit to fail.
This commit is contained in:
parent
12205c3cbe
commit
361e955cf3
@ -41,6 +41,27 @@
|
|||||||
* the child process. */
|
* the child process. */
|
||||||
#define INHERIT_ZERO 2
|
#define INHERIT_ZERO 2
|
||||||
|
|
||||||
|
/* Here we define the NOINHERIT_CAN_FAIL macro if and only if
|
||||||
|
* it's possible that ANONMAP_NOINHERIT might yield inheritable memory.
|
||||||
|
*/
|
||||||
|
#ifdef _WIN32
|
||||||
|
/* Windows can't fork, so NOINHERIT is never needed. */
|
||||||
|
#elif defined(HAVE_MINHERIT)
|
||||||
|
/* minherit() will always have a working MAP_INHERIT_NONE or MAP_INHERIT_ZERO.
|
||||||
|
* NOINHERIT should always work.
|
||||||
|
*/
|
||||||
|
#elif defined(HAVE_MADVISE)
|
||||||
|
/* madvise() sometimes has neither MADV_DONTFORK and MADV_WIPEONFORK.
|
||||||
|
* We need to be ready for the possibility it failed.
|
||||||
|
*
|
||||||
|
* (Linux added DONTFORK in 2.6.16 and WIPEONFORK in 4.14. If we someday
|
||||||
|
* require 2.6.16 or later, we can assume that DONTFORK will work.)
|
||||||
|
*/
|
||||||
|
#define NOINHERIT_CAN_FAIL
|
||||||
|
#else
|
||||||
|
#define NOINHERIT_CAN_FAIL
|
||||||
|
#endif
|
||||||
|
|
||||||
void *tor_mmap_anonymous(size_t sz, unsigned flags,
|
void *tor_mmap_anonymous(size_t sz, unsigned flags,
|
||||||
unsigned *inherit_result_out);
|
unsigned *inherit_result_out);
|
||||||
void tor_munmap_anonymous(void *mapping, size_t sz);
|
void tor_munmap_anonymous(void *mapping, size_t sz);
|
||||||
|
@ -6224,11 +6224,17 @@ test_util_map_anon_nofork(void *arg)
|
|||||||
int ws;
|
int ws;
|
||||||
waitpid(child, &ws, 0);
|
waitpid(child, &ws, 0);
|
||||||
|
|
||||||
|
#ifndef NOINHERIT_CAN_FAIL
|
||||||
|
/* Only if NOINHERIT_CAN_FAIL should it be possible for us to get
|
||||||
|
* INHERIT_KEEP behavior in this case. */
|
||||||
|
tt_assert(inherit, OP_NE, INHERIT_KEEP);
|
||||||
|
#else
|
||||||
if (inherit == INHERIT_KEEP) {
|
if (inherit == INHERIT_KEEP) {
|
||||||
/* Call this test "skipped", not "passed", since noinherit wasn't
|
/* Call this test "skipped", not "passed", since noinherit wasn't
|
||||||
* implemented. */
|
* implemented. */
|
||||||
tt_skip();
|
tt_skip();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
done:
|
done:
|
||||||
tor_munmap_anonymous(ptr, sz);
|
tor_munmap_anonymous(ptr, sz);
|
||||||
|
Loading…
Reference in New Issue
Block a user