From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76C27370D57; Wed, 23 Sep 2026 17:01:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790182875; cv=none; b=sDaXkNYMlhOpip8bKYz/7tRZDxBtsN/fdANuJhv7zBULIvywqmovCiDYkx8auvXO01ywQqBCiDLPqSPzi2FzRo9hHRGYRgZH5i7F9cJSHHDCxnmf02BNR1rm/vNXK/0Ji0HU9apfxXABVPAc/er40rVQWcM/zFi0eWqKRrZXDRs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790182875; c=relaxed/simple; bh=bKVapP0UqAcNDSXUwrjEiFbQ6T/H5UNYOsSn2NX0zaw=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=iwJAD24wNJYy3Ujoj29gMtlIR9nSe5SOxp2ZpbytpDuBDH/DVjDvrJBZO1PG7YbZrN/wzs2kOu1OYq/AEGI5o0waRYCrhalNDOUIl73Dw0XX7eFpG3IQHMBTKp0M2m/YJixR755DYNyk/v2pSsFDVeafsYxBydA72hBIyEotWYY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZcQp1PRn; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZcQp1PRn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 561491F000FF; Wed, 23 Sep 2026 17:00:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1790182872; bh=IJaDFCurzscncuVAFa6+vn22cawBT99G95jk4ztKBZA=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=ZcQp1PRnB0QUSVQpuckyN6NnlN+6MRRjA34s3hMaCu8POd1KGSSc4nMgFHRy/IHqA sCDiNxAphIqnCATmrKjeMRENal9GdJ2FHLLfzcPAvtBm4HQgDI17YB3YuuU9mmpey8 M40JgzYg2AeW6EmFVSPS3WJjbwL+R67KY/9UZgXjOugo+2fSheSMvvUrWSx7A6M9mR 6+iMWSwNyDGjyL6vwrzt+dUQVxRsaK8B7fh+pUqbFmYGQUDsh1+AuIGD6iO43coutn vK0C7KFxaOB2Put8d5jI/j+DturfIgk3i+kflpxHx5ltcdoSP5VGVCG112PoZDHOPD a2ikeQJL/niYA== Date: Wed, 23 Sep 2026 18:00:41 +0100 From: "Lorenzo Stoakes (ARM)" To: Suren Baghdasaryan Cc: Andrew Morton , "Liam R. Howlett" , Vlastimil Babka , Jann Horn , Pedro Falcato , David Hildenbrand , Mike Rapoport , Michal Hocko , Jonathan Corbet , Greg Kroah-Hartman , Dennis Dalessandro , Jason Gunthorpe , Leon Romanovsky , Paul Moore , Stephen Smalley , Jaroslav Kysela , Takashi Iwai , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Eduard Zingerman , Kumar Kartikeya Dwivedi , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Usama Arif , Kiryl Shutsemau , Doug Gilbert , "James E.J. Bottomley" , "Martin K. Petersen" , Jaya Kumar , Simona Vetter , Helge Deller , Sebastian Reichel , John Hubbard , Peter Xu , Masami Hiramatsu , Oleg Nesterov , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Rik van Riel , Harry Yoo , Juri Lelli , Vincent Guittot , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Will Deacon , "Aneesh Kumar K.V" , Nick Piggin , Arnd Bergmann , Muchun Song , Oscar Salvador , "Matthew Wilcox (Oracle)" , Jan Kara , Marc Zyngier , Oliver Upton , Catalin Marinas , Madhavan Srinivasan , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , "David S. Miller" , Andreas Larsson , Alexander Viro , Christian Brauner , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Youngjun Park , Johannes Weiner , Qi Zheng , Shakeel Butt , Axel Rasmussen , Yuanchu Xie , Wei Xu , Chengming Zhou , Michal Hocko , Miklos Szeredi , Xu Xin , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-usb@vger.kernel.org, linux-rdma@vger.kernel.org, selinux@vger.kernel.org, linux-sound@vger.kernel.org, bpf@vger.kernel.org, linux-scsi@vger.kernel.org, linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-trace-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arch@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, fuse-devel@lists.linux.dev Subject: Re: [PATCH v3 04/40] mm: consistently validate VMA state after mmap[_prepare] hooks Message-ID: References: <20260917-b4-mmap-prepare-vma-flag-sanify-v3-0-4583d8a23bca@kernel.org> <20260917-b4-mmap-prepare-vma-flag-sanify-v3-4-4583d8a23bca@kernel.org> Precedence: bulk X-Mailing-List: fuse-devel@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Wed, Sep 23, 2026 at 09:47:20AM -0700, Suren Baghdasaryan wrote: > On Thu, Sep 17, 2026 at 9:25 AM Lorenzo Stoakes (ARM) wrote: > > > > When the f_op->mmap_prepare or deprecated f_op->mmap hooks are invoked, the > > driver might have done something crazy that is not permitted by the kernel. > > > > Currently we check for three such cases in __mmap_new_file_vma(), but only > > if the legacy f_op->mmap hook is used: > > > > * Did sparc ADI result in invalid flags? > > > > * Did the driver alter vma->vm_start? > > > > * Did the driver make a file-backed mapping on a read-only file writable? > > > > Generalise these checks for both mmap_prepare and mmap and apply to all > > invocations of mmap_file(), the f_op->mmap and f_op->mmap_prepare handling > > in the core VMA code and the mmap_prepare compatibility layer. > > > > Also extend the vm_start check to vm_end also - drivers must not change the > > VMA range at all. > > > > We also WARN_ON_ONCE() on these conditions as they are things that should > > simply not occur in the kernel and it's important to call it out when it > > does. > > > > We invoke mmap_prepare_validate() after mmap_action_prepare(), as mmap > > actions often manipulate state in the descriptor thus providing the final > > state the VMA will be derived from. > > > > Also call mmap_validate_vma_flags() in insert_vm_struct() to ensure that > > special regions which are inserted (such as a VDSO or VVAR) also satisfy > > the sanity checks. > > > > This way every VMA established through an mmap hook, whether via mmap() or > > the compatibility layer, or inserted via insert_vm_struct(), has been > > validated. brk() VMAs never pass through a driver hook and so need no such > > check. > > > > While we're here, also fixup a couple disjoint blocks of #ifdef CONFIG_MMU. > > > > Finally, update the VMA userland tests to reflect the change. > > > > Signed-off-by: Lorenzo Stoakes (ARM) > > Reviewed-by: Suren Baghdasaryan Thanks! > > > --- > > mm/internal.h | 51 ++++++++++++-------- > > mm/util.c | 19 ++++++-- > > mm/vma.c | 100 ++++++++++++++++++++++++++++++++++------ > > mm/vma.h | 25 ++++++++-- > > tools/testing/vma/include/dup.h | 10 ++++ > > 5 files changed, 163 insertions(+), 42 deletions(-) > > > > diff --git a/mm/internal.h b/mm/internal.h > > index fe576d468af4..970fb34898b2 100644 > > --- a/mm/internal.h > > +++ b/mm/internal.h > > @@ -213,6 +213,24 @@ static inline void *folio_raw_mapping(const struct folio *folio) > > return (void *)(mapping & ~FOLIO_MAPPING_FLAGS); > > } > > > > +/* > > + * If the VMA has a close hook then close it, and since closing it might leave > > + * it in an inconsistent state which makes the use of any hooks suspect, clear > > + * them down by installing dummy empty hooks. > > + */ > > +static inline void vma_close(struct vm_area_struct *vma) > > +{ > > + if (vma->vm_ops && vma->vm_ops->close) { > > + vma->vm_ops->close(vma); > > + > > + /* > > + * The mapping is in an inconsistent state, and no further hooks > > + * may be invoked upon it. > > + */ > > + vma->vm_ops = &vma_dummy_vm_ops; > > + } > > +} > > + > > /* > > * This is a file-backed mapping, and is about to be memory mapped - invoke its > > * mmap hook and safely handle error conditions. On error, VMA hooks will be > > @@ -225,8 +243,12 @@ static inline void *folio_raw_mapping(const struct folio *folio) > > */ > > static inline int mmap_file(struct file *file, struct vm_area_struct *vma) > > { > > - int err = vfs_mmap(file, vma); > > + const unsigned long prev_start = vma->vm_start; > > + const unsigned long prev_end = vma->vm_end; > > + const vma_flags_t prev_flags = vma->flags; > > nit: Might be just me but when I see prev_XXX in VMA-related code I > picture previous VMA in the address space. Maybe call these orig_XXX? Sure, will change. > > > + int err; > > > > + err = vfs_mmap(file, vma); > > /* > > * Either we tried to call the file hook for mmap() and an error arose > > * or a driver set vma->vm_ops = NULL intending there to be no VMA > > @@ -239,26 +261,17 @@ static inline int mmap_file(struct file *file, struct vm_area_struct *vma) > > */ > > if (unlikely(err || !vma->vm_ops)) > > vma->vm_ops = &vma_dummy_vm_ops; > > + if (unlikely(err)) > > + return err; > > > > - return err; > > -} > > - > > -/* > > - * If the VMA has a close hook then close it, and since closing it might leave > > - * it in an inconsistent state which makes the use of any hooks suspect, clear > > - * them down by installing dummy empty hooks. > > - */ > > -static inline void vma_close(struct vm_area_struct *vma) > > -{ > > - if (vma->vm_ops && vma->vm_ops->close) { > > - vma->vm_ops->close(vma); > > - > > - /* > > - * The mapping is in an inconsistent state, and no further hooks > > - * may be invoked upon it. > > - */ > > - vma->vm_ops = &vma_dummy_vm_ops; > > + err = mmap_hook_validate(prev_start, prev_end, &prev_flags, vma); > > + if (unlikely(err)) { > > + vma->vm_start = prev_start; > > + vma->vm_end = prev_end; > > + vma_close(vma); > > } > > + > > + return err; > > } > > > > /* unmap_vmas is in mm/memory.c */ > > diff --git a/mm/util.c b/mm/util.c > > index 016932780925..bdd5923eebc7 100644 > > --- a/mm/util.c > > +++ b/mm/util.c > > @@ -1224,19 +1224,28 @@ EXPORT_SYMBOL(compat_set_desc_from_vma); > > int __compat_vma_mmap(struct vm_area_desc *desc, > > struct vm_area_struct *vma) > > { > > + struct vm_area_desc prev_desc; > > int err; > > > > + /* Derive state prior to mmap_prepare hook. */ > > + compat_set_desc_from_vma(&prev_desc, desc->file, vma); > > /* Perform any preparatory tasks for mmap action. */ > > err = mmap_action_prepare(desc); > > - if (err) { > > - if (desc->vm_file != vma->vm_file) > > - fput(desc->vm_file); > > - return err; > > - } > > + if (err) > > + goto err_put; > > + /* Check the caller did nothing crazy. */ > > + err = mmap_prepare_validate(&prev_desc, desc); > > + if (err) > > + goto err_put; > > /* Update the VMA from the descriptor. */ > > compat_set_vma_from_desc(vma, desc); > > /* Complete any specified mmap actions. */ > > return mmap_action_complete(vma, &desc->action, /*is_compat=*/true); > > + > > +err_put: > > + if (desc->vm_file != vma->vm_file) > > + fput(desc->vm_file); > > + return err; > > } > > EXPORT_SYMBOL(__compat_vma_mmap); > > > > diff --git a/mm/vma.c b/mm/vma.c > > index 05d2c676672e..d6ed10cefc8f 100644 > > --- a/mm/vma.c > > +++ b/mm/vma.c > > @@ -2623,16 +2623,6 @@ static int __mmap_new_file_vma(struct mmap_state *map, > > return error; > > } > > > > - /* Drivers cannot alter the address of the VMA. */ > > - WARN_ON_ONCE(map->addr != vma->vm_start); > > - /* > > - * Drivers should not permit writability when previously it was > > - * disallowed. > > - */ > > - VM_WARN_ON_ONCE(!vma_flags_same_pair(&map->vma_flags, &vma->flags) && > > - !vma_flags_test(&map->vma_flags, VMA_MAYWRITE_BIT) && > > - vma_test(vma, VMA_MAYWRITE_BIT)); > > - > > map->vma_flags = vma->flags; > > > > return 0; > > @@ -2710,11 +2700,6 @@ static int __mmap_new_vma(struct mmap_state *map, struct vm_area_struct **vmap, > > vma->flags = map->vma_flags; > > } > > > > -#ifdef CONFIG_SPARC64 > > - /* TODO: Fix SPARC ADI! */ > > - WARN_ON_ONCE(!arch_validate_flags(map->vm_flags)); > > -#endif > > - > > /* Lock the VMA since it is modified after insertion into VMA tree */ > > vma_start_write(vma); > > vma_iter_store_new(vmi, vma); > > @@ -2777,6 +2762,80 @@ static void __mmap_complete(struct mmap_state *map, struct vm_area_struct *vma) > > vma_set_page_prot(vma); > > } > > > > +/* Check to ensure that the VMA flags of a newly mapped VMA are sane. */ > > +static int mmap_validate_vma_flags(const vma_flags_t *flags) > > +{ > > +#ifdef CONFIG_SPARC64 > > + const vm_flags_t legacy_flags = vma_flags_to_legacy(*flags); > > + > > + /* TODO: Fix SPARC ADI! */ > > + if (WARN_ON_ONCE(!arch_validate_flags(legacy_flags))) > > + return -EINVAL; > > +#endif > > + > > + return 0; > > +} > > + > > +/* Check to ensure a driver hasn't done something crazy. */ > > +static int mmap_validate(unsigned long prev_start, unsigned long prev_end, > > + unsigned long curr_start, unsigned long curr_end, > > + const vma_flags_t *prev_flags, > > + const vma_flags_t *curr_flags) > > +{ > > + bool was_maywrite, is_maywrite; > > + > > + /* Drivers cannot alter the range of the VMA. */ > > + if (WARN_ON_ONCE(prev_start != curr_start || prev_end != curr_end)) > > + return -EINVAL; > > + > > + was_maywrite = vma_flags_test(prev_flags, VMA_MAYWRITE_BIT); > > + is_maywrite = vma_flags_test(curr_flags, VMA_MAYWRITE_BIT); > > + > > + /* A driver may not make a previously unwritable mapping writable. */ > > + if (WARN_ON_ONCE(!was_maywrite && is_maywrite)) > > + return -EINVAL; > > + > > + return mmap_validate_vma_flags(curr_flags); > > +} > > + > > +/** > > + * mmap_prepare_validate() - Ensure the driver hasn't violated invariants in its > > + * f_op->mmap_prepare hook. > > + * @prev_desc: The VMA descriptor prior to the mmap_prepare hook being called. > > + * @desc: The VMA descriptor after the mmap_prepare hook has been called. > > + * > > + * Returns: 0 on success, otherwise an error. > > + */ > > +int mmap_prepare_validate(const struct vm_area_desc *prev_desc, > > + const struct vm_area_desc *desc) > > +{ > > + return mmap_validate(prev_desc->start, prev_desc->end, > > + desc->start, desc->end, > > + &prev_desc->vma_flags, &desc->vma_flags); > > +} > > + > > +/** > > + * mmap_hook_validate() - Ensure the driver hasn't violated invariants in > > + * its f_op->mmap hook. > > + * @prev_start: The start of the mapping prior to the mmap hook. > > + * @prev_end: The end of the mapping prior to the mmap hook. > > + * @prev_flags: The VMA flags set for the VMA prior to the mmap hook. > > + * @vma: The VMA after the hook has been applied. > > + * > > + * Returns: 0 on success, otherwise an error. > > + */ > > +int mmap_hook_validate(unsigned long prev_start, unsigned long prev_end, > > + const vma_flags_t *prev_flags, > > + const struct vm_area_struct *vma) > > +{ > > + const unsigned long start = vma->vm_start; > > + const unsigned long end = vma->vm_end; > > + const vma_flags_t *flags = &vma->flags; > > + > > + return mmap_validate(prev_start, prev_end, start, end, prev_flags, > > + flags); > > +} > > + > > static int call_action_prepare(struct mmap_state *map, > > struct vm_area_desc *desc) > > { > > @@ -2803,6 +2862,7 @@ static int call_action_prepare(struct mmap_state *map, > > static int call_mmap_prepare(struct mmap_state *map, > > struct vm_area_desc *desc) > > { > > + const struct vm_area_desc prev_desc = *desc; > > int err; > > > > /* Invoke the hook. */ > > @@ -2822,6 +2882,11 @@ static int call_mmap_prepare(struct mmap_state *map, > > if (err) > > return err; > > > > + /* Check the caller did nothing crazy. */ > > + err = mmap_prepare_validate(&prev_desc, desc); > > + if (err) > > + return err; > > + > > /* Update fields permitted to be changed. */ > > map->pgoff = desc->pgoff; > > map->vma_flags = desc->vma_flags; > > @@ -3457,10 +3522,15 @@ int __vm_munmap(unsigned long start, size_t len, bool unlock) > > int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) > > { > > unsigned long charged = vma_pages(vma); > > + int err; > > > > if (find_vma_intersection(mm, vma->vm_start, vma->vm_end)) > > return -ENOMEM; > > > > + err = mmap_validate_vma_flags(&vma->flags); > > + if (err) > > + return err; > > + > > if (vma_test(vma, VMA_ACCOUNT_BIT) && > > security_vm_enough_memory_mm(mm, charged)) > > return -ENOMEM; > > diff --git a/mm/vma.h b/mm/vma.h > > index f15faa83f3d6..b2c3bc832a48 100644 > > --- a/mm/vma.h > > +++ b/mm/vma.h > > @@ -782,14 +782,19 @@ struct vm_area_struct *vm_area_alloc(struct mm_struct *mm); > > struct vm_area_struct *vm_area_dup(struct vm_area_struct *orig); > > void vm_area_free(struct vm_area_struct *vma); > > > > -/* vma_exec.c */ > > #ifdef CONFIG_MMU > > +int mmap_prepare_validate(const struct vm_area_desc *prev_desc, > > + const struct vm_area_desc *desc); > > + > > +int mmap_hook_validate(unsigned long prev_start, unsigned long prev_end, > > + const vma_flags_t *prev_flags, > > + const struct vm_area_struct *vma); > > + > > +/* vma_exec.c */ > > int create_init_stack_vma(struct mm_struct *mm, struct vm_area_struct **vmap, > > unsigned long *top_mem_p); > > int relocate_vma_down(struct vm_area_struct *vma, unsigned long shift); > > -#endif > > > > -#ifdef CONFIG_MMU > > /* > > * Denies creating a writable executable mapping or gaining executable permissions. > > * > > @@ -838,6 +843,20 @@ static inline bool map_deny_write_exec(const vma_flags_t *old, > > > > return false; > > } > > +#else > > +static inline int mmap_prepare_validate(const struct vm_area_desc *prev_desc, > > + const struct vm_area_desc *desc) > > +{ > > + return 0; > > +} > > + > > +static inline int mmap_hook_validate(unsigned long prev_start, > > + unsigned long prev_end, > > + const vma_flags_t *prev_flags, > > + const struct vm_area_struct *vma) > > +{ > > + return 0; > > +} > > #endif > > > > struct vm_area_struct *__install_special_mapping(struct mm_struct *mm, > > diff --git a/tools/testing/vma/include/dup.h b/tools/testing/vma/include/dup.h > > index 2fd422789717..2986ae6ca1e5 100644 > > --- a/tools/testing/vma/include/dup.h > > +++ b/tools/testing/vma/include/dup.h > > @@ -1359,13 +1359,23 @@ static inline int vfs_mmap_prepare(struct file *file, struct vm_area_desc *desc) > > return file->f_op->mmap_prepare(desc); > > } > > > > +int mmap_prepare_validate(const struct vm_area_desc *prev_desc, > > + const struct vm_area_desc *desc); > > + > > static inline int __compat_vma_mmap(struct vm_area_desc *desc, > > struct vm_area_struct *vma) > > { > > + struct vm_area_desc prev_desc; > > int err; > > > > + /* Derive state prior to mmap_prepare hook. */ > > + compat_set_desc_from_vma(&prev_desc, desc->file, vma); > > /* Perform any preparatory tasks for mmap action. */ > > err = mmap_action_prepare(desc); > > + if (err) > > + return err; > > + /* Check the caller did nothing crazy. */ > > + err = mmap_prepare_validate(&prev_desc, desc); > > if (err) > > return err; > > /* Update the VMA from the descriptor. */ > > > > -- > > 2.55.0 > > -- Cheers, Lorenzo From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 591C0C9830B for ; Wed, 23 Sep 2026 17:01:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=A31VIvCjlPj8Lmb2RupVQuX6xt12SP0+7o0arlcp8Tw=; b=s1P6vuFjyFkuKb 8w9OCmdk6NogtsoyMYOg03EooYABhNuT+KUfs+joCrCdueDhvyic2U4e1LbYEzsOmOD+PcH9bK54B RdYU3vvS4pFxDPgzG8Rv4fRTjzsW/8+yhMDuY6WpeS3Ts0gvbPJHVTAOdzA3X/eYqsNIFQ6h9mJu9 X3nV/KbDr/gkzl1fqT0qMPjUDo8vzRrF2xNYVzcUg6ux+ItD3QAZxkshq8SE9KpZ0UUK+GJ5E7obT f0a8NeHIu7R4DMq1e87t+t4kwiwbGCkFkiDzKM0UC0r7zsDdrt73ElY+KKDZ9+k8bml1Hquizl5c+ u7muwvs3fL5VDiJzNH1g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9QLM-00000008xHe-0qFH; Wed, 23 Sep 2026 17:01:17 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9QLJ-00000008xGt-3ncx; Wed, 23 Sep 2026 17:01:13 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 0BAFB40659; Wed, 23 Sep 2026 17:01:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 561491F000FF; Wed, 23 Sep 2026 17:00:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1790182872; bh=IJaDFCurzscncuVAFa6+vn22cawBT99G95jk4ztKBZA=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=ZcQp1PRnB0QUSVQpuckyN6NnlN+6MRRjA34s3hMaCu8POd1KGSSc4nMgFHRy/IHqA sCDiNxAphIqnCATmrKjeMRENal9GdJ2FHLLfzcPAvtBm4HQgDI17YB3YuuU9mmpey8 M40JgzYg2AeW6EmFVSPS3WJjbwL+R67KY/9UZgXjOugo+2fSheSMvvUrWSx7A6M9mR 6+iMWSwNyDGjyL6vwrzt+dUQVxRsaK8B7fh+pUqbFmYGQUDsh1+AuIGD6iO43coutn vK0C7KFxaOB2Put8d5jI/j+DturfIgk3i+kflpxHx5ltcdoSP5VGVCG112PoZDHOPD a2ikeQJL/niYA== Date: Wed, 23 Sep 2026 18:00:41 +0100 From: "Lorenzo Stoakes (ARM)" To: Suren Baghdasaryan Cc: Andrew Morton , "Liam R. Howlett" , Vlastimil Babka , Jann Horn , Pedro Falcato , David Hildenbrand , Mike Rapoport , Michal Hocko , Jonathan Corbet , Greg Kroah-Hartman , Dennis Dalessandro , Jason Gunthorpe , Leon Romanovsky , Paul Moore , Stephen Smalley , Jaroslav Kysela , Takashi Iwai , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Eduard Zingerman , Kumar Kartikeya Dwivedi , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Usama Arif , Kiryl Shutsemau , Doug Gilbert , "James E.J. Bottomley" , "Martin K. Petersen" , Jaya Kumar , Simona Vetter , Helge Deller , Sebastian Reichel , John Hubbard , Peter Xu , Masami Hiramatsu , Oleg Nesterov , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Rik van Riel , Harry Yoo , Juri Lelli , Vincent Guittot , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Will Deacon , "Aneesh Kumar K.V" , Nick Piggin , Arnd Bergmann , Muchun Song , Oscar Salvador , "Matthew Wilcox (Oracle)" , Jan Kara , Marc Zyngier , Oliver Upton , Catalin Marinas , Madhavan Srinivasan , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , "David S. Miller" , Andreas Larsson , Alexander Viro , Christian Brauner , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Youngjun Park , Johannes Weiner , Qi Zheng , Shakeel Butt , Axel Rasmussen , Yuanchu Xie , Wei Xu , Chengming Zhou , Michal Hocko , Miklos Szeredi , Xu Xin , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-usb@vger.kernel.org, linux-rdma@vger.kernel.org, selinux@vger.kernel.org, linux-sound@vger.kernel.org, bpf@vger.kernel.org, linux-scsi@vger.kernel.org, linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-trace-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arch@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, fuse-devel@lists.linux.dev Subject: Re: [PATCH v3 04/40] mm: consistently validate VMA state after mmap[_prepare] hooks Message-ID: References: <20260917-b4-mmap-prepare-vma-flag-sanify-v3-0-4583d8a23bca@kernel.org> <20260917-b4-mmap-prepare-vma-flag-sanify-v3-4-4583d8a23bca@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: kvm-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kvm-riscv" Errors-To: kvm-riscv-bounces+kvm-riscv=archiver.kernel.org@lists.infradead.org T24gV2VkLCBTZXAgMjMsIDIwMjYgYXQgMDk6NDc6MjBBTSAtMDcwMCwgU3VyZW4gQmFnaGRhc2Fy eWFuIHdyb3RlOgo+IE9uIFRodSwgU2VwIDE3LCAyMDI2IGF0IDk6MjXigK9BTSBMb3JlbnpvIFN0 b2FrZXMgKEFSTSkgPGxqc0BrZXJuZWwub3JnPiB3cm90ZToKPiA+Cj4gPiBXaGVuIHRoZSBmX29w LT5tbWFwX3ByZXBhcmUgb3IgZGVwcmVjYXRlZCBmX29wLT5tbWFwIGhvb2tzIGFyZSBpbnZva2Vk LCB0aGUKPiA+IGRyaXZlciBtaWdodCBoYXZlIGRvbmUgc29tZXRoaW5nIGNyYXp5IHRoYXQgaXMg bm90IHBlcm1pdHRlZCBieSB0aGUga2VybmVsLgo+ID4KPiA+IEN1cnJlbnRseSB3ZSBjaGVjayBm b3IgdGhyZWUgc3VjaCBjYXNlcyBpbiBfX21tYXBfbmV3X2ZpbGVfdm1hKCksIGJ1dCBvbmx5Cj4g PiBpZiB0aGUgbGVnYWN5IGZfb3AtPm1tYXAgaG9vayBpcyB1c2VkOgo+ID4KPiA+ICogRGlkIHNw YXJjIEFESSByZXN1bHQgaW4gaW52YWxpZCBmbGFncz8KPiA+Cj4gPiAqIERpZCB0aGUgZHJpdmVy IGFsdGVyIHZtYS0+dm1fc3RhcnQ/Cj4gPgo+ID4gKiBEaWQgdGhlIGRyaXZlciBtYWtlIGEgZmls ZS1iYWNrZWQgbWFwcGluZyBvbiBhIHJlYWQtb25seSBmaWxlIHdyaXRhYmxlPwo+ID4KPiA+IEdl bmVyYWxpc2UgdGhlc2UgY2hlY2tzIGZvciBib3RoIG1tYXBfcHJlcGFyZSBhbmQgbW1hcCBhbmQg YXBwbHkgdG8gYWxsCj4gPiBpbnZvY2F0aW9ucyBvZiBtbWFwX2ZpbGUoKSwgdGhlIGZfb3AtPm1t YXAgYW5kIGZfb3AtPm1tYXBfcHJlcGFyZSBoYW5kbGluZwo+ID4gaW4gdGhlIGNvcmUgVk1BIGNv ZGUgYW5kIHRoZSBtbWFwX3ByZXBhcmUgY29tcGF0aWJpbGl0eSBsYXllci4KPiA+Cj4gPiBBbHNv IGV4dGVuZCB0aGUgdm1fc3RhcnQgY2hlY2sgdG8gdm1fZW5kIGFsc28gLSBkcml2ZXJzIG11c3Qg bm90IGNoYW5nZSB0aGUKPiA+IFZNQSByYW5nZSBhdCBhbGwuCj4gPgo+ID4gV2UgYWxzbyBXQVJO X09OX09OQ0UoKSBvbiB0aGVzZSBjb25kaXRpb25zIGFzIHRoZXkgYXJlIHRoaW5ncyB0aGF0IHNo b3VsZAo+ID4gc2ltcGx5IG5vdCBvY2N1ciBpbiB0aGUga2VybmVsIGFuZCBpdCdzIGltcG9ydGFu dCB0byBjYWxsIGl0IG91dCB3aGVuIGl0Cj4gPiBkb2VzLgo+ID4KPiA+IFdlIGludm9rZSBtbWFw X3ByZXBhcmVfdmFsaWRhdGUoKSBhZnRlciBtbWFwX2FjdGlvbl9wcmVwYXJlKCksIGFzIG1tYXAK PiA+IGFjdGlvbnMgb2Z0ZW4gbWFuaXB1bGF0ZSBzdGF0ZSBpbiB0aGUgZGVzY3JpcHRvciB0aHVz IHByb3ZpZGluZyB0aGUgZmluYWwKPiA+IHN0YXRlIHRoZSBWTUEgd2lsbCBiZSBkZXJpdmVkIGZy b20uCj4gPgo+ID4gQWxzbyBjYWxsIG1tYXBfdmFsaWRhdGVfdm1hX2ZsYWdzKCkgaW4gaW5zZXJ0 X3ZtX3N0cnVjdCgpIHRvIGVuc3VyZSB0aGF0Cj4gPiBzcGVjaWFsIHJlZ2lvbnMgd2hpY2ggYXJl IGluc2VydGVkIChzdWNoIGFzIGEgVkRTTyBvciBWVkFSKSBhbHNvIHNhdGlzZnkKPiA+IHRoZSBz YW5pdHkgY2hlY2tzLgo+ID4KPiA+IFRoaXMgd2F5IGV2ZXJ5IFZNQSBlc3RhYmxpc2hlZCB0aHJv dWdoIGFuIG1tYXAgaG9vaywgd2hldGhlciB2aWEgbW1hcCgpIG9yCj4gPiB0aGUgY29tcGF0aWJp bGl0eSBsYXllciwgb3IgaW5zZXJ0ZWQgdmlhIGluc2VydF92bV9zdHJ1Y3QoKSwgaGFzIGJlZW4K PiA+IHZhbGlkYXRlZC4gYnJrKCkgVk1BcyBuZXZlciBwYXNzIHRocm91Z2ggYSBkcml2ZXIgaG9v ayBhbmQgc28gbmVlZCBubyBzdWNoCj4gPiBjaGVjay4KPiA+Cj4gPiBXaGlsZSB3ZSdyZSBoZXJl LCBhbHNvIGZpeHVwIGEgY291cGxlIGRpc2pvaW50IGJsb2NrcyBvZiAjaWZkZWYgQ09ORklHX01N VS4KPiA+Cj4gPiBGaW5hbGx5LCB1cGRhdGUgdGhlIFZNQSB1c2VybGFuZCB0ZXN0cyB0byByZWZs ZWN0IHRoZSBjaGFuZ2UuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogTG9yZW56byBTdG9ha2VzIChB Uk0pIDxsanNAa2VybmVsLm9yZz4KPgo+IFJldmlld2VkLWJ5OiBTdXJlbiBCYWdoZGFzYXJ5YW4g PHN1cmVuYkBnb29nbGUuY29tPgoKVGhhbmtzIQoKPgo+ID4gLS0tCj4gPiAgbW0vaW50ZXJuYWwu aCAgICAgICAgICAgICAgICAgICB8ICA1MSArKysrKysrKysrKystLS0tLS0tLQo+ID4gIG1tL3V0 aWwuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTkgKysrKysrLS0KPiA+ICBtbS92bWEuYyAg ICAgICAgICAgICAgICAgICAgICAgIHwgMTAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0KPiA+ICBtbS92bWEuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI1ICsr KysrKysrLS0KPiA+ICB0b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIHwgIDEwICsrKysK PiA+ICA1IGZpbGVzIGNoYW5nZWQsIDE2MyBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkK PiA+Cj4gPiBkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKPiA+IGlu ZGV4IGZlNTc2ZDQ2OGFmNC4uOTcwZmIzNDg5OGIyIDEwMDY0NAo+ID4gLS0tIGEvbW0vaW50ZXJu YWwuaAo+ID4gKysrIGIvbW0vaW50ZXJuYWwuaAo+ID4gQEAgLTIxMyw2ICsyMTMsMjQgQEAgc3Rh dGljIGlubGluZSB2b2lkICpmb2xpb19yYXdfbWFwcGluZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZv bGlvKQo+ID4gICAgICAgICByZXR1cm4gKHZvaWQgKikobWFwcGluZyAmIH5GT0xJT19NQVBQSU5H X0ZMQUdTKTsKPiA+ICB9Cj4gPgo+ID4gKy8qCj4gPiArICogSWYgdGhlIFZNQSBoYXMgYSBjbG9z ZSBob29rIHRoZW4gY2xvc2UgaXQsIGFuZCBzaW5jZSBjbG9zaW5nIGl0IG1pZ2h0IGxlYXZlCj4g PiArICogaXQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIHdoaWNoIG1ha2VzIHRoZSB1c2Ugb2Yg YW55IGhvb2tzIHN1c3BlY3QsIGNsZWFyCj4gPiArICogdGhlbSBkb3duIGJ5IGluc3RhbGxpbmcg ZHVtbXkgZW1wdHkgaG9va3MuCj4gPiArICovCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHZtYV9j bG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ICt7Cj4gPiArICAgICAgIGlmICh2 bWEtPnZtX29wcyAmJiB2bWEtPnZtX29wcy0+Y2xvc2UpIHsKPiA+ICsgICAgICAgICAgICAgICB2 bWEtPnZtX29wcy0+Y2xvc2Uodm1hKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAvKgo+ID4g KyAgICAgICAgICAgICAgICAqIFRoZSBtYXBwaW5nIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0 ZSwgYW5kIG5vIGZ1cnRoZXIgaG9va3MKPiA+ICsgICAgICAgICAgICAgICAgKiBtYXkgYmUgaW52 b2tlZCB1cG9uIGl0Lgo+ID4gKyAgICAgICAgICAgICAgICAqLwo+ID4gKyAgICAgICAgICAgICAg IHZtYS0+dm1fb3BzID0gJnZtYV9kdW1teV92bV9vcHM7Cj4gPiArICAgICAgIH0KPiA+ICt9Cj4g PiArCj4gPiAgLyoKPiA+ICAgKiBUaGlzIGlzIGEgZmlsZS1iYWNrZWQgbWFwcGluZywgYW5kIGlz IGFib3V0IHRvIGJlIG1lbW9yeSBtYXBwZWQgLSBpbnZva2UgaXRzCj4gPiAgICogbW1hcCBob29r IGFuZCBzYWZlbHkgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMuIE9uIGVycm9yLCBWTUEgaG9va3Mg d2lsbCBiZQo+ID4gQEAgLTIyNSw4ICsyNDMsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkICpmb2xp b19yYXdfbWFwcGluZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQo+ID4gICAqLwo+ID4gIHN0 YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCj4gPiAgewo+ID4gLSAgICAgICBpbnQgZXJyID0gdmZzX21tYXAoZmls ZSwgdm1hKTsKPiA+ICsgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBwcmV2X3N0YXJ0ID0gdm1h LT52bV9zdGFydDsKPiA+ICsgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBwcmV2X2VuZCA9IHZt YS0+dm1fZW5kOwo+ID4gKyAgICAgICBjb25zdCB2bWFfZmxhZ3NfdCBwcmV2X2ZsYWdzID0gdm1h LT5mbGFnczsKPgo+IG5pdDogTWlnaHQgYmUganVzdCBtZSBidXQgd2hlbiBJIHNlZSBwcmV2X1hY WCBpbiBWTUEtcmVsYXRlZCBjb2RlIEkKPiBwaWN0dXJlIHByZXZpb3VzIFZNQSBpbiB0aGUgYWRk cmVzcyBzcGFjZS4gTWF5YmUgY2FsbCB0aGVzZSBvcmlnX1hYWD8KClN1cmUsIHdpbGwgY2hhbmdl LgoKPgo+ID4gKyAgICAgICBpbnQgZXJyOwo+ID4KPiA+ICsgICAgICAgZXJyID0gdmZzX21tYXAo ZmlsZSwgdm1hKTsKPiA+ICAgICAgICAgLyoKPiA+ICAgICAgICAgICogRWl0aGVyIHdlIHRyaWVk IHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZQo+ID4g ICAgICAgICAgKiBvciBhIGRyaXZlciBzZXQgdm1hLT52bV9vcHMgPSBOVUxMIGludGVuZGluZyB0 aGVyZSB0byBiZSBubyBWTUEKPiA+IEBAIC0yMzksMjYgKzI2MSwxNyBAQCBzdGF0aWMgaW5saW5l IGludCBtbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQo+ID4gICAgICAgICAgKi8KPiA+ICAgICAgICAgaWYgKHVubGlrZWx5KGVyciB8fCAhdm1h LT52bV9vcHMpKQo+ID4gICAgICAgICAgICAgICAgIHZtYS0+dm1fb3BzID0gJnZtYV9kdW1teV92 bV9vcHM7Cj4gPiArICAgICAgIGlmICh1bmxpa2VseShlcnIpKQo+ID4gKyAgICAgICAgICAgICAg IHJldHVybiBlcnI7Cj4gPgo+ID4gLSAgICAgICByZXR1cm4gZXJyOwo+ID4gLX0KPiA+IC0KPiA+ IC0vKgo+ID4gLSAqIElmIHRoZSBWTUEgaGFzIGEgY2xvc2UgaG9vayB0aGVuIGNsb3NlIGl0LCBh bmQgc2luY2UgY2xvc2luZyBpdCBtaWdodCBsZWF2ZQo+ID4gLSAqIGl0IGluIGFuIGluY29uc2lz dGVudCBzdGF0ZSB3aGljaCBtYWtlcyB0aGUgdXNlIG9mIGFueSBob29rcyBzdXNwZWN0LCBjbGVh cgo+ID4gLSAqIHRoZW0gZG93biBieSBpbnN0YWxsaW5nIGR1bW15IGVtcHR5IGhvb2tzLgo+ID4g LSAqLwo+ID4gLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICp2bWEpCj4gPiAtewo+ID4gLSAgICAgICBpZiAodm1hLT52bV9vcHMgJiYgdm1hLT52bV9v cHMtPmNsb3NlKSB7Cj4gPiAtICAgICAgICAgICAgICAgdm1hLT52bV9vcHMtPmNsb3NlKHZtYSk7 Cj4gPiAtCj4gPiAtICAgICAgICAgICAgICAgLyoKPiA+IC0gICAgICAgICAgICAgICAgKiBUaGUg bWFwcGluZyBpcyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIGFuZCBubyBmdXJ0aGVyIGhvb2tz Cj4gPiAtICAgICAgICAgICAgICAgICogbWF5IGJlIGludm9rZWQgdXBvbiBpdC4KPiA+IC0gICAg ICAgICAgICAgICAgKi8KPiA+IC0gICAgICAgICAgICAgICB2bWEtPnZtX29wcyA9ICZ2bWFfZHVt bXlfdm1fb3BzOwo+ID4gKyAgICAgICBlcnIgPSBtbWFwX2hvb2tfdmFsaWRhdGUocHJldl9zdGFy dCwgcHJldl9lbmQsICZwcmV2X2ZsYWdzLCB2bWEpOwo+ID4gKyAgICAgICBpZiAodW5saWtlbHko ZXJyKSkgewo+ID4gKyAgICAgICAgICAgICAgIHZtYS0+dm1fc3RhcnQgPSBwcmV2X3N0YXJ0Owo+ ID4gKyAgICAgICAgICAgICAgIHZtYS0+dm1fZW5kID0gcHJldl9lbmQ7Cj4gPiArICAgICAgICAg ICAgICAgdm1hX2Nsb3NlKHZtYSk7Cj4gPiAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgcmV0 dXJuIGVycjsKPiA+ICB9Cj4gPgo+ID4gIC8qIHVubWFwX3ZtYXMgaXMgaW4gbW0vbWVtb3J5LmMg Ki8KPiA+IGRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmMKPiA+IGluZGV4IDAxNjkz Mjc4MDkyNS4uYmRkNTkyM2VlYmM3IDEwMDY0NAo+ID4gLS0tIGEvbW0vdXRpbC5jCj4gPiArKysg Yi9tbS91dGlsLmMKPiA+IEBAIC0xMjI0LDE5ICsxMjI0LDI4IEBAIEVYUE9SVF9TWU1CT0woY29t cGF0X3NldF9kZXNjX2Zyb21fdm1hKTsKPiA+ICBpbnQgX19jb21wYXRfdm1hX21tYXAoc3RydWN0 IHZtX2FyZWFfZGVzYyAqZGVzYywKPiA+ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ICB7Cj4gPiArICAgICAgIHN0cnVjdCB2bV9hcmVhX2Rlc2Mg cHJldl9kZXNjOwo+ID4gICAgICAgICBpbnQgZXJyOwo+ID4KPiA+ICsgICAgICAgLyogRGVyaXZl IHN0YXRlIHByaW9yIHRvIG1tYXBfcHJlcGFyZSBob29rLiAqLwo+ID4gKyAgICAgICBjb21wYXRf c2V0X2Rlc2NfZnJvbV92bWEoJnByZXZfZGVzYywgZGVzYy0+ZmlsZSwgdm1hKTsKPiA+ICAgICAg ICAgLyogUGVyZm9ybSBhbnkgcHJlcGFyYXRvcnkgdGFza3MgZm9yIG1tYXAgYWN0aW9uLiAqLwo+ ID4gICAgICAgICBlcnIgPSBtbWFwX2FjdGlvbl9wcmVwYXJlKGRlc2MpOwo+ID4gLSAgICAgICBp ZiAoZXJyKSB7Cj4gPiAtICAgICAgICAgICAgICAgaWYgKGRlc2MtPnZtX2ZpbGUgIT0gdm1hLT52 bV9maWxlKQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgZnB1dChkZXNjLT52bV9maWxlKTsK PiA+IC0gICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+ID4gLSAgICAgICB9Cj4gPiArICAgICAg IGlmIChlcnIpCj4gPiArICAgICAgICAgICAgICAgZ290byBlcnJfcHV0Owo+ID4gKyAgICAgICAv KiBDaGVjayB0aGUgY2FsbGVyIGRpZCBub3RoaW5nIGNyYXp5LiAqLwo+ID4gKyAgICAgICBlcnIg PSBtbWFwX3ByZXBhcmVfdmFsaWRhdGUoJnByZXZfZGVzYywgZGVzYyk7Cj4gPiArICAgICAgIGlm IChlcnIpCj4gPiArICAgICAgICAgICAgICAgZ290byBlcnJfcHV0Owo+ID4gICAgICAgICAvKiBV cGRhdGUgdGhlIFZNQSBmcm9tIHRoZSBkZXNjcmlwdG9yLiAqLwo+ID4gICAgICAgICBjb21wYXRf c2V0X3ZtYV9mcm9tX2Rlc2Modm1hLCBkZXNjKTsKPiA+ICAgICAgICAgLyogQ29tcGxldGUgYW55 IHNwZWNpZmllZCBtbWFwIGFjdGlvbnMuICovCj4gPiAgICAgICAgIHJldHVybiBtbWFwX2FjdGlv bl9jb21wbGV0ZSh2bWEsICZkZXNjLT5hY3Rpb24sIC8qaXNfY29tcGF0PSovdHJ1ZSk7Cj4gPiAr Cj4gPiArZXJyX3B1dDoKPiA+ICsgICAgICAgaWYgKGRlc2MtPnZtX2ZpbGUgIT0gdm1hLT52bV9m aWxlKQo+ID4gKyAgICAgICAgICAgICAgIGZwdXQoZGVzYy0+dm1fZmlsZSk7Cj4gPiArICAgICAg IHJldHVybiBlcnI7Cj4gPiAgfQo+ID4gIEVYUE9SVF9TWU1CT0woX19jb21wYXRfdm1hX21tYXAp Owo+ID4KPiA+IGRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jCj4gPiBpbmRleCAwNWQy YzY3NjY3MmUuLmQ2ZWQxMGNlZmM4ZiAxMDA2NDQKPiA+IC0tLSBhL21tL3ZtYS5jCj4gPiArKysg Yi9tbS92bWEuYwo+ID4gQEAgLTI2MjMsMTYgKzI2MjMsNiBAQCBzdGF0aWMgaW50IF9fbW1hcF9u ZXdfZmlsZV92bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwKPiA+ICAgICAgICAgICAgICAgICBy ZXR1cm4gZXJyb3I7Cj4gPiAgICAgICAgIH0KPiA+Cj4gPiAtICAgICAgIC8qIERyaXZlcnMgY2Fu bm90IGFsdGVyIHRoZSBhZGRyZXNzIG9mIHRoZSBWTUEuICovCj4gPiAtICAgICAgIFdBUk5fT05f T05DRShtYXAtPmFkZHIgIT0gdm1hLT52bV9zdGFydCk7Cj4gPiAtICAgICAgIC8qCj4gPiAtICAg ICAgICAqIERyaXZlcnMgc2hvdWxkIG5vdCBwZXJtaXQgd3JpdGFiaWxpdHkgd2hlbiBwcmV2aW91 c2x5IGl0IHdhcwo+ID4gLSAgICAgICAgKiBkaXNhbGxvd2VkLgo+ID4gLSAgICAgICAgKi8KPiA+ IC0gICAgICAgVk1fV0FSTl9PTl9PTkNFKCF2bWFfZmxhZ3Nfc2FtZV9wYWlyKCZtYXAtPnZtYV9m bGFncywgJnZtYS0+ZmxhZ3MpICYmCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAhdm1hX2Zs YWdzX3Rlc3QoJm1hcC0+dm1hX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklUKSAmJgo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZV1JJVEVfQklUKSk7Cj4gPiAt Cj4gPiAgICAgICAgIG1hcC0+dm1hX2ZsYWdzID0gdm1hLT5mbGFnczsKPiA+Cj4gPiAgICAgICAg IHJldHVybiAwOwo+ID4gQEAgLTI3MTAsMTEgKzI3MDAsNiBAQCBzdGF0aWMgaW50IF9fbW1hcF9u ZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZt YXAsCj4gPiAgICAgICAgICAgICAgICAgdm1hLT5mbGFncyA9IG1hcC0+dm1hX2ZsYWdzOwo+ID4g ICAgICAgICB9Cj4gPgo+ID4gLSNpZmRlZiBDT05GSUdfU1BBUkM2NAo+ID4gLSAgICAgICAvKiBU T0RPOiBGaXggU1BBUkMgQURJISAqLwo+ID4gLSAgICAgICBXQVJOX09OX09OQ0UoIWFyY2hfdmFs aWRhdGVfZmxhZ3MobWFwLT52bV9mbGFncykpOwo+ID4gLSNlbmRpZgo+ID4gLQo+ID4gICAgICAg ICAvKiBMb2NrIHRoZSBWTUEgc2luY2UgaXQgaXMgbW9kaWZpZWQgYWZ0ZXIgaW5zZXJ0aW9uIGlu dG8gVk1BIHRyZWUgKi8KPiA+ICAgICAgICAgdm1hX3N0YXJ0X3dyaXRlKHZtYSk7Cj4gPiAgICAg ICAgIHZtYV9pdGVyX3N0b3JlX25ldyh2bWksIHZtYSk7Cj4gPiBAQCAtMjc3Nyw2ICsyNzYyLDgw IEBAIHN0YXRpYyB2b2lkIF9fbW1hcF9jb21wbGV0ZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ICAgICAgICAgdm1hX3NldF9wYWdlX3Byb3Qo dm1hKTsKPiA+ICB9Cj4gPgo+ID4gKy8qIENoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBWTUEgZmxh Z3Mgb2YgYSBuZXdseSBtYXBwZWQgVk1BIGFyZSBzYW5lLiAqLwo+ID4gK3N0YXRpYyBpbnQgbW1h cF92YWxpZGF0ZV92bWFfZmxhZ3MoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKQo+ID4gK3sKPiA+ ICsjaWZkZWYgQ09ORklHX1NQQVJDNjQKPiA+ICsgICAgICAgY29uc3Qgdm1fZmxhZ3NfdCBsZWdh Y3lfZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KCpmbGFncyk7Cj4gPiArCj4gPiArICAgICAg IC8qIFRPRE86IEZpeCBTUEFSQyBBREkhICovCj4gPiArICAgICAgIGlmIChXQVJOX09OX09OQ0Uo IWFyY2hfdmFsaWRhdGVfZmxhZ3MobGVnYWN5X2ZsYWdzKSkpCj4gPiArICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ ID4gK30KPiA+ICsKPiA+ICsvKiBDaGVjayB0byBlbnN1cmUgYSBkcml2ZXIgaGFzbid0IGRvbmUg c29tZXRoaW5nIGNyYXp5LiAqLwo+ID4gK3N0YXRpYyBpbnQgbW1hcF92YWxpZGF0ZSh1bnNpZ25l ZCBsb25nIHByZXZfc3RhcnQsIHVuc2lnbmVkIGxvbmcgcHJldl9lbmQsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjdXJyX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGN1 cnJfZW5kLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZtYV9mbGFnc190ICpw cmV2X2ZsYWdzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZtYV9mbGFnc190 ICpjdXJyX2ZsYWdzKQo+ID4gK3sKPiA+ICsgICAgICAgYm9vbCB3YXNfbWF5d3JpdGUsIGlzX21h eXdyaXRlOwo+ID4gKwo+ID4gKyAgICAgICAvKiBEcml2ZXJzIGNhbm5vdCBhbHRlciB0aGUgcmFu Z2Ugb2YgdGhlIFZNQS4gKi8KPiA+ICsgICAgICAgaWYgKFdBUk5fT05fT05DRShwcmV2X3N0YXJ0 ICE9IGN1cnJfc3RhcnQgfHwgcHJldl9lbmQgIT0gY3Vycl9lbmQpKQo+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKyAgICAgICB3YXNfbWF5d3JpdGUgPSB2bWFf ZmxhZ3NfdGVzdChwcmV2X2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklUKTsKPiA+ICsgICAgICAgaXNf bWF5d3JpdGUgPSB2bWFfZmxhZ3NfdGVzdChjdXJyX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklUKTsK PiA+ICsKPiA+ICsgICAgICAgLyogQSBkcml2ZXIgbWF5IG5vdCBtYWtlIGEgcHJldmlvdXNseSB1 bndyaXRhYmxlIG1hcHBpbmcgd3JpdGFibGUuICovCj4gPiArICAgICAgIGlmIChXQVJOX09OX09O Q0UoIXdhc19tYXl3cml0ZSAmJiBpc19tYXl3cml0ZSkpCj4gPiArICAgICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBtbWFwX3ZhbGlkYXRlX3ZtYV9m bGFncyhjdXJyX2ZsYWdzKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogbW1hcF9wcmVw YXJlX3ZhbGlkYXRlKCkgLSBFbnN1cmUgdGhlIGRyaXZlciBoYXNuJ3QgdmlvbGF0ZWQgaW52YXJp YW50cyBpbiBpdHMKPiA+ICsgKiBmX29wLT5tbWFwX3ByZXBhcmUgaG9vay4KPiA+ICsgKiBAcHJl dl9kZXNjOiBUaGUgVk1BIGRlc2NyaXB0b3IgcHJpb3IgdG8gdGhlIG1tYXBfcHJlcGFyZSBob29r IGJlaW5nIGNhbGxlZC4KPiA+ICsgKiBAZGVzYzogVGhlIFZNQSBkZXNjcmlwdG9yIGFmdGVyIHRo ZSBtbWFwX3ByZXBhcmUgaG9vayBoYXMgYmVlbiBjYWxsZWQuCj4gPiArICoKPiA+ICsgKiBSZXR1 cm5zOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhbiBlcnJvci4KPiA+ICsgKi8KPiA+ICtpbnQg bW1hcF9wcmVwYXJlX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKnByZXZfZGVz YywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVz YyAqZGVzYykKPiA+ICt7Cj4gPiArICAgICAgIHJldHVybiBtbWFwX3ZhbGlkYXRlKHByZXZfZGVz Yy0+c3RhcnQsIHByZXZfZGVzYy0+ZW5kLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXNjLT5zdGFydCwgZGVzYy0+ZW5kLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmcHJldl9kZXNjLT52bWFfZmxhZ3MsICZkZXNjLT52bWFfZmxhZ3MpOwo+ID4gK30KPiA+ICsK PiA+ICsvKioKPiA+ICsgKiBtbWFwX2hvb2tfdmFsaWRhdGUoKSAtIEVuc3VyZSB0aGUgZHJpdmVy IGhhc24ndCB2aW9sYXRlZCBpbnZhcmlhbnRzIGluCj4gPiArICogaXRzIGZfb3AtPm1tYXAgaG9v ay4KPiA+ICsgKiBAcHJldl9zdGFydDogVGhlIHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHByaW9yIHRv IHRoZSBtbWFwIGhvb2suCj4gPiArICogQHByZXZfZW5kOiBUaGUgZW5kIG9mIHRoZSBtYXBwaW5n IHByaW9yIHRvIHRoZSBtbWFwIGhvb2suCj4gPiArICogQHByZXZfZmxhZ3M6IFRoZSBWTUEgZmxh Z3Mgc2V0IGZvciB0aGUgVk1BIHByaW9yIHRvIHRoZSBtbWFwIGhvb2suCj4gPiArICogQHZtYTog VGhlIFZNQSBhZnRlciB0aGUgaG9vayBoYXMgYmVlbiBhcHBsaWVkLgo+ID4gKyAqCj4gPiArICog UmV0dXJuczogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYW4gZXJyb3IuCj4gPiArICovCj4gPiAr aW50IG1tYXBfaG9va192YWxpZGF0ZSh1bnNpZ25lZCBsb25nIHByZXZfc3RhcnQsIHVuc2lnbmVk IGxvbmcgcHJldl9lbmQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZtYV9mbGFn c190ICpwcmV2X2ZsYWdzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ICt7Cj4gPiArICAgICAgIGNvbnN0IHVuc2lnbmVkIGxv bmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0Owo+ID4gKyAgICAgICBjb25zdCB1bnNpZ25lZCBsb25n IGVuZCA9IHZtYS0+dm1fZW5kOwo+ID4gKyAgICAgICBjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3Mg PSAmdm1hLT5mbGFnczsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIG1tYXBfdmFsaWRhdGUocHJl dl9zdGFydCwgcHJldl9lbmQsIHN0YXJ0LCBlbmQsIHByZXZfZmxhZ3MsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKPiA+ICt9Cj4gPiArCj4gPiAgc3RhdGljIGludCBj YWxsX2FjdGlvbl9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYykKPiA+ICB7Cj4g PiBAQCAtMjgwMyw2ICsyODYyLDcgQEAgc3RhdGljIGludCBjYWxsX2FjdGlvbl9wcmVwYXJlKHN0 cnVjdCBtbWFwX3N0YXRlICptYXAsCj4gPiAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShz dHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAo+ID4gICAgICAgICAgICAgICAgIHN0cnVjdCB2bV9hcmVh X2Rlc2MgKmRlc2MpCj4gPiAgewo+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNj IHByZXZfZGVzYyA9ICpkZXNjOwo+ID4gICAgICAgICBpbnQgZXJyOwo+ID4KPiA+ICAgICAgICAg LyogSW52b2tlIHRoZSBob29rLiAqLwo+ID4gQEAgLTI4MjIsNiArMjg4MiwxMSBAQCBzdGF0aWMg aW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsCj4gPiAgICAgICAg IGlmIChlcnIpCj4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKPiA+Cj4gPiArICAgICAg IC8qIENoZWNrIHRoZSBjYWxsZXIgZGlkIG5vdGhpbmcgY3JhenkuICovCj4gPiArICAgICAgIGVy ciA9IG1tYXBfcHJlcGFyZV92YWxpZGF0ZSgmcHJldl9kZXNjLCBkZXNjKTsKPiA+ICsgICAgICAg aWYgKGVycikKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+ID4gKwo+ID4gICAgICAg ICAvKiBVcGRhdGUgZmllbGRzIHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkLiAqLwo+ID4gICAgICAg ICBtYXAtPnBnb2ZmID0gZGVzYy0+cGdvZmY7Cj4gPiAgICAgICAgIG1hcC0+dm1hX2ZsYWdzID0g ZGVzYy0+dm1hX2ZsYWdzOwo+ID4gQEAgLTM0NTcsMTAgKzM1MjIsMTUgQEAgaW50IF9fdm1fbXVu bWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIGJvb2wgdW5sb2NrKQo+ID4gIGlu dCBpbnNlcnRfdm1fc3RydWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSkKPiA+ICB7Cj4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IHZt YV9wYWdlcyh2bWEpOwo+ID4gKyAgICAgICBpbnQgZXJyOwo+ID4KPiA+ICAgICAgICAgaWYgKGZp bmRfdm1hX2ludGVyc2VjdGlvbihtbSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpKQo+ID4g ICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ID4KPiA+ICsgICAgICAgZXJyID0gbW1h cF92YWxpZGF0ZV92bWFfZmxhZ3MoJnZtYS0+ZmxhZ3MpOwo+ID4gKyAgICAgICBpZiAoZXJyKQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnI7Cj4gPiArCj4gPiAgICAgICAgIGlmICh2bWFf dGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkgJiYKPiA+ICAgICAgICAgICAgICBzZWN1cml0eV92 bV9lbm91Z2hfbWVtb3J5X21tKG1tLCBjaGFyZ2VkKSkKPiA+ICAgICAgICAgICAgICAgICByZXR1 cm4gLUVOT01FTTsKPiA+IGRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oCj4gPiBpbmRl eCBmMTVmYWE4M2YzZDYuLmIyYzNiYzgzMmE0OCAxMDA2NDQKPiA+IC0tLSBhL21tL3ZtYS5oCj4g PiArKysgYi9tbS92bWEuaAo+ID4gQEAgLTc4MiwxNCArNzgyLDE5IEBAIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1fYXJlYV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cj4gPiAgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bV9hcmVhX2R1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9yaWcp Owo+ID4gIHZvaWQgdm1fYXJlYV9mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKPiA+ Cj4gPiAtLyogdm1hX2V4ZWMuYyAqLwo+ID4gICNpZmRlZiBDT05GSUdfTU1VCj4gPiAraW50IG1t YXBfcHJlcGFyZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpwcmV2X2Rlc2Ms Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2Mg KmRlc2MpOwo+ID4gKwo+ID4gK2ludCBtbWFwX2hvb2tfdmFsaWRhdGUodW5zaWduZWQgbG9uZyBw cmV2X3N0YXJ0LCB1bnNpZ25lZCBsb25nIHByZXZfZW5kLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB2bWFfZmxhZ3NfdCAqcHJldl9mbGFncywKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ID4gKwo+ID4gKy8qIHZt YV9leGVjLmMgKi8KPiA+ICBpbnQgY3JlYXRlX2luaXRfc3RhY2tfdm1hKHN0cnVjdCBtbV9zdHJ1 Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLAo+ID4gICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nICp0b3BfbWVtX3ApOwo+ID4gIGludCByZWxvY2F0ZV92 bWFfZG93bihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzaGlmdCk7 Cj4gPiAtI2VuZGlmCj4gPgo+ID4gLSNpZmRlZiBDT05GSUdfTU1VCj4gPiAgLyoKPiA+ICAgKiBE ZW5pZXMgY3JlYXRpbmcgYSB3cml0YWJsZSBleGVjdXRhYmxlIG1hcHBpbmcgb3IgZ2FpbmluZyBl eGVjdXRhYmxlIHBlcm1pc3Npb25zLgo+ID4gICAqCj4gPiBAQCAtODM4LDYgKzg0MywyMCBAQCBz dGF0aWMgaW5saW5lIGJvb2wgbWFwX2Rlbnlfd3JpdGVfZXhlYyhjb25zdCB2bWFfZmxhZ3NfdCAq b2xkLAo+ID4KPiA+ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4gIH0KPiA+ICsjZWxzZQo+ID4g K3N0YXRpYyBpbmxpbmUgaW50IG1tYXBfcHJlcGFyZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qgdm1f YXJlYV9kZXNjICpwcmV2X2Rlc2MsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYykKPiA+ICt7Cj4gPiArICAg ICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGludCBtbWFwX2hv b2tfdmFsaWRhdGUodW5zaWduZWQgbG9uZyBwcmV2X3N0YXJ0LAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcHJldl9lbmQsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnByZXZfZmxh Z3MsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gPiArewo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiAgI2VuZGlmCj4gPgo+ID4gIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqX19pbnN0YWxsX3Nw ZWNpYWxfbWFwcGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiA+IGRpZmYgLS1naXQgYS90b29s cy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9k dXAuaAo+ID4gaW5kZXggMmZkNDIyNzg5NzE3Li4yOTg2YWU2Y2ExZTUgMTAwNjQ0Cj4gPiAtLS0g YS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCj4gPiArKysgYi90b29scy90ZXN0aW5n L3ZtYS9pbmNsdWRlL2R1cC5oCj4gPiBAQCAtMTM1OSwxMyArMTM1OSwyMyBAQCBzdGF0aWMgaW5s aW5lIGludCB2ZnNfbW1hcF9wcmVwYXJlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJl YV9kZXNjICpkZXNjKQo+ID4gICAgICAgICByZXR1cm4gZmlsZS0+Zl9vcC0+bW1hcF9wcmVwYXJl KGRlc2MpOwo+ID4gIH0KPiA+Cj4gPiAraW50IG1tYXBfcHJlcGFyZV92YWxpZGF0ZShjb25zdCBz dHJ1Y3Qgdm1fYXJlYV9kZXNjICpwcmV2X2Rlc2MsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpOwo+ID4gKwo+ID4gIHN0YXRpYyBp bmxpbmUgaW50IF9fY29tcGF0X3ZtYV9tbWFwKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsCj4g PiAgICAgICAgICAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gPiAgewo+ID4g KyAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9kZXNjIHByZXZfZGVzYzsKPiA+ICAgICAgICAgaW50IGVy cjsKPiA+Cj4gPiArICAgICAgIC8qIERlcml2ZSBzdGF0ZSBwcmlvciB0byBtbWFwX3ByZXBhcmUg aG9vay4gKi8KPiA+ICsgICAgICAgY29tcGF0X3NldF9kZXNjX2Zyb21fdm1hKCZwcmV2X2Rlc2Ms IGRlc2MtPmZpbGUsIHZtYSk7Cj4gPiAgICAgICAgIC8qIFBlcmZvcm0gYW55IHByZXBhcmF0b3J5 IHRhc2tzIGZvciBtbWFwIGFjdGlvbi4gKi8KPiA+ICAgICAgICAgZXJyID0gbW1hcF9hY3Rpb25f cHJlcGFyZShkZXNjKTsKPiA+ICsgICAgICAgaWYgKGVycikKPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gZXJyOwo+ID4gKyAgICAgICAvKiBDaGVjayB0aGUgY2FsbGVyIGRpZCBub3RoaW5nIGNy YXp5LiAqLwo+ID4gKyAgICAgICBlcnIgPSBtbWFwX3ByZXBhcmVfdmFsaWRhdGUoJnByZXZfZGVz YywgZGVzYyk7Cj4gPiAgICAgICAgIGlmIChlcnIpCj4gPiAgICAgICAgICAgICAgICAgcmV0dXJu IGVycjsKPiA+ICAgICAgICAgLyogVXBkYXRlIHRoZSBWTUEgZnJvbSB0aGUgZGVzY3JpcHRvci4g Ki8KPiA+Cj4gPiAtLQo+ID4gMi41NS4wCj4gPgoKLS0KQ2hlZXJzLCBMb3JlbnpvCgotLSAKa3Zt LXJpc2N2IG1haWxpbmcgbGlzdAprdm0tcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2t2bS1yaXNjdgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C3285C9833E for ; Fri, 25 Sep 2026 23:41:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xoNWdZagBefIevd2uAHLDCBSBnin8u4IpL/1LCLBdjc=; b=2pnzHtdZhQwbjF rTSrQHSK0SgLioZry1sQKlAmZNBaJ7VKSZBj46HwkJwlJDHIywMSNqeO0elJiG9DXzpdjDVHJR0hf cBrAPWCKl/voywan1+Fhnkn5FHu5RSQWfbyV5WHwJBouaDdWaimW6FTXd1GZhjDyRqdw7RrKMSNoW y91g5KFxadjPMV7uqtW18B3Qq597yvRG97j8LjxQbwK8gdyEiTktT20QJypTf2KzjuHQtr7LtJPkr 8DVdC/0Waxv4OxvV0F65k5YiXzGOoTxc4xZ/BIzCBFW4RAhE1FCAwvRXg3zcnr+QuOX+nyhsvDouR IYukl43ouhq6skt3TplQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xAFXH-0000000EeNe-0CWX; Fri, 25 Sep 2026 23:40:59 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9QLJ-00000008xGt-3ncx; Wed, 23 Sep 2026 17:01:13 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 0BAFB40659; Wed, 23 Sep 2026 17:01:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 561491F000FF; Wed, 23 Sep 2026 17:00:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1790182872; bh=IJaDFCurzscncuVAFa6+vn22cawBT99G95jk4ztKBZA=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=ZcQp1PRnB0QUSVQpuckyN6NnlN+6MRRjA34s3hMaCu8POd1KGSSc4nMgFHRy/IHqA sCDiNxAphIqnCATmrKjeMRENal9GdJ2FHLLfzcPAvtBm4HQgDI17YB3YuuU9mmpey8 M40JgzYg2AeW6EmFVSPS3WJjbwL+R67KY/9UZgXjOugo+2fSheSMvvUrWSx7A6M9mR 6+iMWSwNyDGjyL6vwrzt+dUQVxRsaK8B7fh+pUqbFmYGQUDsh1+AuIGD6iO43coutn vK0C7KFxaOB2Put8d5jI/j+DturfIgk3i+kflpxHx5ltcdoSP5VGVCG112PoZDHOPD a2ikeQJL/niYA== Date: Wed, 23 Sep 2026 18:00:41 +0100 From: "Lorenzo Stoakes (ARM)" To: Suren Baghdasaryan Cc: Andrew Morton , "Liam R. Howlett" , Vlastimil Babka , Jann Horn , Pedro Falcato , David Hildenbrand , Mike Rapoport , Michal Hocko , Jonathan Corbet , Greg Kroah-Hartman , Dennis Dalessandro , Jason Gunthorpe , Leon Romanovsky , Paul Moore , Stephen Smalley , Jaroslav Kysela , Takashi Iwai , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Eduard Zingerman , Kumar Kartikeya Dwivedi , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Usama Arif , Kiryl Shutsemau , Doug Gilbert , "James E.J. Bottomley" , "Martin K. Petersen" , Jaya Kumar , Simona Vetter , Helge Deller , Sebastian Reichel , John Hubbard , Peter Xu , Masami Hiramatsu , Oleg Nesterov , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Rik van Riel , Harry Yoo , Juri Lelli , Vincent Guittot , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Will Deacon , "Aneesh Kumar K.V" , Nick Piggin , Arnd Bergmann , Muchun Song , Oscar Salvador , "Matthew Wilcox (Oracle)" , Jan Kara , Marc Zyngier , Oliver Upton , Catalin Marinas , Madhavan Srinivasan , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , "David S. Miller" , Andreas Larsson , Alexander Viro , Christian Brauner , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Youngjun Park , Johannes Weiner , Qi Zheng , Shakeel Butt , Axel Rasmussen , Yuanchu Xie , Wei Xu , Chengming Zhou , Michal Hocko , Miklos Szeredi , Xu Xin , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-usb@vger.kernel.org, linux-rdma@vger.kernel.org, selinux@vger.kernel.org, linux-sound@vger.kernel.org, bpf@vger.kernel.org, linux-scsi@vger.kernel.org, linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-trace-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arch@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, fuse-devel@lists.linux.dev Subject: Re: [PATCH v3 04/40] mm: consistently validate VMA state after mmap[_prepare] hooks Message-ID: References: <20260917-b4-mmap-prepare-vma-flag-sanify-v3-0-4583d8a23bca@kernel.org> <20260917-b4-mmap-prepare-vma-flag-sanify-v3-4-4583d8a23bca@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailman-Approved-At: Fri, 25 Sep 2026 16:40:51 -0700 X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gV2VkLCBTZXAgMjMsIDIwMjYgYXQgMDk6NDc6MjBBTSAtMDcwMCwgU3VyZW4gQmFnaGRhc2Fy eWFuIHdyb3RlOgo+IE9uIFRodSwgU2VwIDE3LCAyMDI2IGF0IDk6MjXigK9BTSBMb3JlbnpvIFN0 b2FrZXMgKEFSTSkgPGxqc0BrZXJuZWwub3JnPiB3cm90ZToKPiA+Cj4gPiBXaGVuIHRoZSBmX29w LT5tbWFwX3ByZXBhcmUgb3IgZGVwcmVjYXRlZCBmX29wLT5tbWFwIGhvb2tzIGFyZSBpbnZva2Vk LCB0aGUKPiA+IGRyaXZlciBtaWdodCBoYXZlIGRvbmUgc29tZXRoaW5nIGNyYXp5IHRoYXQgaXMg bm90IHBlcm1pdHRlZCBieSB0aGUga2VybmVsLgo+ID4KPiA+IEN1cnJlbnRseSB3ZSBjaGVjayBm b3IgdGhyZWUgc3VjaCBjYXNlcyBpbiBfX21tYXBfbmV3X2ZpbGVfdm1hKCksIGJ1dCBvbmx5Cj4g PiBpZiB0aGUgbGVnYWN5IGZfb3AtPm1tYXAgaG9vayBpcyB1c2VkOgo+ID4KPiA+ICogRGlkIHNw YXJjIEFESSByZXN1bHQgaW4gaW52YWxpZCBmbGFncz8KPiA+Cj4gPiAqIERpZCB0aGUgZHJpdmVy IGFsdGVyIHZtYS0+dm1fc3RhcnQ/Cj4gPgo+ID4gKiBEaWQgdGhlIGRyaXZlciBtYWtlIGEgZmls ZS1iYWNrZWQgbWFwcGluZyBvbiBhIHJlYWQtb25seSBmaWxlIHdyaXRhYmxlPwo+ID4KPiA+IEdl bmVyYWxpc2UgdGhlc2UgY2hlY2tzIGZvciBib3RoIG1tYXBfcHJlcGFyZSBhbmQgbW1hcCBhbmQg YXBwbHkgdG8gYWxsCj4gPiBpbnZvY2F0aW9ucyBvZiBtbWFwX2ZpbGUoKSwgdGhlIGZfb3AtPm1t YXAgYW5kIGZfb3AtPm1tYXBfcHJlcGFyZSBoYW5kbGluZwo+ID4gaW4gdGhlIGNvcmUgVk1BIGNv ZGUgYW5kIHRoZSBtbWFwX3ByZXBhcmUgY29tcGF0aWJpbGl0eSBsYXllci4KPiA+Cj4gPiBBbHNv IGV4dGVuZCB0aGUgdm1fc3RhcnQgY2hlY2sgdG8gdm1fZW5kIGFsc28gLSBkcml2ZXJzIG11c3Qg bm90IGNoYW5nZSB0aGUKPiA+IFZNQSByYW5nZSBhdCBhbGwuCj4gPgo+ID4gV2UgYWxzbyBXQVJO X09OX09OQ0UoKSBvbiB0aGVzZSBjb25kaXRpb25zIGFzIHRoZXkgYXJlIHRoaW5ncyB0aGF0IHNo b3VsZAo+ID4gc2ltcGx5IG5vdCBvY2N1ciBpbiB0aGUga2VybmVsIGFuZCBpdCdzIGltcG9ydGFu dCB0byBjYWxsIGl0IG91dCB3aGVuIGl0Cj4gPiBkb2VzLgo+ID4KPiA+IFdlIGludm9rZSBtbWFw X3ByZXBhcmVfdmFsaWRhdGUoKSBhZnRlciBtbWFwX2FjdGlvbl9wcmVwYXJlKCksIGFzIG1tYXAK PiA+IGFjdGlvbnMgb2Z0ZW4gbWFuaXB1bGF0ZSBzdGF0ZSBpbiB0aGUgZGVzY3JpcHRvciB0aHVz IHByb3ZpZGluZyB0aGUgZmluYWwKPiA+IHN0YXRlIHRoZSBWTUEgd2lsbCBiZSBkZXJpdmVkIGZy b20uCj4gPgo+ID4gQWxzbyBjYWxsIG1tYXBfdmFsaWRhdGVfdm1hX2ZsYWdzKCkgaW4gaW5zZXJ0 X3ZtX3N0cnVjdCgpIHRvIGVuc3VyZSB0aGF0Cj4gPiBzcGVjaWFsIHJlZ2lvbnMgd2hpY2ggYXJl IGluc2VydGVkIChzdWNoIGFzIGEgVkRTTyBvciBWVkFSKSBhbHNvIHNhdGlzZnkKPiA+IHRoZSBz YW5pdHkgY2hlY2tzLgo+ID4KPiA+IFRoaXMgd2F5IGV2ZXJ5IFZNQSBlc3RhYmxpc2hlZCB0aHJv dWdoIGFuIG1tYXAgaG9vaywgd2hldGhlciB2aWEgbW1hcCgpIG9yCj4gPiB0aGUgY29tcGF0aWJp bGl0eSBsYXllciwgb3IgaW5zZXJ0ZWQgdmlhIGluc2VydF92bV9zdHJ1Y3QoKSwgaGFzIGJlZW4K PiA+IHZhbGlkYXRlZC4gYnJrKCkgVk1BcyBuZXZlciBwYXNzIHRocm91Z2ggYSBkcml2ZXIgaG9v ayBhbmQgc28gbmVlZCBubyBzdWNoCj4gPiBjaGVjay4KPiA+Cj4gPiBXaGlsZSB3ZSdyZSBoZXJl LCBhbHNvIGZpeHVwIGEgY291cGxlIGRpc2pvaW50IGJsb2NrcyBvZiAjaWZkZWYgQ09ORklHX01N VS4KPiA+Cj4gPiBGaW5hbGx5LCB1cGRhdGUgdGhlIFZNQSB1c2VybGFuZCB0ZXN0cyB0byByZWZs ZWN0IHRoZSBjaGFuZ2UuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogTG9yZW56byBTdG9ha2VzIChB Uk0pIDxsanNAa2VybmVsLm9yZz4KPgo+IFJldmlld2VkLWJ5OiBTdXJlbiBCYWdoZGFzYXJ5YW4g PHN1cmVuYkBnb29nbGUuY29tPgoKVGhhbmtzIQoKPgo+ID4gLS0tCj4gPiAgbW0vaW50ZXJuYWwu aCAgICAgICAgICAgICAgICAgICB8ICA1MSArKysrKysrKysrKystLS0tLS0tLQo+ID4gIG1tL3V0 aWwuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTkgKysrKysrLS0KPiA+ICBtbS92bWEuYyAg ICAgICAgICAgICAgICAgICAgICAgIHwgMTAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0KPiA+ICBtbS92bWEuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI1ICsr KysrKysrLS0KPiA+ICB0b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIHwgIDEwICsrKysK PiA+ICA1IGZpbGVzIGNoYW5nZWQsIDE2MyBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkK PiA+Cj4gPiBkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKPiA+IGlu ZGV4IGZlNTc2ZDQ2OGFmNC4uOTcwZmIzNDg5OGIyIDEwMDY0NAo+ID4gLS0tIGEvbW0vaW50ZXJu YWwuaAo+ID4gKysrIGIvbW0vaW50ZXJuYWwuaAo+ID4gQEAgLTIxMyw2ICsyMTMsMjQgQEAgc3Rh dGljIGlubGluZSB2b2lkICpmb2xpb19yYXdfbWFwcGluZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZv bGlvKQo+ID4gICAgICAgICByZXR1cm4gKHZvaWQgKikobWFwcGluZyAmIH5GT0xJT19NQVBQSU5H X0ZMQUdTKTsKPiA+ICB9Cj4gPgo+ID4gKy8qCj4gPiArICogSWYgdGhlIFZNQSBoYXMgYSBjbG9z ZSBob29rIHRoZW4gY2xvc2UgaXQsIGFuZCBzaW5jZSBjbG9zaW5nIGl0IG1pZ2h0IGxlYXZlCj4g PiArICogaXQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIHdoaWNoIG1ha2VzIHRoZSB1c2Ugb2Yg YW55IGhvb2tzIHN1c3BlY3QsIGNsZWFyCj4gPiArICogdGhlbSBkb3duIGJ5IGluc3RhbGxpbmcg ZHVtbXkgZW1wdHkgaG9va3MuCj4gPiArICovCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHZtYV9j bG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ICt7Cj4gPiArICAgICAgIGlmICh2 bWEtPnZtX29wcyAmJiB2bWEtPnZtX29wcy0+Y2xvc2UpIHsKPiA+ICsgICAgICAgICAgICAgICB2 bWEtPnZtX29wcy0+Y2xvc2Uodm1hKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAvKgo+ID4g KyAgICAgICAgICAgICAgICAqIFRoZSBtYXBwaW5nIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0 ZSwgYW5kIG5vIGZ1cnRoZXIgaG9va3MKPiA+ICsgICAgICAgICAgICAgICAgKiBtYXkgYmUgaW52 b2tlZCB1cG9uIGl0Lgo+ID4gKyAgICAgICAgICAgICAgICAqLwo+ID4gKyAgICAgICAgICAgICAg IHZtYS0+dm1fb3BzID0gJnZtYV9kdW1teV92bV9vcHM7Cj4gPiArICAgICAgIH0KPiA+ICt9Cj4g PiArCj4gPiAgLyoKPiA+ICAgKiBUaGlzIGlzIGEgZmlsZS1iYWNrZWQgbWFwcGluZywgYW5kIGlz IGFib3V0IHRvIGJlIG1lbW9yeSBtYXBwZWQgLSBpbnZva2UgaXRzCj4gPiAgICogbW1hcCBob29r IGFuZCBzYWZlbHkgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMuIE9uIGVycm9yLCBWTUEgaG9va3Mg d2lsbCBiZQo+ID4gQEAgLTIyNSw4ICsyNDMsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkICpmb2xp b19yYXdfbWFwcGluZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQo+ID4gICAqLwo+ID4gIHN0 YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCj4gPiAgewo+ID4gLSAgICAgICBpbnQgZXJyID0gdmZzX21tYXAoZmls ZSwgdm1hKTsKPiA+ICsgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBwcmV2X3N0YXJ0ID0gdm1h LT52bV9zdGFydDsKPiA+ICsgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBwcmV2X2VuZCA9IHZt YS0+dm1fZW5kOwo+ID4gKyAgICAgICBjb25zdCB2bWFfZmxhZ3NfdCBwcmV2X2ZsYWdzID0gdm1h LT5mbGFnczsKPgo+IG5pdDogTWlnaHQgYmUganVzdCBtZSBidXQgd2hlbiBJIHNlZSBwcmV2X1hY WCBpbiBWTUEtcmVsYXRlZCBjb2RlIEkKPiBwaWN0dXJlIHByZXZpb3VzIFZNQSBpbiB0aGUgYWRk cmVzcyBzcGFjZS4gTWF5YmUgY2FsbCB0aGVzZSBvcmlnX1hYWD8KClN1cmUsIHdpbGwgY2hhbmdl LgoKPgo+ID4gKyAgICAgICBpbnQgZXJyOwo+ID4KPiA+ICsgICAgICAgZXJyID0gdmZzX21tYXAo ZmlsZSwgdm1hKTsKPiA+ICAgICAgICAgLyoKPiA+ICAgICAgICAgICogRWl0aGVyIHdlIHRyaWVk IHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZQo+ID4g ICAgICAgICAgKiBvciBhIGRyaXZlciBzZXQgdm1hLT52bV9vcHMgPSBOVUxMIGludGVuZGluZyB0 aGVyZSB0byBiZSBubyBWTUEKPiA+IEBAIC0yMzksMjYgKzI2MSwxNyBAQCBzdGF0aWMgaW5saW5l IGludCBtbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQo+ID4gICAgICAgICAgKi8KPiA+ICAgICAgICAgaWYgKHVubGlrZWx5KGVyciB8fCAhdm1h LT52bV9vcHMpKQo+ID4gICAgICAgICAgICAgICAgIHZtYS0+dm1fb3BzID0gJnZtYV9kdW1teV92 bV9vcHM7Cj4gPiArICAgICAgIGlmICh1bmxpa2VseShlcnIpKQo+ID4gKyAgICAgICAgICAgICAg IHJldHVybiBlcnI7Cj4gPgo+ID4gLSAgICAgICByZXR1cm4gZXJyOwo+ID4gLX0KPiA+IC0KPiA+ IC0vKgo+ID4gLSAqIElmIHRoZSBWTUEgaGFzIGEgY2xvc2UgaG9vayB0aGVuIGNsb3NlIGl0LCBh bmQgc2luY2UgY2xvc2luZyBpdCBtaWdodCBsZWF2ZQo+ID4gLSAqIGl0IGluIGFuIGluY29uc2lz dGVudCBzdGF0ZSB3aGljaCBtYWtlcyB0aGUgdXNlIG9mIGFueSBob29rcyBzdXNwZWN0LCBjbGVh cgo+ID4gLSAqIHRoZW0gZG93biBieSBpbnN0YWxsaW5nIGR1bW15IGVtcHR5IGhvb2tzLgo+ID4g LSAqLwo+ID4gLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICp2bWEpCj4gPiAtewo+ID4gLSAgICAgICBpZiAodm1hLT52bV9vcHMgJiYgdm1hLT52bV9v cHMtPmNsb3NlKSB7Cj4gPiAtICAgICAgICAgICAgICAgdm1hLT52bV9vcHMtPmNsb3NlKHZtYSk7 Cj4gPiAtCj4gPiAtICAgICAgICAgICAgICAgLyoKPiA+IC0gICAgICAgICAgICAgICAgKiBUaGUg bWFwcGluZyBpcyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIGFuZCBubyBmdXJ0aGVyIGhvb2tz Cj4gPiAtICAgICAgICAgICAgICAgICogbWF5IGJlIGludm9rZWQgdXBvbiBpdC4KPiA+IC0gICAg ICAgICAgICAgICAgKi8KPiA+IC0gICAgICAgICAgICAgICB2bWEtPnZtX29wcyA9ICZ2bWFfZHVt bXlfdm1fb3BzOwo+ID4gKyAgICAgICBlcnIgPSBtbWFwX2hvb2tfdmFsaWRhdGUocHJldl9zdGFy dCwgcHJldl9lbmQsICZwcmV2X2ZsYWdzLCB2bWEpOwo+ID4gKyAgICAgICBpZiAodW5saWtlbHko ZXJyKSkgewo+ID4gKyAgICAgICAgICAgICAgIHZtYS0+dm1fc3RhcnQgPSBwcmV2X3N0YXJ0Owo+ ID4gKyAgICAgICAgICAgICAgIHZtYS0+dm1fZW5kID0gcHJldl9lbmQ7Cj4gPiArICAgICAgICAg ICAgICAgdm1hX2Nsb3NlKHZtYSk7Cj4gPiAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgcmV0 dXJuIGVycjsKPiA+ICB9Cj4gPgo+ID4gIC8qIHVubWFwX3ZtYXMgaXMgaW4gbW0vbWVtb3J5LmMg Ki8KPiA+IGRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmMKPiA+IGluZGV4IDAxNjkz Mjc4MDkyNS4uYmRkNTkyM2VlYmM3IDEwMDY0NAo+ID4gLS0tIGEvbW0vdXRpbC5jCj4gPiArKysg Yi9tbS91dGlsLmMKPiA+IEBAIC0xMjI0LDE5ICsxMjI0LDI4IEBAIEVYUE9SVF9TWU1CT0woY29t cGF0X3NldF9kZXNjX2Zyb21fdm1hKTsKPiA+ICBpbnQgX19jb21wYXRfdm1hX21tYXAoc3RydWN0 IHZtX2FyZWFfZGVzYyAqZGVzYywKPiA+ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ICB7Cj4gPiArICAgICAgIHN0cnVjdCB2bV9hcmVhX2Rlc2Mg cHJldl9kZXNjOwo+ID4gICAgICAgICBpbnQgZXJyOwo+ID4KPiA+ICsgICAgICAgLyogRGVyaXZl IHN0YXRlIHByaW9yIHRvIG1tYXBfcHJlcGFyZSBob29rLiAqLwo+ID4gKyAgICAgICBjb21wYXRf c2V0X2Rlc2NfZnJvbV92bWEoJnByZXZfZGVzYywgZGVzYy0+ZmlsZSwgdm1hKTsKPiA+ICAgICAg ICAgLyogUGVyZm9ybSBhbnkgcHJlcGFyYXRvcnkgdGFza3MgZm9yIG1tYXAgYWN0aW9uLiAqLwo+ ID4gICAgICAgICBlcnIgPSBtbWFwX2FjdGlvbl9wcmVwYXJlKGRlc2MpOwo+ID4gLSAgICAgICBp ZiAoZXJyKSB7Cj4gPiAtICAgICAgICAgICAgICAgaWYgKGRlc2MtPnZtX2ZpbGUgIT0gdm1hLT52 bV9maWxlKQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgZnB1dChkZXNjLT52bV9maWxlKTsK PiA+IC0gICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+ID4gLSAgICAgICB9Cj4gPiArICAgICAg IGlmIChlcnIpCj4gPiArICAgICAgICAgICAgICAgZ290byBlcnJfcHV0Owo+ID4gKyAgICAgICAv KiBDaGVjayB0aGUgY2FsbGVyIGRpZCBub3RoaW5nIGNyYXp5LiAqLwo+ID4gKyAgICAgICBlcnIg PSBtbWFwX3ByZXBhcmVfdmFsaWRhdGUoJnByZXZfZGVzYywgZGVzYyk7Cj4gPiArICAgICAgIGlm IChlcnIpCj4gPiArICAgICAgICAgICAgICAgZ290byBlcnJfcHV0Owo+ID4gICAgICAgICAvKiBV cGRhdGUgdGhlIFZNQSBmcm9tIHRoZSBkZXNjcmlwdG9yLiAqLwo+ID4gICAgICAgICBjb21wYXRf c2V0X3ZtYV9mcm9tX2Rlc2Modm1hLCBkZXNjKTsKPiA+ICAgICAgICAgLyogQ29tcGxldGUgYW55 IHNwZWNpZmllZCBtbWFwIGFjdGlvbnMuICovCj4gPiAgICAgICAgIHJldHVybiBtbWFwX2FjdGlv bl9jb21wbGV0ZSh2bWEsICZkZXNjLT5hY3Rpb24sIC8qaXNfY29tcGF0PSovdHJ1ZSk7Cj4gPiAr Cj4gPiArZXJyX3B1dDoKPiA+ICsgICAgICAgaWYgKGRlc2MtPnZtX2ZpbGUgIT0gdm1hLT52bV9m aWxlKQo+ID4gKyAgICAgICAgICAgICAgIGZwdXQoZGVzYy0+dm1fZmlsZSk7Cj4gPiArICAgICAg IHJldHVybiBlcnI7Cj4gPiAgfQo+ID4gIEVYUE9SVF9TWU1CT0woX19jb21wYXRfdm1hX21tYXAp Owo+ID4KPiA+IGRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jCj4gPiBpbmRleCAwNWQy YzY3NjY3MmUuLmQ2ZWQxMGNlZmM4ZiAxMDA2NDQKPiA+IC0tLSBhL21tL3ZtYS5jCj4gPiArKysg Yi9tbS92bWEuYwo+ID4gQEAgLTI2MjMsMTYgKzI2MjMsNiBAQCBzdGF0aWMgaW50IF9fbW1hcF9u ZXdfZmlsZV92bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwKPiA+ICAgICAgICAgICAgICAgICBy ZXR1cm4gZXJyb3I7Cj4gPiAgICAgICAgIH0KPiA+Cj4gPiAtICAgICAgIC8qIERyaXZlcnMgY2Fu bm90IGFsdGVyIHRoZSBhZGRyZXNzIG9mIHRoZSBWTUEuICovCj4gPiAtICAgICAgIFdBUk5fT05f T05DRShtYXAtPmFkZHIgIT0gdm1hLT52bV9zdGFydCk7Cj4gPiAtICAgICAgIC8qCj4gPiAtICAg ICAgICAqIERyaXZlcnMgc2hvdWxkIG5vdCBwZXJtaXQgd3JpdGFiaWxpdHkgd2hlbiBwcmV2aW91 c2x5IGl0IHdhcwo+ID4gLSAgICAgICAgKiBkaXNhbGxvd2VkLgo+ID4gLSAgICAgICAgKi8KPiA+ IC0gICAgICAgVk1fV0FSTl9PTl9PTkNFKCF2bWFfZmxhZ3Nfc2FtZV9wYWlyKCZtYXAtPnZtYV9m bGFncywgJnZtYS0+ZmxhZ3MpICYmCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAhdm1hX2Zs YWdzX3Rlc3QoJm1hcC0+dm1hX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklUKSAmJgo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZV1JJVEVfQklUKSk7Cj4gPiAt Cj4gPiAgICAgICAgIG1hcC0+dm1hX2ZsYWdzID0gdm1hLT5mbGFnczsKPiA+Cj4gPiAgICAgICAg IHJldHVybiAwOwo+ID4gQEAgLTI3MTAsMTEgKzI3MDAsNiBAQCBzdGF0aWMgaW50IF9fbW1hcF9u ZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZt YXAsCj4gPiAgICAgICAgICAgICAgICAgdm1hLT5mbGFncyA9IG1hcC0+dm1hX2ZsYWdzOwo+ID4g ICAgICAgICB9Cj4gPgo+ID4gLSNpZmRlZiBDT05GSUdfU1BBUkM2NAo+ID4gLSAgICAgICAvKiBU T0RPOiBGaXggU1BBUkMgQURJISAqLwo+ID4gLSAgICAgICBXQVJOX09OX09OQ0UoIWFyY2hfdmFs aWRhdGVfZmxhZ3MobWFwLT52bV9mbGFncykpOwo+ID4gLSNlbmRpZgo+ID4gLQo+ID4gICAgICAg ICAvKiBMb2NrIHRoZSBWTUEgc2luY2UgaXQgaXMgbW9kaWZpZWQgYWZ0ZXIgaW5zZXJ0aW9uIGlu dG8gVk1BIHRyZWUgKi8KPiA+ICAgICAgICAgdm1hX3N0YXJ0X3dyaXRlKHZtYSk7Cj4gPiAgICAg ICAgIHZtYV9pdGVyX3N0b3JlX25ldyh2bWksIHZtYSk7Cj4gPiBAQCAtMjc3Nyw2ICsyNzYyLDgw IEBAIHN0YXRpYyB2b2lkIF9fbW1hcF9jb21wbGV0ZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ICAgICAgICAgdm1hX3NldF9wYWdlX3Byb3Qo dm1hKTsKPiA+ICB9Cj4gPgo+ID4gKy8qIENoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBWTUEgZmxh Z3Mgb2YgYSBuZXdseSBtYXBwZWQgVk1BIGFyZSBzYW5lLiAqLwo+ID4gK3N0YXRpYyBpbnQgbW1h cF92YWxpZGF0ZV92bWFfZmxhZ3MoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKQo+ID4gK3sKPiA+ ICsjaWZkZWYgQ09ORklHX1NQQVJDNjQKPiA+ICsgICAgICAgY29uc3Qgdm1fZmxhZ3NfdCBsZWdh Y3lfZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KCpmbGFncyk7Cj4gPiArCj4gPiArICAgICAg IC8qIFRPRE86IEZpeCBTUEFSQyBBREkhICovCj4gPiArICAgICAgIGlmIChXQVJOX09OX09OQ0Uo IWFyY2hfdmFsaWRhdGVfZmxhZ3MobGVnYWN5X2ZsYWdzKSkpCj4gPiArICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ ID4gK30KPiA+ICsKPiA+ICsvKiBDaGVjayB0byBlbnN1cmUgYSBkcml2ZXIgaGFzbid0IGRvbmUg c29tZXRoaW5nIGNyYXp5LiAqLwo+ID4gK3N0YXRpYyBpbnQgbW1hcF92YWxpZGF0ZSh1bnNpZ25l ZCBsb25nIHByZXZfc3RhcnQsIHVuc2lnbmVkIGxvbmcgcHJldl9lbmQsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjdXJyX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGN1 cnJfZW5kLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZtYV9mbGFnc190ICpw cmV2X2ZsYWdzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZtYV9mbGFnc190 ICpjdXJyX2ZsYWdzKQo+ID4gK3sKPiA+ICsgICAgICAgYm9vbCB3YXNfbWF5d3JpdGUsIGlzX21h eXdyaXRlOwo+ID4gKwo+ID4gKyAgICAgICAvKiBEcml2ZXJzIGNhbm5vdCBhbHRlciB0aGUgcmFu Z2Ugb2YgdGhlIFZNQS4gKi8KPiA+ICsgICAgICAgaWYgKFdBUk5fT05fT05DRShwcmV2X3N0YXJ0 ICE9IGN1cnJfc3RhcnQgfHwgcHJldl9lbmQgIT0gY3Vycl9lbmQpKQo+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKyAgICAgICB3YXNfbWF5d3JpdGUgPSB2bWFf ZmxhZ3NfdGVzdChwcmV2X2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklUKTsKPiA+ICsgICAgICAgaXNf bWF5d3JpdGUgPSB2bWFfZmxhZ3NfdGVzdChjdXJyX2ZsYWdzLCBWTUFfTUFZV1JJVEVfQklUKTsK PiA+ICsKPiA+ICsgICAgICAgLyogQSBkcml2ZXIgbWF5IG5vdCBtYWtlIGEgcHJldmlvdXNseSB1 bndyaXRhYmxlIG1hcHBpbmcgd3JpdGFibGUuICovCj4gPiArICAgICAgIGlmIChXQVJOX09OX09O Q0UoIXdhc19tYXl3cml0ZSAmJiBpc19tYXl3cml0ZSkpCj4gPiArICAgICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBtbWFwX3ZhbGlkYXRlX3ZtYV9m bGFncyhjdXJyX2ZsYWdzKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogbW1hcF9wcmVw YXJlX3ZhbGlkYXRlKCkgLSBFbnN1cmUgdGhlIGRyaXZlciBoYXNuJ3QgdmlvbGF0ZWQgaW52YXJp YW50cyBpbiBpdHMKPiA+ICsgKiBmX29wLT5tbWFwX3ByZXBhcmUgaG9vay4KPiA+ICsgKiBAcHJl dl9kZXNjOiBUaGUgVk1BIGRlc2NyaXB0b3IgcHJpb3IgdG8gdGhlIG1tYXBfcHJlcGFyZSBob29r IGJlaW5nIGNhbGxlZC4KPiA+ICsgKiBAZGVzYzogVGhlIFZNQSBkZXNjcmlwdG9yIGFmdGVyIHRo ZSBtbWFwX3ByZXBhcmUgaG9vayBoYXMgYmVlbiBjYWxsZWQuCj4gPiArICoKPiA+ICsgKiBSZXR1 cm5zOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhbiBlcnJvci4KPiA+ICsgKi8KPiA+ICtpbnQg bW1hcF9wcmVwYXJlX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKnByZXZfZGVz YywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVz YyAqZGVzYykKPiA+ICt7Cj4gPiArICAgICAgIHJldHVybiBtbWFwX3ZhbGlkYXRlKHByZXZfZGVz Yy0+c3RhcnQsIHByZXZfZGVzYy0+ZW5kLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXNjLT5zdGFydCwgZGVzYy0+ZW5kLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmcHJldl9kZXNjLT52bWFfZmxhZ3MsICZkZXNjLT52bWFfZmxhZ3MpOwo+ID4gK30KPiA+ICsK PiA+ICsvKioKPiA+ICsgKiBtbWFwX2hvb2tfdmFsaWRhdGUoKSAtIEVuc3VyZSB0aGUgZHJpdmVy IGhhc24ndCB2aW9sYXRlZCBpbnZhcmlhbnRzIGluCj4gPiArICogaXRzIGZfb3AtPm1tYXAgaG9v ay4KPiA+ICsgKiBAcHJldl9zdGFydDogVGhlIHN0YXJ0IG9mIHRoZSBtYXBwaW5nIHByaW9yIHRv IHRoZSBtbWFwIGhvb2suCj4gPiArICogQHByZXZfZW5kOiBUaGUgZW5kIG9mIHRoZSBtYXBwaW5n IHByaW9yIHRvIHRoZSBtbWFwIGhvb2suCj4gPiArICogQHByZXZfZmxhZ3M6IFRoZSBWTUEgZmxh Z3Mgc2V0IGZvciB0aGUgVk1BIHByaW9yIHRvIHRoZSBtbWFwIGhvb2suCj4gPiArICogQHZtYTog VGhlIFZNQSBhZnRlciB0aGUgaG9vayBoYXMgYmVlbiBhcHBsaWVkLgo+ID4gKyAqCj4gPiArICog UmV0dXJuczogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYW4gZXJyb3IuCj4gPiArICovCj4gPiAr aW50IG1tYXBfaG9va192YWxpZGF0ZSh1bnNpZ25lZCBsb25nIHByZXZfc3RhcnQsIHVuc2lnbmVk IGxvbmcgcHJldl9lbmQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZtYV9mbGFn c190ICpwcmV2X2ZsYWdzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ICt7Cj4gPiArICAgICAgIGNvbnN0IHVuc2lnbmVkIGxv bmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0Owo+ID4gKyAgICAgICBjb25zdCB1bnNpZ25lZCBsb25n IGVuZCA9IHZtYS0+dm1fZW5kOwo+ID4gKyAgICAgICBjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3Mg PSAmdm1hLT5mbGFnczsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIG1tYXBfdmFsaWRhdGUocHJl dl9zdGFydCwgcHJldl9lbmQsIHN0YXJ0LCBlbmQsIHByZXZfZmxhZ3MsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKPiA+ICt9Cj4gPiArCj4gPiAgc3RhdGljIGludCBj YWxsX2FjdGlvbl9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYykKPiA+ICB7Cj4g PiBAQCAtMjgwMyw2ICsyODYyLDcgQEAgc3RhdGljIGludCBjYWxsX2FjdGlvbl9wcmVwYXJlKHN0 cnVjdCBtbWFwX3N0YXRlICptYXAsCj4gPiAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShz dHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAo+ID4gICAgICAgICAgICAgICAgIHN0cnVjdCB2bV9hcmVh X2Rlc2MgKmRlc2MpCj4gPiAgewo+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNj IHByZXZfZGVzYyA9ICpkZXNjOwo+ID4gICAgICAgICBpbnQgZXJyOwo+ID4KPiA+ICAgICAgICAg LyogSW52b2tlIHRoZSBob29rLiAqLwo+ID4gQEAgLTI4MjIsNiArMjg4MiwxMSBAQCBzdGF0aWMg aW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsCj4gPiAgICAgICAg IGlmIChlcnIpCj4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKPiA+Cj4gPiArICAgICAg IC8qIENoZWNrIHRoZSBjYWxsZXIgZGlkIG5vdGhpbmcgY3JhenkuICovCj4gPiArICAgICAgIGVy ciA9IG1tYXBfcHJlcGFyZV92YWxpZGF0ZSgmcHJldl9kZXNjLCBkZXNjKTsKPiA+ICsgICAgICAg aWYgKGVycikKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+ID4gKwo+ID4gICAgICAg ICAvKiBVcGRhdGUgZmllbGRzIHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkLiAqLwo+ID4gICAgICAg ICBtYXAtPnBnb2ZmID0gZGVzYy0+cGdvZmY7Cj4gPiAgICAgICAgIG1hcC0+dm1hX2ZsYWdzID0g ZGVzYy0+dm1hX2ZsYWdzOwo+ID4gQEAgLTM0NTcsMTAgKzM1MjIsMTUgQEAgaW50IF9fdm1fbXVu bWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIGJvb2wgdW5sb2NrKQo+ID4gIGlu dCBpbnNlcnRfdm1fc3RydWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSkKPiA+ICB7Cj4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgY2hhcmdlZCA9IHZt YV9wYWdlcyh2bWEpOwo+ID4gKyAgICAgICBpbnQgZXJyOwo+ID4KPiA+ICAgICAgICAgaWYgKGZp bmRfdm1hX2ludGVyc2VjdGlvbihtbSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpKQo+ID4g ICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ID4KPiA+ICsgICAgICAgZXJyID0gbW1h cF92YWxpZGF0ZV92bWFfZmxhZ3MoJnZtYS0+ZmxhZ3MpOwo+ID4gKyAgICAgICBpZiAoZXJyKQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnI7Cj4gPiArCj4gPiAgICAgICAgIGlmICh2bWFf dGVzdCh2bWEsIFZNQV9BQ0NPVU5UX0JJVCkgJiYKPiA+ICAgICAgICAgICAgICBzZWN1cml0eV92 bV9lbm91Z2hfbWVtb3J5X21tKG1tLCBjaGFyZ2VkKSkKPiA+ICAgICAgICAgICAgICAgICByZXR1 cm4gLUVOT01FTTsKPiA+IGRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oCj4gPiBpbmRl eCBmMTVmYWE4M2YzZDYuLmIyYzNiYzgzMmE0OCAxMDA2NDQKPiA+IC0tLSBhL21tL3ZtYS5oCj4g PiArKysgYi9tbS92bWEuaAo+ID4gQEAgLTc4MiwxNCArNzgyLDE5IEBAIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1fYXJlYV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Cj4gPiAgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bV9hcmVhX2R1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9yaWcp Owo+ID4gIHZvaWQgdm1fYXJlYV9mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKPiA+ Cj4gPiAtLyogdm1hX2V4ZWMuYyAqLwo+ID4gICNpZmRlZiBDT05GSUdfTU1VCj4gPiAraW50IG1t YXBfcHJlcGFyZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpwcmV2X2Rlc2Ms Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2Mg KmRlc2MpOwo+ID4gKwo+ID4gK2ludCBtbWFwX2hvb2tfdmFsaWRhdGUodW5zaWduZWQgbG9uZyBw cmV2X3N0YXJ0LCB1bnNpZ25lZCBsb25nIHByZXZfZW5kLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB2bWFfZmxhZ3NfdCAqcHJldl9mbGFncywKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwo+ID4gKwo+ID4gKy8qIHZt YV9leGVjLmMgKi8KPiA+ICBpbnQgY3JlYXRlX2luaXRfc3RhY2tfdm1hKHN0cnVjdCBtbV9zdHJ1 Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLAo+ID4gICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nICp0b3BfbWVtX3ApOwo+ID4gIGludCByZWxvY2F0ZV92 bWFfZG93bihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzaGlmdCk7 Cj4gPiAtI2VuZGlmCj4gPgo+ID4gLSNpZmRlZiBDT05GSUdfTU1VCj4gPiAgLyoKPiA+ICAgKiBE ZW5pZXMgY3JlYXRpbmcgYSB3cml0YWJsZSBleGVjdXRhYmxlIG1hcHBpbmcgb3IgZ2FpbmluZyBl eGVjdXRhYmxlIHBlcm1pc3Npb25zLgo+ID4gICAqCj4gPiBAQCAtODM4LDYgKzg0MywyMCBAQCBz dGF0aWMgaW5saW5lIGJvb2wgbWFwX2Rlbnlfd3JpdGVfZXhlYyhjb25zdCB2bWFfZmxhZ3NfdCAq b2xkLAo+ID4KPiA+ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4gIH0KPiA+ICsjZWxzZQo+ID4g K3N0YXRpYyBpbmxpbmUgaW50IG1tYXBfcHJlcGFyZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qgdm1f YXJlYV9kZXNjICpwcmV2X2Rlc2MsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYykKPiA+ICt7Cj4gPiArICAg ICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGludCBtbWFwX2hv b2tfdmFsaWRhdGUodW5zaWduZWQgbG9uZyBwcmV2X3N0YXJ0LAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcHJldl9lbmQsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnByZXZfZmxh Z3MsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gPiArewo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiAgI2VuZGlmCj4gPgo+ID4gIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqX19pbnN0YWxsX3Nw ZWNpYWxfbWFwcGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiA+IGRpZmYgLS1naXQgYS90b29s cy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9k dXAuaAo+ID4gaW5kZXggMmZkNDIyNzg5NzE3Li4yOTg2YWU2Y2ExZTUgMTAwNjQ0Cj4gPiAtLS0g YS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCj4gPiArKysgYi90b29scy90ZXN0aW5n L3ZtYS9pbmNsdWRlL2R1cC5oCj4gPiBAQCAtMTM1OSwxMyArMTM1OSwyMyBAQCBzdGF0aWMgaW5s aW5lIGludCB2ZnNfbW1hcF9wcmVwYXJlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJl YV9kZXNjICpkZXNjKQo+ID4gICAgICAgICByZXR1cm4gZmlsZS0+Zl9vcC0+bW1hcF9wcmVwYXJl KGRlc2MpOwo+ID4gIH0KPiA+Cj4gPiAraW50IG1tYXBfcHJlcGFyZV92YWxpZGF0ZShjb25zdCBz dHJ1Y3Qgdm1fYXJlYV9kZXNjICpwcmV2X2Rlc2MsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpOwo+ID4gKwo+ID4gIHN0YXRpYyBp bmxpbmUgaW50IF9fY29tcGF0X3ZtYV9tbWFwKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsCj4g PiAgICAgICAgICAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4gPiAgewo+ID4g KyAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9kZXNjIHByZXZfZGVzYzsKPiA+ICAgICAgICAgaW50IGVy cjsKPiA+Cj4gPiArICAgICAgIC8qIERlcml2ZSBzdGF0ZSBwcmlvciB0byBtbWFwX3ByZXBhcmUg aG9vay4gKi8KPiA+ICsgICAgICAgY29tcGF0X3NldF9kZXNjX2Zyb21fdm1hKCZwcmV2X2Rlc2Ms IGRlc2MtPmZpbGUsIHZtYSk7Cj4gPiAgICAgICAgIC8qIFBlcmZvcm0gYW55IHByZXBhcmF0b3J5 IHRhc2tzIGZvciBtbWFwIGFjdGlvbi4gKi8KPiA+ICAgICAgICAgZXJyID0gbW1hcF9hY3Rpb25f cHJlcGFyZShkZXNjKTsKPiA+ICsgICAgICAgaWYgKGVycikKPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gZXJyOwo+ID4gKyAgICAgICAvKiBDaGVjayB0aGUgY2FsbGVyIGRpZCBub3RoaW5nIGNy YXp5LiAqLwo+ID4gKyAgICAgICBlcnIgPSBtbWFwX3ByZXBhcmVfdmFsaWRhdGUoJnByZXZfZGVz YywgZGVzYyk7Cj4gPiAgICAgICAgIGlmIChlcnIpCj4gPiAgICAgICAgICAgICAgICAgcmV0dXJu IGVycjsKPiA+ICAgICAgICAgLyogVXBkYXRlIHRoZSBWTUEgZnJvbSB0aGUgZGVzY3JpcHRvci4g Ki8KPiA+Cj4gPiAtLQo+ID4gMi41NS4wCj4gPgoKLS0KQ2hlZXJzLCBMb3JlbnpvCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWls aW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==