diff options
author | Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | 2024-03-19 10:36:53 -0400 |
---|---|---|
committer | Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | 2024-03-19 10:36:53 -0400 |
commit | 7f6667b5bc802d30c006207f2d0cc2d025e47d08 (patch) | |
tree | 5e40cf9e32b27abab54597c350efd9701f230bb1 | |
parent | cc0413abeebf8b21ba62de12f6fe1a3ec0007900 (diff) | |
download | librseq-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.c | 6 |
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. |