summaryrefslogtreecommitdiffstats
path: root/src/mnl.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2014-02-03 19:54:07 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2014-02-03 19:54:07 +0100
commitf40b3a476f14730fd6ced4ddf29bb1c8319c1f6b (patch)
tree2daff8e91d709148ae0baa50ff2664c5061bef90 /src/mnl.c
parentebd70e51e9bf33a46705a6a1db649bed7724c0b1 (diff)
parent35f689ec8726dc262834d1906609bab85cebf976 (diff)
Merge branch 'master' into next-3.14
Diffstat (limited to 'src/mnl.c')
-rw-r--r--src/mnl.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/mnl.c b/src/mnl.c
index 3f092ed9..e825fb06 100644
--- a/src/mnl.c
+++ b/src/mnl.c
@@ -21,6 +21,7 @@
#include <linux/netfilter/nf_tables.h>
#include <mnl.h>
+#include <string.h>
#include <errno.h>
#include <utils.h>
#include <nftables.h>
@@ -100,12 +101,21 @@ struct batch_page {
static void mnl_batch_page_add(void)
{
struct batch_page *batch_page;
+ struct nlmsghdr *last_nlh;
+
+ /* Get the last message not fitting in the batch */
+ last_nlh = mnl_nlmsg_batch_current(batch);
batch_page = xmalloc(sizeof(struct batch_page));
batch_page->batch = batch;
list_add_tail(&batch_page->head, &batch_page_list);
batch_num_pages++;
batch = mnl_batch_alloc();
+
+ /* Copy the last message not fitting to the new batch page */
+ memcpy(mnl_nlmsg_batch_current(batch), last_nlh, last_nlh->nlmsg_len);
+ /* No overflow may happen as this is a new empty batch page */
+ mnl_nlmsg_batch_next(batch);
}
static uint32_t mnl_batch_put(int type)