Re: [PATCH nf-next 3/9] netfilter: nft_set_pipapo: prepare destroy function for on-demand clone

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 9 Apr 2024 15:04:02 +0200
Florian Westphal <fw@xxxxxxxxx> wrote:

> Stefano Brivio <sbrivio@xxxxxxxxxx> wrote:
> > > I do not follow.  nft_pipapo_destroy() is not invoked asynchronously via
> > > call_rcu, its invoked from either abort path or the gc work queue at at
> > > time where there must be no references to nft_set anymore.  
> > 
> > Hmm, sorry, I was all focused on nft_set_pipapo_match_destroy()
> > accessing nft_set, but that has nothing to do with
> > pipapo_reclaim_match(). However:
> >   
> > > What do we wait for, i.e., which outstanding rcu callback could
> > > reference a data structure that nft_pipapo_destroy() will free?  
> > 
> > ...we still have pipapo_free_match(), called by pipapo_reclaim_match(),
> > referencing the per-CPU scratch areas, and nft_pipapo_destroy() freeing
> > them (using pipapo_free_match() since this patch).  
> 
> But those scratchmaps are anchored in struct nft_pipapo_match.
> 
> So, if we have a call_rcu() for struct nft_pipapo_match $m, and then
> get into nft_pipapo_destroy() where priv->match == $m or
> priv->clone == $m we are already in trouble ($m is free'd twice).

Ah, sure, you're right, they can't be the same instance.

> If not, then I don't see why ordering would matter.
> 
> Can you sketch a race where pipapo_reclaim_match, running from a
> (severely delayed) call_rcu, will access something that has been
> released already?
> 
> I can't spot anything.

Me neither. Sorry for the noise. For the series,

Reviewed-by: Stefano Brivio <sbrivio@xxxxxxxxxx>

-- 
Stefano





[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux