summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2016-10-13 19:38:53 +0200
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2016-10-13 19:38:53 +0200
commitb8251a4a415daeb4a5569e12816b473fae134a0c (patch)
tree8dc3d51867515f8de4e58031ca8cb37c9dc5f4aa
parent464f839f9c958f470f4f4d66a82b4298c49bc84d (diff)
Correct the reported memory size for bitmap:* types
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>
-rw-r--r--kernel/net/netfilter/ipset/ip_set_bitmap_gen.h9
-rw-r--r--kernel/net/netfilter/ipset/ip_set_bitmap_ipmac.c2
2 files changed, 7 insertions, 4 deletions
diff --git a/kernel/net/netfilter/ipset/ip_set_bitmap_gen.h b/kernel/net/netfilter/ipset/ip_set_bitmap_gen.h
index cc89502..77dd415 100644
--- a/kernel/net/netfilter/ipset/ip_set_bitmap_gen.h
+++ b/kernel/net/netfilter/ipset/ip_set_bitmap_gen.h
@@ -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)
diff --git a/kernel/net/netfilter/ipset/ip_set_bitmap_ipmac.c b/kernel/net/netfilter/ipset/ip_set_bitmap_ipmac.c
index 8eea41c..9a065f6 100644
--- a/kernel/net/netfilter/ipset/ip_set_bitmap_ipmac.c
+++ b/kernel/net/netfilter/ipset/ip_set_bitmap_ipmac.c
@@ -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;