From 5973bedba6892b8100467801c39d1364a5bfd617 Mon Sep 17 00:00:00 2001 From: Florent Bruneau Date: Sun, 28 Sep 2008 11:34:38 +0200 Subject: [PATCH 1/1] mprotect locked arrays. Signed-off-by: Florent Bruneau --- common/array.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/common/array.h b/common/array.h index 86cf360..0ca70de 100644 --- a/common/array.h +++ b/common/array.h @@ -160,13 +160,20 @@ array_wipe(array); \ } while (0) +#define array_byte_len(array) (array).len * sizeof(*(array).data) + #define array_lock(array) \ - ((array).locked || \ - (mlock((array).data, (array).len * sizeof(*(array).data)) == 0 \ - && ((array).locked = true))) + ((array).locked \ + || (mprotect((array).data, array_byte_len(array), PROT_READ) == 0 \ + && mlock((array).data, array_byte_len(array)) == 0 \ + && ((array).locked = true)) \ + || (mprotect((array).data, array_byte_len(array), \ + PROT_READ | PROT_WRITE) > 0)) #define array_unlock(array) \ if ((array).locked) { \ - (void)munlock((array).data, (array).len * sizeof(*(array).data)); \ + (void)munlock((array).data, array_byte_len(array)); \ + (void)mprotect((array).data, array_byte_len(array), \ + PROT_READ | PROT_WRITE); \ (array).locked = false; \ } -- 2.20.1