linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate()
@ 2025-04-29  1:47 Liam R. Howlett
  2025-04-29  7:48 ` Hailong Liu
  2025-05-07 15:50 ` Liam R. Howlett
  0 siblings, 2 replies; 8+ messages in thread
From: Liam R. Howlett @ 2025-04-29  1:47 UTC (permalink / raw)
  To: Liam R . Howlett
  Cc: maple-tree, linux-mm, linux-kernel, Zhaoyang Huang, Hailong Liu,
	Lorenzo Stoakes, Suren Baghdasaryan,
	zhangpeng . 00 @ bytedance . com, Steve Kang, Matthew Wilcox,
	Sidhartha Kumar

Temporarily clear the preallocation flag when explicitly requesting
allocations.  Pre-existing allocations are already counted against the
request through mas_node_count_gfp(), but the allocations will not
happen if the MA_STATE_PREALLOC flag is set.  This flag is meant to
avoid re-allocating in bulk allocation mode, and to detect issues with
preallocation calculations.

The MA_STATE_PREALLOC flag should also always be set on zero allocations
so that detection of underflow allocations will print a WARN_ON() during
consumption.

User visible effect of this flaw is a WARN_ON() followed by a null
pointer dereference when subsequent requests for larger number of nodes
is ignored, such as the vma merge retry in mmap_region() caused by
drivers altering the vma flags.

Reported-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
Reported-by: Hailong Liu <hailong.liu@oppo.com>
Fixes: 54a611b605901 ("Maple Tree: add new data structure")
Link: https://lore.kernel.org/all/1652f7eb-a51b-4fee-8058-c73af63bacd1@oppo.com/
Link: https://lore.kernel.org/all/20250428184058.1416274-1-Liam.Howlett@oracle.com/
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Hailong Liu <hailong.liu@oppo.com>
Cc: zhangpeng.00@bytedance.com <zhangpeng.00@bytedance.com>
Cc: Steve Kang <Steve.Kang@unisoc.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
---
 lib/maple_tree.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

Only the MA_STATE_PREALLOC flag needs to be fixed to avoid the vma
iterator issue.  Doing the minimum change here mitigates risk in the
stable kernels.

If this fixes the issue, I'll resend without the RFC and add Stable to
the Cc list.

Thanks again, Hailong for the work on this issue.  Your testcase helped
me narrow the bug down in the end.  I appreciate all the work and
support provided by the Android partners, especially the involvement on
the mailing list!

diff --git a/lib/maple_tree.c b/lib/maple_tree.c
index 4eda949063602..d9975b870dadc 100644
--- a/lib/maple_tree.c
+++ b/lib/maple_tree.c
@@ -5508,7 +5508,7 @@ int mas_preallocate(struct ma_state *mas, void *entry, gfp_t gfp)
 	/* At this point, we are at the leaf node that needs to be altered. */
 	/* Exact fit, no nodes needed. */
 	if (wr_mas.r_min == mas->index && wr_mas.r_max == mas->last)
-		return 0;
+		goto ask_zero;
 
 	mas_wr_end_piv(&wr_mas);
 	node_size = mas_wr_new_end(&wr_mas);
@@ -5517,10 +5517,11 @@ int mas_preallocate(struct ma_state *mas, void *entry, gfp_t gfp)
 	if (node_size == wr_mas.node_end) {
 		/* reuse node */
 		if (!mt_in_rcu(mas->tree))
-			return 0;
+			goto ask_zero;
+
 		/* shifting boundary */
 		if (wr_mas.offset_end - mas->offset == 1)
-			return 0;
+			goto ask_zero;
 	}
 
 	if (node_size >= mt_slots[wr_mas.type]) {
@@ -5539,10 +5540,13 @@ int mas_preallocate(struct ma_state *mas, void *entry, gfp_t gfp)
 
 	/* node store, slot store needs one node */
 ask_now:
+	mas->mas_flags &= ~MA_STATE_PREALLOC;
 	mas_node_count_gfp(mas, request, gfp);
-	mas->mas_flags |= MA_STATE_PREALLOC;
-	if (likely(!mas_is_err(mas)))
+	if (likely(!mas_is_err(mas))) {
+ask_zero:
+		mas->mas_flags |= MA_STATE_PREALLOC;
 		return 0;
+	}
 
 	mas_set_alloc_req(mas, 0);
 	ret = xa_err(mas->node);
-- 
2.47.2



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate()
  2025-04-29  1:47 [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate() Liam R. Howlett
@ 2025-04-29  7:48 ` Hailong Liu
  2025-04-29 15:52   ` Suren Baghdasaryan
  2025-05-07 15:50 ` Liam R. Howlett
  1 sibling, 1 reply; 8+ messages in thread
From: Hailong Liu @ 2025-04-29  7:48 UTC (permalink / raw)
  To: Liam R. Howlett
  Cc: maple-tree, linux-mm, linux-kernel, Zhaoyang Huang,
	Lorenzo Stoakes, Suren Baghdasaryan,
	zhangpeng . 00 @ bytedance . com, Steve Kang, Matthew Wilcox,
	Sidhartha Kumar

On 4/29/2025 9:47 AM, Liam R. Howlett wrote:
> Temporarily clear the preallocation flag when explicitly requesting
> allocations.  Pre-existing allocations are already counted against the
> request through mas_node_count_gfp(), but the allocations will not
> happen if the MA_STATE_PREALLOC flag is set.  This flag is meant to
> avoid re-allocating in bulk allocation mode, and to detect issues with
> preallocation calculations.
> 
> The MA_STATE_PREALLOC flag should also always be set on zero allocations
> so that detection of underflow allocations will print a WARN_ON() during
> consumption.
> 
> User visible effect of this flaw is a WARN_ON() followed by a null
> pointer dereference when subsequent requests for larger number of nodes
> is ignored, such as the vma merge retry in mmap_region() caused by
> drivers altering the vma flags.
> 
> Reported-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
> Reported-by: Hailong Liu <hailong.liu@oppo.com>
> Fixes: 54a611b605901 ("Maple Tree: add new data structure")
> Link: https://lore.kernel.org/all/1652f7eb-a51b-4fee-8058-c73af63bacd1@oppo.com/
> Link: https://lore.kernel.org/all/20250428184058.1416274-1-Liam.Howlett@oracle.com/
> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: Hailong Liu <hailong.liu@oppo.com>
> Cc: zhangpeng.00@bytedance.com <zhangpeng.00@bytedance.com>
> Cc: Steve Kang <Steve.Kang@unisoc.com>
> Cc: Matthew Wilcox <willy@infradead.org>
> Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
> Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
> ---
>  lib/maple_tree.c | 14 +++++++++-----
>  1 file changed, 9 insertions(+), 5 deletions(-)
> 
> Only the MA_STATE_PREALLOC flag needs to be fixed to avoid the vma
> iterator issue.  Doing the minimum change here mitigates risk in the
> stable kernels.
> 
> If this fixes the issue, I'll resend without the RFC and add Stable to
> the Cc list.
> 
> Thanks again, Hailong for the work on this issue.  Your testcase helped
> me narrow the bug down in the end.  I appreciate all the work and
> support provided by the Android partners, especially the involvement on
> the mailing list!
That's my pleasure. I also learned a lot from you :)
> 
> diff --git a/lib/maple_tree.c b/lib/maple_tree.c
> index 4eda949063602..d9975b870dadc 100644
> --- a/lib/maple_tree.c
> +++ b/lib/maple_tree.c
> @@ -5508,7 +5508,7 @@ int mas_preallocate(struct ma_state *mas, void *entry, gfp_t gfp)
>  	/* At this point, we are at the leaf node that needs to be altered. */
>  	/* Exact fit, no nodes needed. */
>  	if (wr_mas.r_min == mas->index && wr_mas.r_max == mas->last)
> -		return 0;
> +		goto ask_zero;
>  
>  	mas_wr_end_piv(&wr_mas);
>  	node_size = mas_wr_new_end(&wr_mas);
> @@ -5517,10 +5517,11 @@ int mas_preallocate(struct ma_state *mas, void *entry, gfp_t gfp)
>  	if (node_size == wr_mas.node_end) {
>  		/* reuse node */
>  		if (!mt_in_rcu(mas->tree))
> -			return 0;
> +			goto ask_zero;
> +
>  		/* shifting boundary */
>  		if (wr_mas.offset_end - mas->offset == 1)
> -			return 0;
> +			goto ask_zero;
>  	}
>  
>  	if (node_size >= mt_slots[wr_mas.type]) {
> @@ -5539,10 +5540,13 @@ int mas_preallocate(struct ma_state *mas, void *entry, gfp_t gfp)
>  
>  	/* node store, slot store needs one node */
>  ask_now:
> +	mas->mas_flags &= ~MA_STATE_PREALLOC;
>  	mas_node_count_gfp(mas, request, gfp);
> -	mas->mas_flags |= MA_STATE_PREALLOC;
> -	if (likely(!mas_is_err(mas)))
> +	if (likely(!mas_is_err(mas))) {
> +ask_zero:
> +		mas->mas_flags |= MA_STATE_PREALLOC;
>  		return 0;
> +	}
>  
>  	mas_set_alloc_req(mas, 0);
>  	ret = xa_err(mas->node);
Passed local test, planned to aging test. 

Brs,
Hailong.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate()
  2025-04-29  7:48 ` Hailong Liu
@ 2025-04-29 15:52   ` Suren Baghdasaryan
  0 siblings, 0 replies; 8+ messages in thread
From: Suren Baghdasaryan @ 2025-04-29 15:52 UTC (permalink / raw)
  To: Hailong Liu
  Cc: Liam R. Howlett, maple-tree, linux-mm, linux-kernel,
	Zhaoyang Huang, Lorenzo Stoakes,
	zhangpeng . 00 @ bytedance . com, Steve Kang, Matthew Wilcox,
	Sidhartha Kumar

On Tue, Apr 29, 2025 at 12:48 AM Hailong Liu <hailong.liu@oppo.com> wrote:
>
> On 4/29/2025 9:47 AM, Liam R. Howlett wrote:
> > Temporarily clear the preallocation flag when explicitly requesting
> > allocations.  Pre-existing allocations are already counted against the
> > request through mas_node_count_gfp(), but the allocations will not
> > happen if the MA_STATE_PREALLOC flag is set.  This flag is meant to
> > avoid re-allocating in bulk allocation mode, and to detect issues with
> > preallocation calculations.
> >
> > The MA_STATE_PREALLOC flag should also always be set on zero allocations
> > so that detection of underflow allocations will print a WARN_ON() during
> > consumption.
> >
> > User visible effect of this flaw is a WARN_ON() followed by a null
> > pointer dereference when subsequent requests for larger number of nodes
> > is ignored, such as the vma merge retry in mmap_region() caused by
> > drivers altering the vma flags.
> >
> > Reported-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
> > Reported-by: Hailong Liu <hailong.liu@oppo.com>
> > Fixes: 54a611b605901 ("Maple Tree: add new data structure")
> > Link: https://lore.kernel.org/all/1652f7eb-a51b-4fee-8058-c73af63bacd1@oppo.com/
> > Link: https://lore.kernel.org/all/20250428184058.1416274-1-Liam.Howlett@oracle.com/
> > Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> > Cc: Suren Baghdasaryan <surenb@google.com>
> > Cc: Hailong Liu <hailong.liu@oppo.com>
> > Cc: zhangpeng.00@bytedance.com <zhangpeng.00@bytedance.com>
> > Cc: Steve Kang <Steve.Kang@unisoc.com>
> > Cc: Matthew Wilcox <willy@infradead.org>
> > Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
> > Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
> > ---
> >  lib/maple_tree.c | 14 +++++++++-----
> >  1 file changed, 9 insertions(+), 5 deletions(-)
> >
> > Only the MA_STATE_PREALLOC flag needs to be fixed to avoid the vma
> > iterator issue.  Doing the minimum change here mitigates risk in the
> > stable kernels.
> >
> > If this fixes the issue, I'll resend without the RFC and add Stable to
> > the Cc list.
> >
> > Thanks again, Hailong for the work on this issue.  Your testcase helped
> > me narrow the bug down in the end.  I appreciate all the work and
> > support provided by the Android partners, especially the involvement on
> > the mailing list!
> That's my pleasure. I also learned a lot from you :)
> >
> > diff --git a/lib/maple_tree.c b/lib/maple_tree.c
> > index 4eda949063602..d9975b870dadc 100644
> > --- a/lib/maple_tree.c
> > +++ b/lib/maple_tree.c
> > @@ -5508,7 +5508,7 @@ int mas_preallocate(struct ma_state *mas, void *entry, gfp_t gfp)
> >       /* At this point, we are at the leaf node that needs to be altered. */
> >       /* Exact fit, no nodes needed. */
> >       if (wr_mas.r_min == mas->index && wr_mas.r_max == mas->last)
> > -             return 0;
> > +             goto ask_zero;
> >
> >       mas_wr_end_piv(&wr_mas);
> >       node_size = mas_wr_new_end(&wr_mas);
> > @@ -5517,10 +5517,11 @@ int mas_preallocate(struct ma_state *mas, void *entry, gfp_t gfp)
> >       if (node_size == wr_mas.node_end) {
> >               /* reuse node */
> >               if (!mt_in_rcu(mas->tree))
> > -                     return 0;
> > +                     goto ask_zero;
> > +
> >               /* shifting boundary */
> >               if (wr_mas.offset_end - mas->offset == 1)
> > -                     return 0;
> > +                     goto ask_zero;
> >       }
> >
> >       if (node_size >= mt_slots[wr_mas.type]) {
> > @@ -5539,10 +5540,13 @@ int mas_preallocate(struct ma_state *mas, void *entry, gfp_t gfp)
> >
> >       /* node store, slot store needs one node */
> >  ask_now:
> > +     mas->mas_flags &= ~MA_STATE_PREALLOC;
> >       mas_node_count_gfp(mas, request, gfp);
> > -     mas->mas_flags |= MA_STATE_PREALLOC;
> > -     if (likely(!mas_is_err(mas)))
> > +     if (likely(!mas_is_err(mas))) {
> > +ask_zero:
> > +             mas->mas_flags |= MA_STATE_PREALLOC;
> >               return 0;
> > +     }
> >
> >       mas_set_alloc_req(mas, 0);
> >       ret = xa_err(mas->node);
> Passed local test, planned to aging test.

I also confirmed the issue is not reproducible with your patch. Thanks!

>
> Brs,
> Hailong.
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate()
  2025-04-29  1:47 [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate() Liam R. Howlett
  2025-04-29  7:48 ` Hailong Liu
@ 2025-05-07 15:50 ` Liam R. Howlett
  2025-05-09 15:27   ` Suren Baghdasaryan
  1 sibling, 1 reply; 8+ messages in thread
From: Liam R. Howlett @ 2025-05-07 15:50 UTC (permalink / raw)
  To: maple-tree, linux-mm, linux-kernel, Zhaoyang Huang, Hailong Liu,
	Lorenzo Stoakes, Suren Baghdasaryan,
	zhangpeng . 00 @ bytedance . com, Steve Kang, Matthew Wilcox,
	Sidhartha Kumar

* Liam R. Howlett <Liam.Howlett@oracle.com> [250428 21:48]:
> Temporarily clear the preallocation flag when explicitly requesting
> allocations.  Pre-existing allocations are already counted against the
> request through mas_node_count_gfp(), but the allocations will not
> happen if the MA_STATE_PREALLOC flag is set.  This flag is meant to
> avoid re-allocating in bulk allocation mode, and to detect issues with
> preallocation calculations.
> 
> The MA_STATE_PREALLOC flag should also always be set on zero allocations
> so that detection of underflow allocations will print a WARN_ON() during
> consumption.
> 
> User visible effect of this flaw is a WARN_ON() followed by a null
> pointer dereference when subsequent requests for larger number of nodes
> is ignored, such as the vma merge retry in mmap_region() caused by
> drivers altering the vma flags.
> 
> Reported-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
> Reported-by: Hailong Liu <hailong.liu@oppo.com>
> Fixes: 54a611b605901 ("Maple Tree: add new data structure")
> Link: https://lore.kernel.org/all/1652f7eb-a51b-4fee-8058-c73af63bacd1@oppo.com/
> Link: https://lore.kernel.org/all/20250428184058.1416274-1-Liam.Howlett@oracle.com/
> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: Hailong Liu <hailong.liu@oppo.com>
> Cc: zhangpeng.00@bytedance.com <zhangpeng.00@bytedance.com>
> Cc: Steve Kang <Steve.Kang@unisoc.com>
> Cc: Matthew Wilcox <willy@infradead.org>
> Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
> Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>

...

I have a version of this for mm-new and I'd like to send it out.  Once
this is upstream, it will be backported to the stable kernels with
something that looks a lot like what I sent out here.

Did this fix the issue in the longer running tests?

Thanks,
Liam


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate()
  2025-05-07 15:50 ` Liam R. Howlett
@ 2025-05-09 15:27   ` Suren Baghdasaryan
  2025-05-09 15:28     ` Suren Baghdasaryan
  2025-05-19  3:24     ` Hailong Liu
  0 siblings, 2 replies; 8+ messages in thread
From: Suren Baghdasaryan @ 2025-05-09 15:27 UTC (permalink / raw)
  To: Liam R. Howlett, maple-tree, linux-mm, linux-kernel,
	Zhaoyang Huang, Hailong Liu, Lorenzo Stoakes, Suren Baghdasaryan,
	zhangpeng . 00 @ bytedance . com, Steve Kang, Matthew Wilcox,
	Sidhartha Kumar

On Wed, May 7, 2025 at 8:50 AM Liam R. Howlett <Liam.Howlett@oracle.com> wrote:
>
> * Liam R. Howlett <Liam.Howlett@oracle.com> [250428 21:48]:
> > Temporarily clear the preallocation flag when explicitly requesting
> > allocations.  Pre-existing allocations are already counted against the
> > request through mas_node_count_gfp(), but the allocations will not
> > happen if the MA_STATE_PREALLOC flag is set.  This flag is meant to
> > avoid re-allocating in bulk allocation mode, and to detect issues with
> > preallocation calculations.
> >
> > The MA_STATE_PREALLOC flag should also always be set on zero allocations
> > so that detection of underflow allocations will print a WARN_ON() during
> > consumption.
> >
> > User visible effect of this flaw is a WARN_ON() followed by a null
> > pointer dereference when subsequent requests for larger number of nodes
> > is ignored, such as the vma merge retry in mmap_region() caused by
> > drivers altering the vma flags.
> >
> > Reported-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
> > Reported-by: Hailong Liu <hailong.liu@oppo.com>
> > Fixes: 54a611b605901 ("Maple Tree: add new data structure")
> > Link: https://lore.kernel.org/all/1652f7eb-a51b-4fee-8058-c73af63bacd1@oppo.com/
> > Link: https://lore.kernel.org/all/20250428184058.1416274-1-Liam.Howlett@oracle.com/
> > Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> > Cc: Suren Baghdasaryan <surenb@google.com>
> > Cc: Hailong Liu <hailong.liu@oppo.com>
> > Cc: zhangpeng.00@bytedance.com <zhangpeng.00@bytedance.com>
> > Cc: Steve Kang <Steve.Kang@unisoc.com>
> > Cc: Matthew Wilcox <willy@infradead.org>
> > Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
> > Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
>
> ...
>
> I have a version of this for mm-new and I'd like to send it out.  Once
> this is upstream, it will be backported to the stable kernels with
> something that looks a lot like what I sent out here.
>
> Did this fix the issue in the longer running tests?

- everyone else

Hi Liam,
I think the delay is due to the holidays in China. I requested an
update from the partners but they will probably provide it next week.
Thanks,
Suren.

>
> Thanks,
> Liam


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate()
  2025-05-09 15:27   ` Suren Baghdasaryan
@ 2025-05-09 15:28     ` Suren Baghdasaryan
  2025-05-19  3:24     ` Hailong Liu
  1 sibling, 0 replies; 8+ messages in thread
From: Suren Baghdasaryan @ 2025-05-09 15:28 UTC (permalink / raw)
  To: Liam R. Howlett, maple-tree, linux-mm, linux-kernel,
	Zhaoyang Huang, Hailong Liu, Lorenzo Stoakes, Suren Baghdasaryan,
	zhangpeng . 00 @ bytedance . com, Steve Kang, Matthew Wilcox,
	Sidhartha Kumar

On Fri, May 9, 2025 at 8:27 AM Suren Baghdasaryan <surenb@google.com> wrote:
>
> On Wed, May 7, 2025 at 8:50 AM Liam R. Howlett <Liam.Howlett@oracle.com> wrote:
> >
> > * Liam R. Howlett <Liam.Howlett@oracle.com> [250428 21:48]:
> > > Temporarily clear the preallocation flag when explicitly requesting
> > > allocations.  Pre-existing allocations are already counted against the
> > > request through mas_node_count_gfp(), but the allocations will not
> > > happen if the MA_STATE_PREALLOC flag is set.  This flag is meant to
> > > avoid re-allocating in bulk allocation mode, and to detect issues with
> > > preallocation calculations.
> > >
> > > The MA_STATE_PREALLOC flag should also always be set on zero allocations
> > > so that detection of underflow allocations will print a WARN_ON() during
> > > consumption.
> > >
> > > User visible effect of this flaw is a WARN_ON() followed by a null
> > > pointer dereference when subsequent requests for larger number of nodes
> > > is ignored, such as the vma merge retry in mmap_region() caused by
> > > drivers altering the vma flags.
> > >
> > > Reported-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
> > > Reported-by: Hailong Liu <hailong.liu@oppo.com>
> > > Fixes: 54a611b605901 ("Maple Tree: add new data structure")
> > > Link: https://lore.kernel.org/all/1652f7eb-a51b-4fee-8058-c73af63bacd1@oppo.com/
> > > Link: https://lore.kernel.org/all/20250428184058.1416274-1-Liam.Howlett@oracle.com/
> > > Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> > > Cc: Suren Baghdasaryan <surenb@google.com>
> > > Cc: Hailong Liu <hailong.liu@oppo.com>
> > > Cc: zhangpeng.00@bytedance.com <zhangpeng.00@bytedance.com>
> > > Cc: Steve Kang <Steve.Kang@unisoc.com>
> > > Cc: Matthew Wilcox <willy@infradead.org>
> > > Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
> > > Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
> >
> > ...
> >
> > I have a version of this for mm-new and I'd like to send it out.  Once
> > this is upstream, it will be backported to the stable kernels with
> > something that looks a lot like what I sent out here.
> >
> > Did this fix the issue in the longer running tests?
>
> - everyone else

and of course I forgot to remove everyone else :) Sorry for the spam.

>
> Hi Liam,
> I think the delay is due to the holidays in China. I requested an
> update from the partners but they will probably provide it next week.
> Thanks,
> Suren.
>
> >
> > Thanks,
> > Liam


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate()
  2025-05-09 15:27   ` Suren Baghdasaryan
  2025-05-09 15:28     ` Suren Baghdasaryan
@ 2025-05-19  3:24     ` Hailong Liu
  2025-05-19 18:24       ` Suren Baghdasaryan
  1 sibling, 1 reply; 8+ messages in thread
From: Hailong Liu @ 2025-05-19  3:24 UTC (permalink / raw)
  To: Suren Baghdasaryan, Liam R. Howlett, maple-tree, linux-mm,
	linux-kernel, Zhaoyang Huang, Lorenzo Stoakes,
	zhangpeng . 00 @ bytedance . com, Steve Kang, Matthew Wilcox,
	Sidhartha Kumar



On 5/9/2025 11:27 PM, Suren Baghdasaryan wrote:
> On Wed, May 7, 2025 at 8:50 AM Liam R. Howlett <Liam.Howlett@oracle.com> wrote:
>>
>> * Liam R. Howlett <Liam.Howlett@oracle.com> [250428 21:48]:
>>> Temporarily clear the preallocation flag when explicitly requesting
>>> allocations.  Pre-existing allocations are already counted against the
>>> request through mas_node_count_gfp(), but the allocations will not
>>> happen if the MA_STATE_PREALLOC flag is set.  This flag is meant to
>>> avoid re-allocating in bulk allocation mode, and to detect issues with
>>> preallocation calculations.
>>>
>>> The MA_STATE_PREALLOC flag should also always be set on zero allocations
>>> so that detection of underflow allocations will print a WARN_ON() during
>>> consumption.
>>>
>>> User visible effect of this flaw is a WARN_ON() followed by a null
>>> pointer dereference when subsequent requests for larger number of nodes
>>> is ignored, such as the vma merge retry in mmap_region() caused by
>>> drivers altering the vma flags.
>>>
>>> Reported-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
>>> Reported-by: Hailong Liu <hailong.liu@oppo.com>
>>> Fixes: 54a611b605901 ("Maple Tree: add new data structure")
>>> Link: https://lore.kernel.org/all/1652f7eb-a51b-4fee-8058-c73af63bacd1@oppo.com/
>>> Link: https://lore.kernel.org/all/20250428184058.1416274-1-Liam.Howlett@oracle.com/
>>> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
>>> Cc: Suren Baghdasaryan <surenb@google.com>
>>> Cc: Hailong Liu <hailong.liu@oppo.com>
>>> Cc: zhangpeng.00@bytedance.com <zhangpeng.00@bytedance.com>
>>> Cc: Steve Kang <Steve.Kang@unisoc.com>
>>> Cc: Matthew Wilcox <willy@infradead.org>
>>> Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
>>> Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
>>
>> ...
>>
>> I have a version of this for mm-new and I'd like to send it out.  Once
>> this is upstream, it will be backported to the stable kernels with
>> something that looks a lot like what I sent out here.
>>
>> Did this fix the issue in the longer running tests?
> 
> - everyone else
> 
> Hi Liam,
> I think the delay is due to the holidays in China. I requested an
> update from the partners but they will probably provide it next week.
Sorry for late reply. We applied this patch and verified it fix the issue.

Feel free to add

Tested-by: Hailong Liu <hailong.liu@oppo.com>

Thanks,
Hailong.

> Thanks,
> Suren.
> 
>>
>> Thanks,
>> Liam



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate()
  2025-05-19  3:24     ` Hailong Liu
@ 2025-05-19 18:24       ` Suren Baghdasaryan
  0 siblings, 0 replies; 8+ messages in thread
From: Suren Baghdasaryan @ 2025-05-19 18:24 UTC (permalink / raw)
  To: Hailong Liu
  Cc: Liam R. Howlett, maple-tree, linux-mm, linux-kernel,
	Zhaoyang Huang, Lorenzo Stoakes,
	zhangpeng . 00 @ bytedance . com, Steve Kang, Matthew Wilcox,
	Sidhartha Kumar

On Sun, May 18, 2025 at 8:24 PM Hailong Liu <hailong.liu@oppo.com> wrote:
>
>
>
> On 5/9/2025 11:27 PM, Suren Baghdasaryan wrote:
> > On Wed, May 7, 2025 at 8:50 AM Liam R. Howlett <Liam.Howlett@oracle.com> wrote:
> >>
> >> * Liam R. Howlett <Liam.Howlett@oracle.com> [250428 21:48]:
> >>> Temporarily clear the preallocation flag when explicitly requesting
> >>> allocations.  Pre-existing allocations are already counted against the
> >>> request through mas_node_count_gfp(), but the allocations will not
> >>> happen if the MA_STATE_PREALLOC flag is set.  This flag is meant to
> >>> avoid re-allocating in bulk allocation mode, and to detect issues with
> >>> preallocation calculations.
> >>>
> >>> The MA_STATE_PREALLOC flag should also always be set on zero allocations
> >>> so that detection of underflow allocations will print a WARN_ON() during
> >>> consumption.
> >>>
> >>> User visible effect of this flaw is a WARN_ON() followed by a null
> >>> pointer dereference when subsequent requests for larger number of nodes
> >>> is ignored, such as the vma merge retry in mmap_region() caused by
> >>> drivers altering the vma flags.
> >>>
> >>> Reported-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
> >>> Reported-by: Hailong Liu <hailong.liu@oppo.com>
> >>> Fixes: 54a611b605901 ("Maple Tree: add new data structure")
> >>> Link: https://lore.kernel.org/all/1652f7eb-a51b-4fee-8058-c73af63bacd1@oppo.com/
> >>> Link: https://lore.kernel.org/all/20250428184058.1416274-1-Liam.Howlett@oracle.com/
> >>> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> >>> Cc: Suren Baghdasaryan <surenb@google.com>
> >>> Cc: Hailong Liu <hailong.liu@oppo.com>
> >>> Cc: zhangpeng.00@bytedance.com <zhangpeng.00@bytedance.com>
> >>> Cc: Steve Kang <Steve.Kang@unisoc.com>
> >>> Cc: Matthew Wilcox <willy@infradead.org>
> >>> Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
> >>> Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
> >>
> >> ...
> >>
> >> I have a version of this for mm-new and I'd like to send it out.  Once
> >> this is upstream, it will be backported to the stable kernels with
> >> something that looks a lot like what I sent out here.
> >>
> >> Did this fix the issue in the longer running tests?
> >
> > - everyone else
> >
> > Hi Liam,
> > I think the delay is due to the holidays in China. I requested an
> > update from the partners but they will probably provide it next week.
> Sorry for late reply. We applied this patch and verified it fix the issue.
>
> Feel free to add
>
> Tested-by: Hailong Liu <hailong.liu@oppo.com>

Thanks! Once Liam posts the official fix I'll apply it to the Android
6.6 branch.

>
> Thanks,
> Hailong.
>
> > Thanks,
> > Suren.
> >
> >>
> >> Thanks,
> >> Liam
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-05-19 18:24 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-29  1:47 [RFC PATCH v6.6] maple_tree: Fix MA_STATE_PREALLOC flag in mas_preallocate() Liam R. Howlett
2025-04-29  7:48 ` Hailong Liu
2025-04-29 15:52   ` Suren Baghdasaryan
2025-05-07 15:50 ` Liam R. Howlett
2025-05-09 15:27   ` Suren Baghdasaryan
2025-05-09 15:28     ` Suren Baghdasaryan
2025-05-19  3:24     ` Hailong Liu
2025-05-19 18:24       ` Suren Baghdasaryan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox