Subject: Re: [syzbot] [net?] KASAN: slab-use-after-free Write in l2tp_session_delete

From: Tom Parkin <[email-masked]>
Date: Wed, 3 Jul 2024 10:46:50 +0100

On  Tue, Jun 25, 2024 at 06:25:23 -0700, syzbot wrote:
> syzbot found the following issue on:
> 
> HEAD commit:    185d72112b95 net: xilinx: axienet: Enable multicast by def..
> git tree:       net-next
> C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=1062bd46980000

#syz test https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git  185d72112b95

--- a/net/l2tp/l2tp_core.c
+++ b/net/l2tp/l2tp_core.c
@@ -1290,13 +1290,14 @@ static void l2tp_session_unhash(struct l2tp_session *session)
 static void l2tp_tunnel_closeall(struct l2tp_tunnel *tunnel)
 {
    struct l2tp_session *session;
-   struct list_head *pos;
-   struct list_head *tmp;

    spin_lock_bh(&tunnel->list_lock);
    tunnel->acpt_newsess = false;
-   list_for_each_safe(pos, tmp, &tunnel->session_list) {
-       session = list_entry(pos, struct l2tp_session, list);
+   for (;;) {
+       session = list_first_entry_or_null(&tunnel->session_list,
+                          struct l2tp_session, list);
+       if (!session)
+           break;
        list_del_init(&session->list);
        spin_unlock_bh(&tunnel->list_lock);
        l2tp_session_delete(session);