From: Jakub Kicinski <kuba@kernel.org>
To: "Jason A. Donenfeld" <Jason@zx2c4.com>, edumazet@google.com
Cc: syzbot <syzbot+c2775460db0e1c70018e@syzkaller.appspotmail.com>,
netdev@vger.kernel.org, syzkaller-bugs@googlegroups.com,
davem@davemloft.net, linux-kernel@vger.kernel.org,
pabeni@redhat.com, wireguard@lists.zx2c4.com, jann@thejh.net
Subject: Re: [syzbot] [wireguard?] KASAN: slab-use-after-free Write in enqueue_timer
Date: Tue, 23 May 2023 09:05:12 -0700 [thread overview]
Message-ID: <20230523090512.19ca60b6@kernel.org> (raw)
In-Reply-To: <ZGzfzEs-vJcZAySI@zx2c4.com>
On Tue, 23 May 2023 17:46:20 +0200 Jason A. Donenfeld wrote:
> > Freed by task 41:
> > __kmem_cache_free+0x264/0x3c0 mm/slub.c:3799
> > device_release+0x95/0x1c0
> > kobject_cleanup lib/kobject.c:683 [inline]
> > kobject_release lib/kobject.c:714 [inline]
> > kref_put include/linux/kref.h:65 [inline]
> > kobject_put+0x228/0x470 lib/kobject.c:731
> > netdev_run_todo+0xe5a/0xf50 net/core/dev.c:10400
>
> So that means the memory in question is actually the one that's
> allocated and freed by the networking stack. Specifically, dev.c:10626
> is allocating a struct net_device with a trailing struct wg_device (its
> priv_data). However, wg_device does not have any struct timer_lists in
> it, and I don't see how net_device's watchdog_timer would be related to
> the stacktrace which is clearly operating over a wg_peer timer.
>
> So what on earth is going on here?
Your timer had the pleasure of getting queued _after_ a dead watchdog
timer, no? IOW it tries to update the ->next pointer of a queued
watchdog timer. We should probably do:
diff --git a/net/core/dev.c b/net/core/dev.c
index 374d38fb8b9d..f3ed20ebcf5a 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -10389,6 +10389,8 @@ void netdev_run_todo(void)
WARN_ON(rcu_access_pointer(dev->ip_ptr));
WARN_ON(rcu_access_pointer(dev->ip6_ptr));
+ WARN_ON(timer_shutdown_sync(&dev->watchdog_timer));
+
if (dev->priv_destructor)
dev->priv_destructor(dev);
if (dev->needs_free_netdev)
to catch how that watchdog_timer is getting queued. Would that make
sense, Eric?
next prev parent reply other threads:[~2023-05-23 16:05 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-30 18:01 [syzbot] [wireguard?] KASAN: slab-use-after-free Write in enqueue_timer syzbot
2023-05-23 15:46 ` Jason A. Donenfeld
2023-05-23 16:05 ` Jakub Kicinski [this message]
2023-05-23 16:12 ` Eric Dumazet
2023-05-23 16:41 ` Jakub Kicinski
2023-05-23 16:42 ` Jason A. Donenfeld
2023-05-23 16:47 ` Jakub Kicinski
2023-05-23 17:01 ` Jason A. Donenfeld
2023-05-23 17:05 ` Eric Dumazet
2023-05-23 17:07 ` Eric Dumazet
2023-05-24 8:24 ` Dmitry Vyukov
2023-05-24 15:33 ` Jakub Kicinski
2023-05-24 15:39 ` Jakub Kicinski
2023-05-23 16:14 ` Jason A. Donenfeld
2023-05-23 16:46 ` Jakub Kicinski
2023-05-23 16:47 ` Jason A. Donenfeld
2023-05-23 17:16 ` Jason A. Donenfeld
2023-05-23 17:28 ` Jason A. Donenfeld
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230523090512.19ca60b6@kernel.org \
--to=kuba@kernel.org \
--cc=Jason@zx2c4.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jann@thejh.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=syzbot+c2775460db0e1c70018e@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
--cc=wireguard@lists.zx2c4.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.