summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2013-12-24 18:32:35 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2013-12-28 12:14:42 +0100
commite38195bf32d7ccb2ae3f56f36b895daf455ffd94 (patch)
tree4baa17d0647af70be1d54fe01840cc9a6abb7dde
parentb25adce1606427fd88da08f5203714cada7f6a98 (diff)
downloadop-kernel-dev-e38195bf32d7ccb2ae3f56f36b895daf455ffd94.zip
op-kernel-dev-e38195bf32d7ccb2ae3f56f36b895daf455ffd94.tar.gz
netfilter: nf_tables: fix dumping with large number of sets
If not table name is specified, the dumping of the existing sets may be incomplete with a sufficiently large number of sets and tables. This patch fixes missing reset of the cursors after finding the location of the last object that has been included in the previous multi-part message. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--net/netfilter/nf_tables_api.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index f93b7d0..d9fcd27 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -2098,17 +2098,21 @@ static int nf_tables_dump_sets_all(struct nft_ctx *ctx, struct sk_buff *skb,
struct netlink_callback *cb)
{
const struct nft_set *set;
- unsigned int idx = 0, s_idx = cb->args[0];
+ unsigned int idx, s_idx = cb->args[0];
struct nft_table *table, *cur_table = (struct nft_table *)cb->args[2];
if (cb->args[1])
return skb->len;
list_for_each_entry(table, &ctx->afi->tables, list) {
- if (cur_table && cur_table != table)
- continue;
+ if (cur_table) {
+ if (cur_table != table)
+ continue;
+ cur_table = NULL;
+ }
ctx->table = table;
+ idx = 0;
list_for_each_entry(set, &ctx->table->sets, list) {
if (idx < s_idx)
goto cont;
OpenPOWER on IntegriCloud