From 270701f0a72eee0b402e6901bbe7cc1d9ca9cc82 Mon Sep 17 00:00:00 2001 From: Hyunwoo Kim Date: Thu, 16 May 2024 08:13:18 +0000 Subject: [PATCH] net: gtp: Fix Use-After-Free in gtp_dellink stable inclusion from stable-v4.19.313 commit 07b20d0a3dc13fb1adff10b60021a4924498da58 category: bugfix bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9O0MU CVE: CVE-2024-27396 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=07b20d0a3dc1 -------------------------------- [ Upstream commit f2a904107ee2b647bb7794a1a82b67740d7c8a64 ] Since call_rcu, which is called in the hlist_for_each_entry_rcu traversal of gtp_dellink, is not part of the RCU read critical section, it is possible that the RCU grace period will pass during the traversal and the key will be free. To prevent this, it should be changed to hlist_for_each_entry_safe. Fixes: 94dc550a5062 ("gtp: fix an use-after-free in ipv4_pdp_find()") Signed-off-by: Hyunwoo Kim Reviewed-by: Eric Dumazet Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Signed-off-by: Pu Lehui --- drivers/net/gtp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c index 7e950980ba73..64c7d64aa23d 100644 --- a/drivers/net/gtp.c +++ b/drivers/net/gtp.c @@ -707,11 +707,12 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev, static void gtp_dellink(struct net_device *dev, struct list_head *head) { struct gtp_dev *gtp = netdev_priv(dev); + struct hlist_node *next; struct pdp_ctx *pctx; int i; for (i = 0; i < gtp->hash_size; i++) - hlist_for_each_entry_rcu(pctx, >p->tid_hash[i], hlist_tid) + hlist_for_each_entry_safe(pctx, next, >p->tid_hash[i], hlist_tid) pdp_context_delete(pctx); gtp_encap_disable(gtp); -- Gitee