summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpho <pho@FreeBSD.org>2014-05-07 08:38:02 +0000
committerpho <pho@FreeBSD.org>2014-05-07 08:38:02 +0000
commit1108602cbce052cb33a5eae9ba64815e5e7897f9 (patch)
treea5359d97e2aa4026b5be0df2a0ec46bf62f6c728
parent8c9ec09dd99aa9c9a28676dfa2c4808ac6bad654 (diff)
downloadFreeBSD-src-1108602cbce052cb33a5eae9ba64815e5e7897f9.zip
FreeBSD-src-1108602cbce052cb33a5eae9ba64815e5e7897f9.tar.gz
msync(2) must return ENOMEM and not EINVAL when the address is outside the
allowed range or when one or more pages are not mapped. This according to The Open Group Base Specifications Issue 7. Discussed with: attilio, Bruce Evans Reviewed by: alc, Garrett Cooper Reported by: ATF MFC after: 2 weeks Sponsored by: EMC / Isilon storage division
-rw-r--r--lib/libc/sys/msync.212
-rw-r--r--sys/vm/vm_mmap.c2
2 files changed, 8 insertions, 6 deletions
diff --git a/lib/libc/sys/msync.2 b/lib/libc/sys/msync.2
index 42d8005..a91faf2 100644
--- a/lib/libc/sys/msync.2
+++ b/lib/libc/sys/msync.2
@@ -87,11 +87,13 @@ The
.Fa addr
argument
is not a multiple of the hardware page size.
-.It Bq Er EINVAL
-The
+.It Bq Er ENOMEM
+The addresses in the range starting at
+.Fa addr
+and continuing for
.Fa len
-argument
-is too large or negative.
+bytes are outside the range allowed for the address space of a
+process or specify one or more pages that are not mapped.
.It Bq Er EINVAL
The
.Fa flags
@@ -99,7 +101,7 @@ argument
was both MS_ASYNC and MS_INVALIDATE.
Only one of these flags is allowed.
.It Bq Er EIO
- An error occurred while writing at least one of the pages in
+An error occurred while writing at least one of the pages in
the specified region.
.El
.Sh SEE ALSO
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c
index 6a9f29b..60aa621 100644
--- a/sys/vm/vm_mmap.c
+++ b/sys/vm/vm_mmap.c
@@ -556,7 +556,7 @@ sys_msync(td, uap)
case KERN_SUCCESS:
return (0);
case KERN_INVALID_ADDRESS:
- return (EINVAL); /* Sun returns ENOMEM? */
+ return (ENOMEM);
case KERN_INVALID_ARGUMENT:
return (EBUSY);
case KERN_FAILURE:
OpenPOWER on IntegriCloud