diff --git a/tests/check_memlock.c b/tests/check_memlock.c
index 0f1ae7d1519158009dde947bb625f92af49f7e30..cc8e4f843b6c88c12d89687f7035b260b80e182a 100644
--- a/tests/check_memlock.c
+++ b/tests/check_memlock.c
@@ -43,6 +43,8 @@
 
 #include "maestro.h"
 #include "maestro/i_memlock.h"
+#include <unistd.h>
+
 
 CHEAT_TEST(lock_unlock,
            {
@@ -77,3 +79,35 @@ CHEAT_TEST(lock_unlock_multi,
 
              free(x);
            })
+
+CHEAT_TEST(lock_overlapping,
+           {
+             long pagesize = sysconf(_SC_PAGESIZE);
+             void *x = malloc(3*pagesize);
+             cheat_assert(x!=NULL);
+             cheat_assert(pagesize>4);
+
+             cheat_assert(MSTRO_OK==mstro_memlock_init(4*pagesize));
+
+             /* one on the first page */
+             void *start1 = x;
+             size_t  len1 = pagesize/2;
+             /* one on the same page */
+             void *start2 = (void*)((uintptr_t)x+len1);
+             size_t  len2 = pagesize/4;
+             /* one extending into the third page */
+             void *start3 = (void*)((uintptr_t)x+len1+len2);
+             size_t  len3 = 2*pagesize;
+
+             cheat_assert(MSTRO_OK==mstro_memlock(start1, len1));
+             cheat_assert(MSTRO_OK==mstro_memlock(start2, len2));
+             cheat_assert(MSTRO_OK==mstro_memlock(start3, len3));
+
+             cheat_assert(MSTRO_OK==mstro_memunlock(start2, len2));
+             cheat_assert(MSTRO_OK==mstro_memunlock(start1, len1));
+             cheat_assert(MSTRO_OK==mstro_memunlock(start3, len3));
+
+             free(x);
+
+             
+           })