[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] linux-user/mmap: Avoid asserts for out of range mremap calls
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH] linux-user/mmap: Avoid asserts for out of range mremap calls |
Date: |
Fri, 22 Jan 2021 11:28:22 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 |
On 1/22/21 10:37 AM, Richard Purdie wrote:
> On Fri, 2021-01-08 at 17:42 +0000, Richard Purdie wrote:
>> If mremap() is called without the MREMAP_MAYMOVE flag with a start address
>> just before the end of memory (reserved_va) where new_size would exceed
>> it (and GUEST_ADDR_MAX), the assert(end - 1 <= GUEST_ADDR_MAX) in
>> page_set_flags() would trigger.
>>
>> Add an extra guard to the guest_range_valid() checks to prevent this and
>> avoid asserting binaries when reserved_va is set.
>>
>> This meant a bug I was seeing locally now gives the same behaviour
>> regardless of whether reserved_va is set or not.
>>
>> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org
>>
>> Index: qemu-5.2.0/linux-user/mmap.c
>> ===================================================================
>> --- qemu-5.2.0.orig/linux-user/mmap.c
>> +++ qemu-5.2.0/linux-user/mmap.c
>> @@ -727,7 +727,9 @@ abi_long target_mremap(abi_ulong old_add
>>
>>
>> if (!guest_range_valid(old_addr, old_size) ||
>> ((flags & MREMAP_FIXED) &&
>> - !guest_range_valid(new_addr, new_size))) {
>> + !guest_range_valid(new_addr, new_size)) ||
>> + ((flags & MREMAP_MAYMOVE) == 0 &&
>> + !guest_range_valid(old_addr, new_size))) {
>> errno = ENOMEM;
>> return -1;
>> }
>>
>>
>
> Any comments on this? I believe its a valid issue that needs fixing and
> multiple distros appear to be carrying fixes in this area related to
> this.
You forgot to Cc the maintainer who likely missed it due to the huge
traffic:
$ ./scripts/get_maintainer.pl -f linux-user/mmap.c
Laurent Vivier <laurent@vivier.eu> (maintainer:Linux user)
Now Cc'ed.
Regards,
Phil.