On Tue, 06 Oct 2020 17:10:44 +0200 Johannes Berg wrote: > Sorry, hat to run out earlier and forgot to comment here. > > On Tue, 2020-10-06 at 14:32 +0200, Johannes Berg wrote: > > > > + /* the max policy content is currently ~44 bytes for range min/max */ > > + if (err && nlk_has_extack && extack && extack->policy) > > + tlvlen += 64; > > So I'm not really happy with this. I counted 44 bytes content (so 48 > bytes for the nested attribute) for the biggest that we have now, but if > we ever implement e.g. dumping out the reject string for NLA_REJECT > (though not sure anyone even uses that?) then it'd be more variable.
I wonder if we should in fact dump the reject string, in this case it feels like an omission not to have it... although as you say, grep for reject_message reveals it's completely unused today. > I couldn't really come up with any better idea, but I believe we do need > to size the skb fairly well to return the original one ... > > The only solution I _could_ think of was to allocate another skb, put > the attribute into it, check the length, and then later append it to the > message ... but that seemed kinda ugly. > > Any preferences? It'd feel pretty idiomatic for (rt)netlink to have netlink_policy_dump_attr_size() which would calculate the size. That'd cost us probably ~100 LoC? If that's too much we could at least add a define for this constant, and WARN_ON_ONCE() in __netlink_policy_dump_write_attr() if the dump ends up larger?