2002-02-12 04:10:54

by Christopher Yeoh

[permalink] [raw]
Subject: [PATCH] mmap can return incorrect errno


mmap currently sets errno to EINVAL when it should be ENOMEM.
SUS/POSIX states that ENOMEM should be returned when:

"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."

The following patch (against 2.4.17) fixes this behaviour:

--- mm/mmap.c~ Tue Nov 6 11:12:25 2001
+++ mm/mmap.c Mon Feb 11 15:49:58 2002
@@ -620,7 +620,7 @@
{
if (flags & MAP_FIXED) {
if (addr > TASK_SIZE - len)
- return -EINVAL;
+ return -ENOMEM;
if (addr & ~PAGE_MASK)
return -EINVAL;
return addr;

Chris
--
[email protected]
IBM OzLabs Linux Development Group
Canberra, Australia