Andrew Morton <a...@linux-foundation.org> wrote:
>On Tue, 14 Jul 2020 11:07:44 +0800 linmiaohe <linmia...@huawei.com> wrote:
>
>> From: Miaohe Lin <linmia...@huawei.com>
>> 
>> The vm_flags may be changed after call_mmap() because drivers may set 
>> some flags for their own purpose. As a result, we failed to merge the 
>> adjacent vma due to the different vm_flags as userspace can't pass in the 
>> same one.
>> Try to merge vma after call_mmap() to fix this issue.
>> 
>> Signed-off-by: Hongxiang Lou <louhongxi...@huawei.com>
>> Signed-off-by: Miaohe Lin <linmia...@huawei.com>
>> ---
>> +            /* If vm_flags changed after call_mmap(), we should try merge 
>> vma again
>> +             * as we may succeed this time.
>> +             */
>> +            if (unlikely(vm_flags != vma->vm_flags && prev)) {
>> +                    merge = vma_merge(mm, prev, vma->vm_start, vma->vm_end, 
>> vma->vm_flags,
>> +                            NULL, vma->vm_file, vma->vm_pgoff, NULL, 
>> NULL_VM_UFFD_CTX);
>> +                    if (merge) {
>> +                            fput(file);
>> +                            vm_area_free(vma);
>> +                            vma = merge;
>> +                            goto unmap_writable;
>
>Shouldn't we update local variable `vm_flags' here, to pick up the change?  
>And possibly `addr'?

Yes, we should. `vm_flags` and `addr` should be updated to continue the work. 
Many thanks for your
great review. I will fix it and test again. I will send a patch v2 soon.

Reply via email to