summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/chain.c5
-rw-r--r--src/rule.c5
-rw-r--r--src/set.c5
-rw-r--r--src/table.c11
4 files changed, 15 insertions, 11 deletions
diff --git a/src/chain.c b/src/chain.c
index 34eb91d..19e7950 100644
--- a/src/chain.c
+++ b/src/chain.c
@@ -142,6 +142,9 @@ EXPORT_SYMBOL(nft_chain_attr_unset);
void nft_chain_attr_set(struct nft_chain *c, uint16_t attr, const void *data)
{
+ if (attr > NFT_CHAIN_ATTR_MAX)
+ return;
+
switch(attr) {
case NFT_CHAIN_ATTR_NAME:
strncpy(c->name, data, NFT_CHAIN_MAXNAMELEN);
@@ -182,8 +185,6 @@ void nft_chain_attr_set(struct nft_chain *c, uint16_t attr, const void *data)
c->type = strdup(data);
break;
- default:
- return;
}
c->flags |= (1 << attr);
}
diff --git a/src/rule.c b/src/rule.c
index 53d2ebf..5e149c7 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -115,6 +115,9 @@ EXPORT_SYMBOL(nft_rule_attr_unset);
void nft_rule_attr_set(struct nft_rule *r, uint16_t attr, const void *data)
{
+ if (attr > NFT_RULE_ATTR_MAX)
+ return;
+
switch(attr) {
case NFT_RULE_ATTR_TABLE:
if (r->table)
@@ -143,8 +146,6 @@ void nft_rule_attr_set(struct nft_rule *r, uint16_t attr, const void *data)
case NFT_RULE_ATTR_POSITION:
r->position = *((uint64_t *)data);
break;
- default:
- return;
}
r->flags |= (1 << attr);
}
diff --git a/src/set.c b/src/set.c
index c3a7fae..c8b5ccf 100644
--- a/src/set.c
+++ b/src/set.c
@@ -98,6 +98,9 @@ EXPORT_SYMBOL(nft_set_attr_unset);
void nft_set_attr_set(struct nft_set *s, uint16_t attr, const void *data)
{
+ if (attr > NFT_SET_ATTR_MAX)
+ return;
+
switch(attr) {
case NFT_SET_ATTR_TABLE:
if (s->table)
@@ -129,8 +132,6 @@ void nft_set_attr_set(struct nft_set *s, uint16_t attr, const void *data)
case NFT_SET_ATTR_FAMILY:
s->family = *((uint32_t *)data);
break;
- default:
- return;
}
s->flags |= (1 << attr);
}
diff --git a/src/table.c b/src/table.c
index c834a4e..af4b13c 100644
--- a/src/table.c
+++ b/src/table.c
@@ -81,26 +81,27 @@ EXPORT_SYMBOL(nft_table_attr_unset);
void nft_table_attr_set(struct nft_table *t, uint16_t attr, const void *data)
{
+ if (attr > NFT_TABLE_ATTR_MAX)
+ return;
+
switch (attr) {
case NFT_TABLE_ATTR_NAME:
if (t->name)
xfree(t->name);
t->name = strdup(data);
- t->flags |= (1 << NFT_TABLE_ATTR_NAME);
break;
case NFT_TABLE_ATTR_FLAGS:
t->table_flags = *((uint32_t *)data);
- t->flags |= (1 << NFT_TABLE_ATTR_FLAGS);
break;
case NFT_TABLE_ATTR_FAMILY:
t->family = *((uint8_t *)data);
- t->flags |= (1 << NFT_TABLE_ATTR_FAMILY);
break;
case NFT_TABLE_ATTR_USE:
- /* Cannot be unset, ignoring it */
- break;
+ /* Cannot be set, ignoring it */
+ return;
}
+ t->flags |= (1 << attr);
}
EXPORT_SYMBOL(nft_table_attr_set);