All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: mjt@tls.msk.ru, laurent@vivier.eu, qemu-devel@nongnu.org
Subject: Re: [PATCH 09/24] linux-user: Implement MAP_FIXED_NOREPLACE
Date: Mon, 03 Jul 2023 10:51:51 +0100	[thread overview]
Message-ID: <87y1jxiajm.fsf@linaro.org> (raw)
In-Reply-To: <20230630132159.376995-10-richard.henderson@linaro.org>


Richard Henderson <richard.henderson@linaro.org> writes:

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  linux-user/mmap.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/linux-user/mmap.c b/linux-user/mmap.c
> index cb5369d2d1..41c2f09fd5 100644
> --- a/linux-user/mmap.c
> +++ b/linux-user/mmap.c
> @@ -502,7 +502,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int target_prot,
>       * If the user is asking for the kernel to find a location, do that
>       * before we truncate the length for mapping files below.
>       */
> -    if (!(flags & MAP_FIXED)) {
> +    if (!(flags & (MAP_FIXED | MAP_FIXED_NOREPLACE))) {
>          host_len = len + offset - host_offset;
>          host_len = HOST_PAGE_ALIGN(host_len);
>          start = mmap_find_vma(real_start, host_len, TARGET_PAGE_SIZE);
> @@ -544,7 +544,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int target_prot,
>          }
>      }
>  
> -    if (!(flags & MAP_FIXED)) {
> +    if (!(flags & (MAP_FIXED | MAP_FIXED_NOREPLACE))) {
>          unsigned long host_start;
>          void *p;
>  
> @@ -593,6 +593,13 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int target_prot,
>              goto fail;
>          }
>  
> +        /* Validate that the chosen range is empty. */
> +        if ((flags & MAP_FIXED_NOREPLACE)
> +            && !page_check_range_empty(start, end - 1)) {
> +            errno = EEXIST;
> +            goto fail;
> +        }
> +
>          /*
>           * worst case: we cannot map the file because the offset is not
>           * aligned, so we read it
> @@ -608,7 +615,8 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int target_prot,
>                  goto fail;
>              }
>              retaddr = target_mmap(start, len, target_prot | PROT_WRITE,
> -                                  MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
> +                                  (flags & (MAP_FIXED | MAP_FIXED_NOREPLACE))
> +                                  | MAP_PRIVATE | MAP_ANONYMOUS,

I thought we always MAP_FIXED because we've already jumped the hoops to
work out where in the memory space this allocation is going. Now if the
guest doesn't specify MAP_FIXED the kernel might decide to put the
memory somewhere else, potentially out of reach of the guest addressing?

IOW I thought the MAP_FIXED here was an internal QEMU implementation
details rather than reflecting the guests wishes.

>                                    -1, 0);
>              if (retaddr == -1) {
>                  goto fail;


-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


  reply	other threads:[~2023-07-03  9:56 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-30 13:21 [PATCH for-8.1? 00/24] linux-user: mmap range fixes Richard Henderson
2023-06-30 13:21 ` [PATCH 01/24] linux-user: Use assert in mmap_fork_start Richard Henderson
2023-07-03  8:47   ` Alex Bennée
2023-07-03 15:56   ` Philippe Mathieu-Daudé
2023-06-30 13:21 ` [PATCH 02/24] linux-user: Fix formatting of mmap.c Richard Henderson
2023-07-03  8:48   ` Alex Bennée
2023-07-03 15:55   ` Philippe Mathieu-Daudé
2023-06-30 13:21 ` [PATCH 03/24] linux-user/strace: Expand struct flags to hold a mask Richard Henderson
2023-07-03  9:24   ` Alex Bennée
2023-06-30 13:21 ` [PATCH 04/24] linux-user: Split TARGET_MAP_* out of syscall_defs.h Richard Henderson
2023-07-03  9:25   ` Alex Bennée
2023-06-30 13:21 ` [PATCH 05/24] linux-user: Split TARGET_PROT_* " Richard Henderson
2023-07-03  9:32   ` Alex Bennée
2023-07-03 16:02   ` Philippe Mathieu-Daudé
2023-06-30 13:21 ` [PATCH 06/24] linux-user: Populate more bits in mmap_flags_tbl Richard Henderson
2023-07-03  9:42   ` Alex Bennée
2023-06-30 13:21 ` [PATCH 07/24] accel/tcg: Introduce page_check_range_empty Richard Henderson
2023-07-03  9:45   ` Alex Bennée
2023-07-03 10:33     ` Richard Henderson
2023-07-03 11:36       ` Alex Bennée
2023-06-30 13:21 ` [PATCH 08/24] bsd-user: Use page_check_range_empty for MAP_EXCL Richard Henderson
2023-06-30 18:46   ` Warner Losh
2023-06-30 19:40     ` Richard Henderson
2023-06-30 13:21 ` [PATCH 09/24] linux-user: Implement MAP_FIXED_NOREPLACE Richard Henderson
2023-07-03  9:51   ` Alex Bennée [this message]
2023-07-03 10:39     ` Richard Henderson
2023-06-30 13:21 ` [PATCH 10/24] linux-user: Split out target_to_host_prot Richard Henderson
2023-07-03 10:12   ` Alex Bennée
2023-06-30 13:21 ` [PATCH 11/24] linux-user: Widen target_mmap offset argument to off_t Richard Henderson
2023-07-03 10:47   ` Alex Bennée
2023-06-30 13:21 ` [PATCH 12/24] linux-user: Rewrite target_mprotect Richard Henderson
2023-06-30 13:21 ` [PATCH 13/24] linux-user: Rewrite mmap_frag Richard Henderson
2023-06-30 13:21 ` [PATCH 14/24] accel/tcg: Introduce page_find_range_empty Richard Henderson
2023-06-30 13:21 ` [PATCH 15/24] bsd-user: Use page_find_range_empty for mmap_find_vma_reserved Richard Henderson
2023-06-30 13:21 ` [PATCH 16/24] linux-user: " Richard Henderson
2023-06-30 13:21 ` [PATCH 17/24] linux-user: Use 'last' instead of 'end' in target_mmap Richard Henderson
2023-06-30 13:21 ` [PATCH 18/24] linux-user: Rewrite mmap_reserve Richard Henderson
2023-06-30 13:21 ` [PATCH 19/24] linux-user: Rename mmap_reserve to mmap_reserve_or_unmap Richard Henderson
2023-06-30 13:21 ` [PATCH 20/24] linux-user: Simplify target_munmap Richard Henderson
2023-06-30 13:21 ` [PATCH 21/24] accel/tcg: Accept more page flags in page_check_range Richard Henderson
2023-06-30 13:21 ` [PATCH 22/24] accel/tcg: Return bool from page_check_range Richard Henderson
2023-06-30 13:21 ` [PATCH 23/24] linux-user: Remove can_passthrough_madvise Richard Henderson
2023-06-30 13:21 ` [PATCH 24/24] linux-user: Simplify target_madvise Richard Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y1jxiajm.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=laurent@vivier.eu \
    --cc=mjt@tls.msk.ru \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.