]> granicus.if.org Git - ipset/commitdiff
Correct the reported memory size for bitmap:* types
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Thu, 13 Oct 2016 17:38:53 +0000 (19:38 +0200)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Thu, 13 Oct 2016 17:38:53 +0000 (19:38 +0200)
The patch "Fix extension alignmen" (c7cf6f3b) removed counting
the non-dynamic extensions into the used up memory area, fixed.

Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
kernel/net/netfilter/ipset/ip_set_bitmap_gen.h
kernel/net/netfilter/ipset/ip_set_bitmap_ipmac.c

index cc89502476ed296d8273940c2064d0f16f01480b..77dd4159528f8a159d4f6768850531c52e37fc43 100644 (file)
@@ -86,9 +86,12 @@ mtype_flush(struct ip_set *set)
 
 /* Calculate the actual memory size of the set data */
 static size_t
-mtype_memsize(const struct mtype *map)
+mtype_memsize(const struct mtype *map, size_t dsize)
 {
-       return sizeof(*map) + map->memsize;
+       size_t memsize = sizeof(*map) +
+                        map->memsize +
+                        map->elements * dsize;
+       return memsize;
 }
 
 static int
@@ -96,7 +99,7 @@ mtype_head(struct ip_set *set, struct sk_buff *skb)
 {
        const struct mtype *map = set->data;
        struct nlattr *nested;
-       size_t memsize = mtype_memsize(map) + set->ext_size;
+       size_t memsize = mtype_memsize(map, set->dsize) + set->ext_size;
 
        nested = ipset_nest_start(skb, IPSET_ATTR_DATA);
        if (!nested)
index 8eea41c90c9a9e0c2a05625b2497a291a2a6f1a0..9a065f672d3a56f33a22e38937780ab59d318c13 100644 (file)
@@ -214,7 +214,7 @@ bitmap_ipmac_kadt(struct ip_set *set, const struct sk_buff *skb,
 {
        struct bitmap_ipmac *map = set->data;
        ipset_adtfn adtfn = set->variant->adt[adt];
-       struct bitmap_ipmac_adt_elem e = { .id = 0, .add_mac = 1  };
+       struct bitmap_ipmac_adt_elem e = { .id = 0, .add_mac = 1 };
        struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set);
        u32 ip;