[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 for-6.0 2/2] tcg: Workaround macOS 11.2 mprotect bug
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH v3 for-6.0 2/2] tcg: Workaround macOS 11.2 mprotect bug |
Date: |
Mon, 22 Mar 2021 11:03:05 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 |
On 3/20/21 5:57 PM, Richard Henderson wrote:
> There's a change in mprotect() behaviour [1] in the latest macOS
> on M1 and it's not yet clear if it's going to be fixed by Apple.
>
> As a short-term fix, ignore failures setting up the guard pages.
>
> [1] https://gist.github.com/hikalium/75ae822466ee4da13cbbe486498a191f
>
> Buglink: https://bugs.launchpad.net/qemu/+bug/1914849
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> tcg/tcg.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/tcg/tcg.c b/tcg/tcg.c
> index 88c9e6f8a4..1fbe0b686d 100644
> --- a/tcg/tcg.c
> +++ b/tcg/tcg.c
> @@ -864,11 +864,15 @@ void tcg_region_init(void)
> */
> for (i = 0; i < region.n; i++) {
> void *start, *end;
> - int rc;
>
> tcg_region_bounds(i, &start, &end);
> - rc = qemu_mprotect_none(end, page_size);
What about:
#ifdef CONFIG_DARWIN
/* ... */
(void)rc;
#else
> - g_assert(!rc);
#endif
> +
> + /*
> + * macOS 11.2 has a bug (Apple Feedback FB8994773) in which mprotect
> + * rejects a permission change from RWX -> NONE. Guard pages are
> + * nice for bug detection but are not essential; ignore any failure.
> + */
> + (void)qemu_mprotect_none(end, page_size);
> }
>
> tcg_region_trees_init();
>