]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: netlink: don't truncate set key lengths
authorFlorian Westphal <fw@strlen.de>
Fri, 14 Aug 2015 01:16:32 +0000 (03:16 +0200)
committerFlorian Westphal <fw@strlen.de>
Thu, 17 Sep 2015 22:06:03 +0000 (00:06 +0200)
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 <fw@strlen.de>
src/netlink.c

index ad1f16df00e054929664be2729b274c4d0ead8b1..4d1e977f333fbeb5afe0529a36de11b1d5408388 100644 (file)
@@ -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));