2022-10-19 07:17:49

by Zhao Mengmeng

[permalink] [raw]
Subject: [PATCH v1] rcu: use hlist_nulls_next_rcu() in hlist_nulls_add_tail_rcu()

From: Zhao Mengmeng <[email protected]>

In commit 8dbd76e79a16 ("tcp/dccp: fix possible race
__inet_lookup_established()"), function hlist_nulls_add_tail_rcu() was
added back, but the local variable *last* is of type hlist_nulls_node,
so use hlist_nulls_next_rcu() instead of hlist_next_rcu().

Signed-off-by: Zhao Mengmeng <[email protected]>
---
include/linux/rculist_nulls.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h
index d8afdb8784c1..ba4c00dd8005 100644
--- a/include/linux/rculist_nulls.h
+++ b/include/linux/rculist_nulls.h
@@ -139,7 +139,7 @@ static inline void hlist_nulls_add_tail_rcu(struct hlist_nulls_node *n,
if (last) {
n->next = last->next;
n->pprev = &last->next;
- rcu_assign_pointer(hlist_next_rcu(last), n);
+ rcu_assign_pointer(hlist_nulls_next_rcu(last), n);
} else {
hlist_nulls_add_head_rcu(n, h);
}
--
2.37.1


2022-10-20 19:45:57

by Paul E. McKenney

[permalink] [raw]
Subject: Re: [PATCH v1] rcu: use hlist_nulls_next_rcu() in hlist_nulls_add_tail_rcu()

On Wed, Oct 19, 2022 at 08:36:50AM -0400, [email protected] wrote:
> From: Zhao Mengmeng <[email protected]>
>
> In commit 8dbd76e79a16 ("tcp/dccp: fix possible race
> __inet_lookup_established()"), function hlist_nulls_add_tail_rcu() was
> added back, but the local variable *last* is of type hlist_nulls_node,
> so use hlist_nulls_next_rcu() instead of hlist_next_rcu().
>
> Signed-off-by: Zhao Mengmeng <[email protected]>

Good eyes!

I have queued this for testing and further review.

Thanx, Paul

> ---
> include/linux/rculist_nulls.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h
> index d8afdb8784c1..ba4c00dd8005 100644
> --- a/include/linux/rculist_nulls.h
> +++ b/include/linux/rculist_nulls.h
> @@ -139,7 +139,7 @@ static inline void hlist_nulls_add_tail_rcu(struct hlist_nulls_node *n,
> if (last) {
> n->next = last->next;
> n->pprev = &last->next;
> - rcu_assign_pointer(hlist_next_rcu(last), n);
> + rcu_assign_pointer(hlist_nulls_next_rcu(last), n);
> } else {
> hlist_nulls_add_head_rcu(n, h);
> }
> --
> 2.37.1
>