add workaround for bug in Linux MPK implementation

This commit is contained in:
Daniel Micay 2018-10-23 19:07:41 -04:00
parent 299bd6d414
commit 4cd61e281d

View File

@ -776,6 +776,14 @@ static void full_unlock(void) {
static void post_fork_child(void) { static void post_fork_child(void) {
thread_unseal_metadata(); thread_unseal_metadata();
#ifdef USE_PKEY
// disable sealing to work around kernel bug causing fork to lose the pkey setup
memory_protect_rw(&ro, sizeof(ro));
ro.metadata_pkey = -1;
memory_protect_ro(&ro, sizeof(ro));
#endif
mutex_init(&ro.region_allocator->lock); mutex_init(&ro.region_allocator->lock);
random_state_init(&ro.region_allocator->rng); random_state_init(&ro.region_allocator->rng);
for (unsigned class = 0; class < N_SIZE_CLASSES; class++) { for (unsigned class = 0; class < N_SIZE_CLASSES; class++) {