Message ID | 20210922045636.25206-5-imp@bsdimp.com |
---|---|
State | New |
Headers | show |
Series | bsd-user mmap fixes | expand |
On 9/21/21 9:56 PM, Warner Losh wrote: > mmap should return ENOMEM on len overflow rather than EINVAL. Return > EINVAL when len == 0 and ENOMEM when the rounded to a page length is 0. > Found by make check-tcg. > > Signed-off-by: Warner Losh<imp@bsdimp.com> > --- > bsd-user/mmap.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
On 9/22/21 06:56, Warner Losh wrote: > mmap should return ENOMEM on len overflow rather than EINVAL. Return > EINVAL when len == 0 and ENOMEM when the rounded to a page length is 0. > Found by make check-tcg. > > Signed-off-by: Warner Losh <imp@bsdimp.com> > --- > bsd-user/mmap.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
diff --git a/bsd-user/mmap.c b/bsd-user/mmap.c index c40059d7fc..0acc2db712 100644 --- a/bsd-user/mmap.c +++ b/bsd-user/mmap.c @@ -454,11 +454,18 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, goto fail; } - len = TARGET_PAGE_ALIGN(len); if (len == 0) { errno = EINVAL; goto fail; } + + /* Check for overflows */ + len = TARGET_PAGE_ALIGN(len); + if (len == 0) { + errno = ENOMEM; + goto fail; + } + real_start = start & qemu_host_page_mask; host_offset = offset & qemu_host_page_mask;
mmap should return ENOMEM on len overflow rather than EINVAL. Return EINVAL when len == 0 and ENOMEM when the rounded to a page length is 0. Found by make check-tcg. Signed-off-by: Warner Losh <imp@bsdimp.com> --- bsd-user/mmap.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)