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