From: Jeff M. <je...@su...> - 2007-10-31 02:27:42
|
mmap test 23-1 is testing for one condition while violating another constraint. pipe() returns two fds, one with read-only permissions and one with write-only permissions. mmap() requires that there be at least read permissions. The 23-1 test is trying to open the write-only end of the pipe with PROT_READ|PROT_WRITE, which fails because read permissions are not granted on the file descriptor. AFAIK SuS doesn't specify an error code precedence that would force -ENODEV to be returned. Previously this test succeeded due only to the ordering of the tests in the Linux kernel. Changes introduced in git commit 80c5606c3b45e0176c32d3108ade1e1cb0b954f3 re-ordered the tests, which caused the test for FMODE_READ to be above those for f_op->mmap(), causing the mmap() call to return -EACCES instead of -ENODEV. This patch changes the test to use the read-only end of the pipe with PROT_READ permissions, which passes the FMODE_READ check on the file descriptor and returns -ENODEV. Signed-off-by: Jeff Mahoney <je...@su...> --- testcases/open_posix_testsuite/conformance/interfaces/mmap/23-1.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --- a/testcases/open_posix_testsuite/conformance/interfaces/mmap/23-1.c 2007-10-30 21:30:55.000000000 -0400 +++ b/testcases/open_posix_testsuite/conformance/interfaces/mmap/23-1.c 2007-10-30 21:27:43.000000000 -0400 @@ -35,7 +35,7 @@ void *pa = NULL; void *addr = NULL; size_t len = 1024; - int prot = PROT_READ | PROT_WRITE; + int prot = PROT_READ; int flag = MAP_SHARED; int fd; off_t off = 0; @@ -47,7 +47,7 @@ exit(PTS_UNRESOLVED); } - fd = pipe_fd[1]; + fd = pipe_fd[0]; pa = mmap(addr, len, prot, flag, fd, off); if (pa == MAP_FAILED && errno == ENODEV) { @@ -59,7 +59,7 @@ else { printf ("Test Fail: " TNAME - " Expect ENODEF, get: %s\n", strerror(errno)); + " Expect ENODEV, get: %s\n", strerror(errno)); close(pipe_fd[0]); close(pipe_fd[1]); exit(PTS_FAIL); -- Jeff Mahoney SUSE Labs |