aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-03-19 10:36:53 -0400
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-03-19 10:36:53 -0400
commit7f6667b5bc802d30c006207f2d0cc2d025e47d08 (patch)
tree5e40cf9e32b27abab54597c350efd9701f230bb1
parentcc0413abeebf8b21ba62de12f6fe1a3ec0007900 (diff)
downloadlibrseq-7f6667b5bc802d30c006207f2d0cc2d025e47d08.tar.gz
mempool: Use MADV_DONTFORK on init values
The init values shared mapping should not be shared across fork. Use madvise MADV_DONTFORK on the memory range to ensure those pages are not shared with children processes across fork. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Change-Id: I4b3541d21401227ca568ef6e8105d088746341cb
-rw-r--r--src/rseq-mempool.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/rseq-mempool.c b/src/rseq-mempool.c
index 1d87e1a..fa1cff0 100644
--- a/src/rseq-mempool.c
+++ b/src/rseq-mempool.c
@@ -748,6 +748,12 @@ struct rseq_mempool_range *rseq_mempool_range_create(struct rseq_mempool *pool)
MAP_SHARED | MAP_FIXED, memfd, 0) != (void *) range->init) {
goto error_alloc;
}
+ /*
+ * Make sure the init values shared mapping is not
+ * shared with the children processes across fork.
+ */
+ if (madvise(range->init, pool->attr.stride, MADV_DONTFORK))
+ goto error_alloc;
assert(pool->attr.type == MEMPOOL_TYPE_PERCPU);
/*
* Map per-cpu memory as private COW mappings of init values.