2015-05-18 21:27:32

by Joerg Roedel

[permalink] [raw]
Subject: [PATCH] ia64: Return -ENOMEM in ia64_mmap_check() error case

From: Joerg Roedel <[email protected]>

The value -ENOMEM is the expected return code for mmap when
the address range verification failes on a MAP_FIXED
request, as stated in the specification:

[ENOMEM]
MAP_FIXED was specified, and the range
[addr,addr+len) exceeds that allowed for the
address space of a process;

The ia64_mmap_check() function is part of that verification
and should return -ENOMEM too.

Signed-off-by: Joerg Roedel <[email protected]>
---
arch/ia64/kernel/sys_ia64.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/ia64/kernel/sys_ia64.c b/arch/ia64/kernel/sys_ia64.c
index 41e33f8..e927023 100644
--- a/arch/ia64/kernel/sys_ia64.c
+++ b/arch/ia64/kernel/sys_ia64.c
@@ -124,7 +124,7 @@ int ia64_mmap_check(unsigned long addr, unsigned long len,
*/
roff = REGION_OFFSET(addr);
if ((len > RGN_MAP_LIMIT) || (roff > (RGN_MAP_LIMIT - len)))
- return -EINVAL;
+ return -ENOMEM;
return 0;
}

--
1.8.4.5


2015-06-02 09:09:35

by Jörg Rödel

[permalink] [raw]
Subject: Re: [PATCH] ia64: Return -ENOMEM in ia64_mmap_check() error case

Ping. Tony, Fenghua, any opinion on this?

On Mon, May 18, 2015 at 11:27:19PM +0200, Joerg Roedel wrote:
> From: Joerg Roedel <[email protected]>
>
> The value -ENOMEM is the expected return code for mmap when
> the address range verification failes on a MAP_FIXED
> request, as stated in the specification:
>
> [ENOMEM]
> MAP_FIXED was specified, and the range
> [addr,addr+len) exceeds that allowed for the
> address space of a process;
>
> The ia64_mmap_check() function is part of that verification
> and should return -ENOMEM too.
>
> Signed-off-by: Joerg Roedel <[email protected]>
> ---
> arch/ia64/kernel/sys_ia64.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/ia64/kernel/sys_ia64.c b/arch/ia64/kernel/sys_ia64.c
> index 41e33f8..e927023 100644
> --- a/arch/ia64/kernel/sys_ia64.c
> +++ b/arch/ia64/kernel/sys_ia64.c
> @@ -124,7 +124,7 @@ int ia64_mmap_check(unsigned long addr, unsigned long len,
> */
> roff = REGION_OFFSET(addr);
> if ((len > RGN_MAP_LIMIT) || (roff > (RGN_MAP_LIMIT - len)))
> - return -EINVAL;
> + return -ENOMEM;
> return 0;
> }
>
> --
> 1.8.4.5