|
@@ -0,0 +1,68 @@
|
|
|
+From 85c972f730e8efe891a06ea3a2dfb5cbbdfbfbf4 Mon Sep 17 00:00:00 2001
|
|
|
+From: "Hongzhi.Song" <hongzhi.song@windriver.com>
|
|
|
+Date: Wed, 10 Oct 2018 22:07:05 -0400
|
|
|
+Subject: [PATCH] open_posix_testsuite/mmap24-2: Relax condition a bit
|
|
|
+
|
|
|
+Mips will return EINVAL instead of ENOMEM as expected
|
|
|
+if the range [addr + len) exceeds TASK_SIZE.
|
|
|
+
|
|
|
+Linux kernel code: arch/mips/mm/mmap.c
|
|
|
+if (flags & MAP_FIXED) {
|
|
|
+ /* Even MAP_FIXED mappings must reside within TASK_SIZE */
|
|
|
+ if (TASK_SIZE - len < addr)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+Relax the condition and accept both ENOMEM and EINVAL
|
|
|
+as expected outcome.
|
|
|
+
|
|
|
+Upstream-Status: Submitted [https://lists.linux.it/pipermail/ltp/2018-October/009624.html]
|
|
|
+
|
|
|
+Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com>
|
|
|
+---
|
|
|
+ .../open_posix_testsuite/conformance/interfaces/mmap/24-2.c | 10 +++++-----
|
|
|
+ 1 file changed, 5 insertions(+), 5 deletions(-)
|
|
|
+
|
|
|
+diff --git a/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-2.c b/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-2.c
|
|
|
+index de51d43..810e5c8 100644
|
|
|
+--- a/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-2.c
|
|
|
++++ b/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-2.c
|
|
|
+@@ -7,7 +7,7 @@
|
|
|
+ * source tree.
|
|
|
+ *
|
|
|
+ * The mmap() function shall fail if:
|
|
|
+- * [ENOMEM] MAP_FIXED was specified,
|
|
|
++ * [ENOMEM or EINVAL] MAP_FIXED was specified,
|
|
|
+ * and the range [addr,addr+len) exceeds that allowed
|
|
|
+ * for the address space of a process; or, if MAP_FIXED was not specified and
|
|
|
+ * there is insufficient room in the address space to effect the mapping.
|
|
|
+@@ -15,7 +15,7 @@
|
|
|
+ * Test Step:
|
|
|
+ * 1. Map a shared memory object, with size exceeding the value get from
|
|
|
+ * rlim_cur of resource RLIMIT_AS, setting MAP_FIXED;
|
|
|
+- * 3. Should get ENOMEM.
|
|
|
++ * 3. Should get ENOMEM or EINVAL.
|
|
|
+ */
|
|
|
+
|
|
|
+ #define _XOPEN_SOURCE 600
|
|
|
+@@ -93,8 +93,8 @@ int main(void)
|
|
|
+ (unsigned long)len);
|
|
|
+ pa = mmap(addr, len, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED, fd,
|
|
|
+ 0);
|
|
|
+- if (pa == MAP_FAILED && errno == ENOMEM) {
|
|
|
+- printf("Got ENOMEM: %s\nTest PASSED\n", strerror(errno));
|
|
|
++ if (pa == MAP_FAILED && (errno == ENOMEM || errno == EINVAL)) {
|
|
|
++ printf("Got ENOMEM or EINVAL: %s\nTest PASSED\n", strerror(errno));
|
|
|
+ exit(PTS_PASS);
|
|
|
+ }
|
|
|
+
|
|
|
+@@ -103,6 +103,6 @@ int main(void)
|
|
|
+ else
|
|
|
+ munmap(pa, len);
|
|
|
+ close(fd);
|
|
|
+- printf("Test Fail: Did not get ENOMEM as expected\n");
|
|
|
++ printf("Test Failed: Did not get ENOMEM or EINVAL as expected\n");
|
|
|
+ return PTS_FAIL;
|
|
|
+ }
|
|
|
+--
|
|
|
+2.8.1
|
|
|
+
|