Linux cryptographic layer development
 help / color / mirror / Atom feed
* Re: [PATCH 4/4] rhashtable: fix vmalloc() deadlock in atomic rehash
       [not found] ` <20261028154218.1668182-5-liam@infradead.org>
@ 2026-10-29  2:16   ` Herbert Xu
  2026-10-29 10:08     ` Uladzislau Rezki
  0 siblings, 1 reply; 2+ messages in thread
From: Herbert Xu @ 2026-10-29  2:16 UTC (permalink / raw)
  To: Liam R. Howlett (Google), Uladzislau Rezki, Michal Hocko,
	Baoquan He, Alexander Potapenko, Andrey Ryabinin, Marco Elver,
	Michal Hocko, Linux Crypto Mailing List
  Cc: Andrew Morton, Thomas Graf, linux-mm, linux-kernel, maple-tree,
	Lorenzo Stoakes, Chris Mason, Alice Ryhl, Andrew Ballance, stable,
	David Hildenbrand (Arm)

On Wed, Oct 28, 2026 at 11:42:18AM -0400, Liam R. Howlett (Google) wrote:
>
> Below, one CPU adds an FDB entry for an RTM_NEWNEIGH netlink request,
> while another CPU is inside vmalloc() or vfree():
> 
>     RTM_NEWNEIGH                      vmalloc() or vfree()
>     ============                      ====================
>     spin_lock_bh(&br->hash_lock)
>                                       spin_lock(&vn->busy.lock)
>     rhashtable_insert_rehash()
>       kvmalloc(GFP_ATOMIC)
>         vmalloc()
>           spin_lock(&vn->busy.lock)
>             waits for the other CPU
>                                       softirq: a frame for the bridge
>                                         spin_lock(&br->hash_lock)
>                                           waits for RTM_NEWNEIGH

I think this is a fundamental bug in the kvmalloc non-blocking
support patch.  How can it be used at all if it is susceptible
to such dead-locks?

And if you can't use it safely why don't we just get rid of the
broken kvmalloc non-block path and have it always go to kmalloc
like it did before?
 
> Fixes: c6307674ed82 ("mm: kvmalloc: add non-blocking support for vmalloc")

BTW, rhashtable patches should be sent to linux-crypto.

Thanks,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 4/4] rhashtable: fix vmalloc() deadlock in atomic rehash
  2026-10-29  2:16   ` [PATCH 4/4] rhashtable: fix vmalloc() deadlock in atomic rehash Herbert Xu
@ 2026-10-29 10:08     ` Uladzislau Rezki
  0 siblings, 0 replies; 2+ messages in thread
From: Uladzislau Rezki @ 2026-10-29 10:08 UTC (permalink / raw)
  To: Herbert Xu
  Cc: Liam R. Howlett (Google), Uladzislau Rezki, Michal Hocko,
	Baoquan He, Alexander Potapenko, Andrey Ryabinin, Marco Elver,
	Michal Hocko, Linux Crypto Mailing List, Andrew Morton,
	Thomas Graf, linux-mm, linux-kernel, maple-tree, Lorenzo Stoakes,
	Chris Mason, Alice Ryhl, Andrew Ballance, stable,
	David Hildenbrand (Arm)

On Thu, Oct 29, 2026 at 10:16:36AM +0800, Herbert Xu wrote:
> On Wed, Oct 28, 2026 at 11:42:18AM -0400, Liam R. Howlett (Google) wrote:
> >
> > Below, one CPU adds an FDB entry for an RTM_NEWNEIGH netlink request,
> > while another CPU is inside vmalloc() or vfree():
> > 
> >     RTM_NEWNEIGH                      vmalloc() or vfree()
> >     ============                      ====================
> >     spin_lock_bh(&br->hash_lock)
> >                                       spin_lock(&vn->busy.lock)
> >     rhashtable_insert_rehash()
> >       kvmalloc(GFP_ATOMIC)
> >         vmalloc()
> >           spin_lock(&vn->busy.lock)
> >             waits for the other CPU
> >                                       softirq: a frame for the bridge
> >                                         spin_lock(&br->hash_lock)
> >                                           waits for RTM_NEWNEIGH
> 
> I think this is a fundamental bug in the kvmalloc non-blocking
> support patch.  How can it be used at all if it is susceptible
> to such dead-locks?
> 
> And if you can't use it safely why don't we just get rid of the
> broken kvmalloc non-block path and have it always go to kmalloc
> like it did before?
>  
If we have a look at this as we did not have vmalloc() here:


     RTM_NEWNEIGH                      foo() or ...
     ============                      ====================
     lock_bh(&br->hash_lock)
                                       foo()
                                        lock(B)
     rhashtable_insert_rehash()
         foo()
           lock(B)
             waits for the other CPU
                                       softirq: a frame for the bridge
                                         lock(&br->hash_lock)
                                           waits for RTM_NEWNEIGH

Same issue?

I have a question:

GFP_ATOMIC/GFP_NOWAIT guarantee they do not sleep. Do they guarantee
not hitting ABBA dead-locks or they are not interrupted?

--
Uladzislau Rezki

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-10-29 10:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20261028154218.1668182-1-liam@infradead.org>
     [not found] ` <20261028154218.1668182-5-liam@infradead.org>
2026-10-29  2:16   ` [PATCH 4/4] rhashtable: fix vmalloc() deadlock in atomic rehash Herbert Xu
2026-10-29 10:08     ` Uladzislau Rezki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox