RE: [PATCH net v2 0/3] net/sched: u32_change() fixes

"Jagielski, Jedrzej" <[email protected]>
Newsgroups gmane.linux.network
Message-ID <PH0PR11MB5902885C0E23D5DEED9011C6F0A62@PH0PR11MB5902.namprd11.prod.outlook.com>
>From: Kitszel, Przemyslaw <[email protected]> 
>Sent: Monday, August 17, 2026 2:43 PM
>
>On 8/13/26 14:22, Jedrzej Jagielski wrote:
>> sorry for spam, previous series get treated as incomplete so resending
>> 
>> ALREADY ON NETDEV, SASHIKO RUN
>
>hehe
>ofc, the above does no harm here

:D

>
>for the series:
>Reviewed-by: Przemek Kitszel <[email protected]>
>
>--
>
>Sashiko has found one more *preexisting* bug, perhaps it could be
>handled by one more fix in future series?:
>https://sashiko.dev/#/patchset/20260813122242.1690024-1-jedrzej.jagielski%40intel.com

yeah, i saw that and i thought about extending the series 

>
> > @@ -938,14 +938,6 @@ static int u32_change(struct net *net, struct 
>sk_buff *in_skb,
> >  		err = u32_replace_hw_knode(tp, new, userflags, extack);
> >  		if (err) {
> >  			u32_unbind_filter(tp, new, tb);
> > -
> > -			if (tb[TCA_U32_LINK]) {
> > -				struct tc_u_hnode *ht_old;
> > -
> > -				ht_old = rtnl_dereference(n->ht_down);
> > -				if (ht_old)
> > -					refcount_inc(&ht_old->refcnt);
> > -			}
> >  			__u32_destroy_key(new);
> >  			return err;
> >  		}
>This isn't a bug introduced by this patch, but looking at u32_change(), 
>there
>appears to be a pre-existing issue with how manual hash table handles are
>tracked in the IDR.
>When a user creates a u32 hash table with a manual handle (for example,
>0x80100000), u32_change() inserts the full handle directly into
>tp_c->handle_idr:
>net/sched/cls_u32.c:u32_change() {
>     ...
>		} else {
>			err = idr_alloc_u32(&tp_c->handle_idr, ht, &handle,
>					    handle, GFP_KERNEL);
>     ...
>}
>However, when destroying the node later, u32_destroy_hnode() removes the
>mapped ID rather than the full handle:
>net/sched/cls_u32.c:u32_destroy_hnode() {
>     ...
>		idr_remove(&tp_c->handle_idr, handle2id(ht->handle));
>     ...
>}
>For a handle like 0x80100000, handle2id() returns 1. Does this mean the IDR
>entry at 0x80100000 is permanently leaked, while index 1 is erroneously 
>freed?
>If index 1 is already in use by an active auto-generated hash table, could
>freeing it here allow gen_new_htid() to issue the same handle again to a new
>hash table, causing collisions?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.