On Mon, 2017-04-10 at 17:40 +0200, Johannes Berg wrote:
>
> Another thought: if we add a new flag that indicates "message has
> been capped", which we introduce in this same patch, then we can
> disentangle this more easily, right?
>
> Adding a new flag for "TLVs present" won't really help, but if you
> know the message was capped then you know the TLVs start after the
> inner nlmsghdr and you ignore that header's nlmsg_len.
Actually, the flag should be set if (and only if) the message was
capped *and* TLVs were requested (or present, doesn't matter.)
That way it becomes completely backward compatible and stateless:
* on kernels that don't have extack you can ignore the setsockopt
failure
* checking if TLVs are present becomes
flag set ||
nlh->nlmsg_len > sizeof(*nlh) + sizeof(int) +
sizeof(*inner_nlh) + inner_nlh->nlmsg_len
* TLV start offset is
tlv_start_offs = sizeof(*nlh) + sizeof(int) + sizeof(inner_nlh)
if (flag set)
tlv_start_offs += inner_nlh->nlmsg_len
I need to resend anyway so I'll add that tomorrow.
johannes