From: Florian Westphal Date: Fri, 14 Aug 2015 01:16:32 +0000 (+0200) Subject: src: netlink: don't truncate set key lengths X-Git-Tag: v0.6~228 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7c587d4b4d05a24cedcb2b0b339c18d79b9d4eb2;p=thirdparty%2Fnftables.git src: netlink: don't truncate set key lengths If key is e.g. 12 bits, pretend its 16 instead of 8. This is needed to make sets work with header fields with size not divisible by 8. Signed-off-by: Florian Westphal --- diff --git a/src/netlink.c b/src/netlink.c index ad1f16df..4d1e977f 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -1106,7 +1106,7 @@ static int netlink_add_set_compat(struct netlink_ctx *ctx, nftnl_set_set_u32(nls, NFTNL_SET_KEY_TYPE, dtype_map_to_kernel(set->keytype)); nftnl_set_set_u32(nls, NFTNL_SET_KEY_LEN, - set->keylen / BITS_PER_BYTE); + div_round_up(set->keylen, BITS_PER_BYTE)); if (set->flags & NFT_SET_MAP) { nftnl_set_set_u32(nls, NFTNL_SET_DATA_TYPE, dtype_map_to_kernel(set->datatype)); @@ -1138,7 +1138,7 @@ static int netlink_add_set_batch(struct netlink_ctx *ctx, nftnl_set_set_u32(nls, NFTNL_SET_KEY_TYPE, dtype_map_to_kernel(set->keytype)); nftnl_set_set_u32(nls, NFTNL_SET_KEY_LEN, - set->keylen / BITS_PER_BYTE); + div_round_up(set->keylen, BITS_PER_BYTE)); if (set->flags & NFT_SET_MAP) { nftnl_set_set_u32(nls, NFTNL_SET_DATA_TYPE, dtype_map_to_kernel(set->datatype));