aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-03-07 15:57:40 -0500
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-03-07 15:57:40 -0500
commit8118247ec2f3912f2fb59db3a77eca5b3723f330 (patch)
tree0b43ee2bf8214456c8267679630e5169d8dda42a
parenta82006d0cfacd3ec47248051bcdad85ef9b85199 (diff)
downloadlibrseq-8118247ec2f3912f2fb59db3a77eca5b3723f330.tar.gz
percpu pool: mmap set attr: return error value
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Change-Id: Id2debf769299ee1d6624097b38e79f916b8c0f2b
-rw-r--r--include/rseq/percpu-alloc.h4
-rw-r--r--src/rseq-percpu-alloc.c7
2 files changed, 9 insertions, 2 deletions
diff --git a/include/rseq/percpu-alloc.h b/include/rseq/percpu-alloc.h
index 50580b0..1532ed6 100644
--- a/include/rseq/percpu-alloc.h
+++ b/include/rseq/percpu-alloc.h
@@ -303,8 +303,10 @@ void rseq_pool_attr_destroy(struct rseq_pool_attr *attr);
*
* The @mmap_priv argument is a private data pointer passed to both
* @mmap_func and @munmap_func callbacks.
+ *
+ * Returns 0 on success, -1 with errno=EINVAL if arguments are invalid.
*/
-void rseq_pool_attr_set_mmap(struct rseq_pool_attr *attr,
+int rseq_pool_attr_set_mmap(struct rseq_pool_attr *attr,
void *(*mmap_func)(void *priv, size_t len),
int (*munmap_func)(void *priv, void *ptr, size_t len),
void *mmap_priv);
diff --git a/src/rseq-percpu-alloc.c b/src/rseq-percpu-alloc.c
index 4e15693..daccf86 100644
--- a/src/rseq-percpu-alloc.c
+++ b/src/rseq-percpu-alloc.c
@@ -651,13 +651,18 @@ void rseq_pool_attr_destroy(struct rseq_pool_attr *attr)
free(attr);
}
-void rseq_pool_attr_set_mmap(struct rseq_pool_attr *attr,
+int rseq_pool_attr_set_mmap(struct rseq_pool_attr *attr,
void *(*mmap_func)(void *priv, size_t len),
int (*munmap_func)(void *priv, void *ptr, size_t len),
void *mmap_priv)
{
+ if (!attr) {
+ errno = EINVAL;
+ return -1;
+ }
attr->mmap_set = true;
attr->mmap_func = mmap_func;
attr->munmap_func = munmap_func;
attr->mmap_priv = mmap_priv;
+ return 0;
}