Commit f2a90410 authored by Hyunwoo Kim's avatar Hyunwoo Kim Committed by David S. Miller

net: gtp: Fix Use-After-Free in gtp_dellink

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: 94dc550a ("gtp: fix an use-after-free in ipv4_pdp_find()")
Signed-off-by: default avatarHyunwoo Kim <v4bel@theori.io>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 80e679b3
...@@ -1098,11 +1098,12 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev, ...@@ -1098,11 +1098,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) static void gtp_dellink(struct net_device *dev, struct list_head *head)
{ {
struct gtp_dev *gtp = netdev_priv(dev); struct gtp_dev *gtp = netdev_priv(dev);
struct hlist_node *next;
struct pdp_ctx *pctx; struct pdp_ctx *pctx;
int i; int i;
for (i = 0; i < gtp->hash_size; i++) for (i = 0; i < gtp->hash_size; i++)
hlist_for_each_entry_rcu(pctx, &gtp->tid_hash[i], hlist_tid) hlist_for_each_entry_safe(pctx, next, &gtp->tid_hash[i], hlist_tid)
pdp_context_delete(pctx); pdp_context_delete(pctx);
list_del_rcu(&gtp->list); list_del_rcu(&gtp->list);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment