On Mon, Mar 14, 2022 at 10:52:20AM +0100, Tobias Waldekranz wrote: > +int br_mst_fill_info(struct sk_buff *skb, struct net_bridge_vlan_group *vg) > +{ > + struct net_bridge_vlan *v; > + struct nlattr *nest; > + unsigned long *seen; > + int err = 0; > + > + seen = bitmap_zalloc(VLAN_N_VID, 0); I see there is precedent in the bridge driver for using dynamic allocation as opposed to on-stack declaration using DECLARE_BITMAP(). I imagine this isn't just to be "heapsters", but why? I don't have a very good sense of how much on-stack memory is too much (a lot probably depends on the expected depth of the call stack too, and here it doesn't appear to be too deep), but I see that mlxsw_sp_bridge_vxlan_vlan_is_valid() has a DECLARE_BITMAP(vlans, VLAN_N_VID) too. The comment applies for callers of br_mst_get_info() too. > + if (!seen) > + return -ENOMEM; > + > + list_for_each_entry(v, &vg->vlan_list, vlist) { > + if (test_bit(v->brvlan->msti, seen)) > + continue; > + > + nest = nla_nest_start_noflag(skb, IFLA_BRIDGE_MST_ENTRY); > + if (!nest || > + nla_put_u16(skb, IFLA_BRIDGE_MST_ENTRY_MSTI, v->brvlan->msti) || > + nla_put_u8(skb, IFLA_BRIDGE_MST_ENTRY_STATE, v->state)) { > + err = -EMSGSIZE; > + break; > + } > + nla_nest_end(skb, nest); > + > + set_bit(v->brvlan->msti, seen); > + } > + > + kfree(seen); > + return err; > +}