From: Florian Westphal <fw@strlen.de>
To: Suren Baghdasaryan <surenb@google.com>
Cc: Florian Westphal <fw@strlen.de>,
Ben Greear <greearb@candelatech.com>,
netdev <netdev@vger.kernel.org>,
kent.overstreet@linux.dev, pablo@netfilter.org
Subject: Re: nf-nat-core: allocated memory at module unload.
Date: Mon, 7 Oct 2024 13:29:04 +0200 [thread overview]
Message-ID: <20241007112904.GA27104@breakpoint.cc> (raw)
In-Reply-To: <CAJuCfpGyPNBQ=MTMeXzNZJcoiqok+zuW-3Ti0tFS7drhMFq1iQ@mail.gmail.com>
Suren Baghdasaryan <surenb@google.com> wrote:
> On Tue, Oct 1, 2024 at 12:36 PM Florian Westphal <fw@strlen.de> wrote:
> >
> > Ben Greear <greearb@candelatech.com> wrote:
> >
> > [ CCing codetag folks ]
>
> Thanks! I've been on vacation and just saw this report.
>
> >
> > > Hello,
> > >
> > > I see this splat in 6.11.0 (plus a single patch to fix vrf xmit deadlock).
> > >
> > > Is this a known issue? Is it a serious problem?
> >
> > Not known to me. Looks like an mm (rcu)+codetag problem.
> >
> > > ------------[ cut here ]------------
> > > net/netfilter/nf_nat_core.c:1114 module nf_nat func:nf_nat_register_fn has 256 allocated at module unload
> > > WARNING: CPU: 1 PID: 10421 at lib/alloc_tag.c:168 alloc_tag_module_unload+0x22b/0x3f0
> > > Modules linked in: nf_nat(-) btrfs ufs qnx4 hfsplus hfs minix vfat msdos fat
> > ...
> > > Hardware name: Default string Default string/SKYBAY, BIOS 5.12 08/04/2020
> > > RIP: 0010:alloc_tag_module_unload+0x22b/0x3f0
> > > codetag_unload_module+0x19b/0x2a0
> > > ? codetag_load_module+0x80/0x80
> > > ? up_write+0x4f0/0x4f0
> >
> > "Well, yes, but actually no."
> >
> > At this time, kfree_rcu() has been called on all 4 objects.
> >
> > Looks like kfree_rcu no longer cares even about rcu_barrier(), and
> > there is no kvfree_rcu_barrier() in 6.11.
> >
> > The warning goes away when I replace kfree_rcu with call_rcu+kfree
> > plus rcu_barrier in module exit path.
> >
> > But I don't think its the right thing to do.
> >
> > (referring to nf_nat_unregister_fn(), kfree_rcu(priv, rcu_head);).
> >
> > Reproducer:
> > unshare -n iptables-nft -t nat -A PREROUTING -p tcp
> > grep nf_nat /proc/allocinfo # will list 4 allocations
> > rmmod nft_chain_nat
> > rmmod nf_nat # will WARN.
> >
> > Without rmmod, the 4 allocations go away after a few seconds,
> > grep will no longer list them and then rmmod won't splat.
>
> I see. So, the kfree_rcu() was already called but freeing did not
> happen yet, in the meantime we are unloading the module.
Yes.
> We could add
> a synchronize_rcu() at the beginning of codetag_unload_module() so
> that all pending kfree_rcu()s complete before we check codetag
> counters:
>
> bool codetag_unload_module(struct module *mod)
> {
> struct codetag_type *cttype;
> bool unload_ok = true;
>
> if (!mod)
> return true;
>
> + synchronize_rcu();
> mutex_lock(&codetag_lock);
This doesn't help as kfree_rcu doesn't wait for this.
Use of kvfree_rcu_barrier() instead does work though.
next prev parent reply other threads:[~2024-10-07 11:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-01 13:06 nf-nat-core: allocated memory at module unload Ben Greear
2024-10-01 19:36 ` Florian Westphal
2024-10-04 23:13 ` Suren Baghdasaryan
2024-10-07 11:29 ` Florian Westphal [this message]
2024-10-07 15:10 ` Suren Baghdasaryan
2024-10-09 18:20 ` Ben Greear
2024-10-09 18:23 ` Suren Baghdasaryan
2024-10-09 18:28 ` Ben Greear
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=20241007112904.GA27104@breakpoint.cc \
--to=fw@strlen.de \
--cc=greearb@candelatech.com \
--cc=kent.overstreet@linux.dev \
--cc=netdev@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=surenb@google.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.