On Fri, Oct 8, 2021 at 4:27 PM Warner Losh <i...@bsdimp.com> 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 <i...@bsdimp.com>
> Reviewed-by: Richard Henderson <richard.hender...@linaro.org>
> Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org>
> ---
>  bsd-user/mmap.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/bsd-user/mmap.c b/bsd-user/mmap.c
> index 6f33aec58b..f0be3b12cf 100644
> --- a/bsd-user/mmap.c
> +++ b/bsd-user/mmap.c
> @@ -455,11 +455,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;
>
> --
> 2.32.0
>
>

Reviewed-by: Kyle Evans <kev...@freebsd.org>

Reply via email to