return sret;
 }
 
+static void *sys_mremap(void *addr, size_t old_len, size_t new_len,
+       unsigned long flags, void *new_addr)
+{
+       void *sret;
+
+       errno = 0;
+       sret = (void *) syscall(__NR_mremap, addr, old_len, new_len, flags, new_addr);
+       return sret;
+}
+
 static int sys_pkey_alloc(unsigned long flags, unsigned long init_val)
 {
        int ret = syscall(__NR_pkey_alloc, flags, init_val);
        }
 
        /* shrink from 4 pages to 2 pages. */
-       ret2 = mremap(ptr, size, 2 * page_size, 0, 0);
+       ret2 = sys_mremap(ptr, size, 2 * page_size, 0, 0);
        if (seal) {
-               FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED);
+               FAIL_TEST_IF_FALSE(ret2 == (void *) MAP_FAILED);
                FAIL_TEST_IF_FALSE(errno == EPERM);
        } else {
-               FAIL_TEST_IF_FALSE(ret2 != MAP_FAILED);
+               FAIL_TEST_IF_FALSE(ret2 != (void *) MAP_FAILED);
 
        }
 
        }
 
        /* expand from 2 page to 4 pages. */
-       ret2 = mremap(ptr, 2 * page_size, 4 * page_size, 0, 0);
+       ret2 = sys_mremap(ptr, 2 * page_size, 4 * page_size, 0, 0);
        if (seal) {
                FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED);
                FAIL_TEST_IF_FALSE(errno == EPERM);
        }
 
        /* move from ptr to fixed address. */
-       ret2 = mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_FIXED, newPtr);
+       ret2 = sys_mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_FIXED, newPtr);
        if (seal) {
                FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED);
                FAIL_TEST_IF_FALSE(errno == EPERM);
        }
 
        /* mremap to move and shrink to fixed address */
-       ret2 = mremap(ptr, size, 2 * page_size, MREMAP_MAYMOVE | MREMAP_FIXED,
+       ret2 = sys_mremap(ptr, size, 2 * page_size, MREMAP_MAYMOVE | MREMAP_FIXED,
                        newAddr);
        if (seal) {
                FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED);
        }
 
        /* mremap to move and expand to fixed address */
-       ret2 = mremap(ptr, page_size, size, MREMAP_MAYMOVE | MREMAP_FIXED,
+       ret2 = sys_mremap(ptr, page_size, size, MREMAP_MAYMOVE | MREMAP_FIXED,
                        newAddr);
        if (seal) {
                FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED);
        }
 
        /* mremap to move to fixed address */
-       ret2 = mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_FIXED, newAddr);
+       ret2 = sys_mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_FIXED, newAddr);
        if (seal) {
                FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED);
                FAIL_TEST_IF_FALSE(errno == EPERM);
        /*
         * MREMAP_FIXED can move the mapping to zero address
         */
-       ret2 = mremap(ptr, size, 2 * page_size, MREMAP_MAYMOVE | MREMAP_FIXED,
+       ret2 = sys_mremap(ptr, size, 2 * page_size, MREMAP_MAYMOVE | MREMAP_FIXED,
                        0);
        if (seal) {
                FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED);
                FAIL_TEST_IF_FALSE(errno == EPERM);
        } else {
                FAIL_TEST_IF_FALSE(ret2 == 0);
-
        }
 
        REPORT_TEST_PASS();
        }
 
        /* mremap to move, and don't unmap src addr. */
-       ret2 = mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_DONTUNMAP, 0);
+       ret2 = sys_mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_DONTUNMAP, 0);
        if (seal) {
                FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED);
                FAIL_TEST_IF_FALSE(errno == EPERM);
        } else {
+               /* kernel will allocate a new address */
                FAIL_TEST_IF_FALSE(ret2 != MAP_FAILED);
-
        }
 
        REPORT_TEST_PASS();
 
 static void test_seal_mremap_move_dontunmap_anyaddr(bool seal)
 {
-       void *ptr;
+       void *ptr, *ptr2;
        unsigned long page_size = getpagesize();
        unsigned long size = 4 * page_size;
        int ret;
        }
 
        /*
-        * The 0xdeaddead should not have effect on dest addr
-        * when MREMAP_DONTUNMAP is set.
+        * The new address is any address that not allocated.
+        * use allocate/free to similate that.
         */
-       ret2 = mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_DONTUNMAP,
-                       0xdeaddead);
+       setup_single_address(size, &ptr2);
+       FAIL_TEST_IF_FALSE(ptr2 != (void *)-1);
+       ret = sys_munmap(ptr2, size);
+       FAIL_TEST_IF_FALSE(!ret);
+
+       /*
+        * remap to any address.
+        */
+       ret2 = sys_mremap(ptr, size, size, MREMAP_MAYMOVE | MREMAP_DONTUNMAP,
+                       (void *) ptr2);
        if (seal) {
                FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED);
                FAIL_TEST_IF_FALSE(errno == EPERM);
        } else {
-               FAIL_TEST_IF_FALSE(ret2 != MAP_FAILED);
-               FAIL_TEST_IF_FALSE((long)ret2 != 0xdeaddead);
-
+               /* remap success and return ptr2 */
+               FAIL_TEST_IF_FALSE(ret2 ==  ptr2);
        }
 
        REPORT_TEST_PASS();
 }
 
-
 static void test_seal_merge_and_split(void)
 {
        void *ptr;