Module Name: src
Committed By: martin
Date: Fri Sep 7 20:27:12 UTC 2012
Modified Files:
src/tests/lib/libc/sys: t_mlock.c
Log Message:
Deal with architectures defining VM_MIN_ADDRESS > 0.
Add additional error code tests using a pointer one page past current brk.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/tests/lib/libc/sys/t_mlock.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tests/lib/libc/sys/t_mlock.c
diff -u src/tests/lib/libc/sys/t_mlock.c:1.2 src/tests/lib/libc/sys/t_mlock.c:1.3
--- src/tests/lib/libc/sys/t_mlock.c:1.2 Sat Apr 21 01:15:13 2012
+++ src/tests/lib/libc/sys/t_mlock.c Fri Sep 7 20:27:12 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mlock.c,v 1.2 2012/04/21 01:15:13 jruoho Exp $ */
+/* $NetBSD: t_mlock.c,v 1.3 2012/09/07 20:27:12 martin Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,14 +29,17 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mlock.c,v 1.2 2012/04/21 01:15:13 jruoho Exp $");
+__RCSID("$NetBSD: t_mlock.c,v 1.3 2012/09/07 20:27:12 martin Exp $");
#include <sys/mman.h>
#include <sys/resource.h>
#include <sys/wait.h>
+#define _KMEMUSER
+#include <machine/vmparam.h>
#include <errno.h>
#include <atf-c.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -77,24 +80,42 @@ ATF_TC_HEAD(mlock_err, tc)
ATF_TC_BODY(mlock_err, tc)
{
+ void *invalid_ptr;
+ int null_errno = ENOMEM; /* error expected for NULL */
+
+ if ((uintptr_t)VM_MIN_ADDRESS > 0)
+ null_errno = EINVAL; /* NULL is not inside user VM */
errno = 0;
- ATF_REQUIRE_ERRNO(ENOMEM, mlock(NULL, page) == -1);
+ ATF_REQUIRE_ERRNO(null_errno, mlock(NULL, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(ENOMEM, mlock((char *)0, page) == -1);
+ ATF_REQUIRE_ERRNO(null_errno, mlock((char *)0, page) == -1);
errno = 0;
ATF_REQUIRE_ERRNO(EINVAL, mlock((char *)-1, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(ENOMEM, munlock(NULL, page) == -1);
+ ATF_REQUIRE_ERRNO(null_errno, munlock(NULL, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(ENOMEM, munlock((char *)0, page) == -1);
+ ATF_REQUIRE_ERRNO(null_errno, munlock((char *)0, page) == -1);
errno = 0;
ATF_REQUIRE_ERRNO(EINVAL, munlock((char *)-1, page) == -1);
+
+ /*
+ * Try to create a pointer to an unmapped page - first after current
+ * brk will likely do.
+ */
+ invalid_ptr = (void*)(((uintptr_t)sbrk(0)+page) & ~(page-1));
+ printf("testing with (hopefully) invalid pointer %p\n", invalid_ptr);
+
+ errno = 0;
+ ATF_REQUIRE_ERRNO(ENOMEM, mlock(invalid_ptr, page) == -1);
+
+ errno = 0;
+ ATF_REQUIRE_ERRNO(ENOMEM, munlock(invalid_ptr, page) == -1);
}
ATF_TC(mlock_limits);