summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2016-10-20 17:43:26 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2016-10-20 18:03:00 +0200
commitc26951eb0f98de0151699563cd0302f2ed714c01 (patch)
tree4110c0e0529e4344863941e0883efebbd265130e
parent41363369c3df93cb2e8856c51629223f4d89d1e6 (diff)
src: add notrack expression
Register this simple expression with no attributes. Make sure libnftnl doesn't crash when no build and parse indirections are defined, as it is the case for this expression. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--src/expr.c7
-rw-r--r--src/expr_ops.c5
2 files changed, 10 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c
index 51413ab..2779b3c 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -213,13 +213,15 @@ bool nftnl_expr_cmp(const struct nftnl_expr *e1, const struct nftnl_expr *e2)
}
EXPORT_SYMBOL(nftnl_expr_cmp);
-void
-nftnl_expr_build_payload(struct nlmsghdr *nlh, struct nftnl_expr *expr)
+void nftnl_expr_build_payload(struct nlmsghdr *nlh, struct nftnl_expr *expr)
{
struct nlattr *nest;
mnl_attr_put_strz(nlh, NFTA_EXPR_NAME, expr->ops->name);
+ if (!expr->ops->build)
+ return;
+
nest = mnl_attr_nest_start(nlh, NFTA_EXPR_DATA);
expr->ops->build(nlh, expr);
mnl_attr_nest_end(nlh, nest);
@@ -261,6 +263,7 @@ struct nftnl_expr *nftnl_expr_parse(struct nlattr *attr)
goto err1;
if (tb[NFTA_EXPR_DATA] &&
+ expr->ops->parse &&
expr->ops->parse(expr, tb[NFTA_EXPR_DATA]) < 0)
goto err2;
diff --git a/src/expr_ops.c b/src/expr_ops.c
index 55748d6..96b1f8d 100644
--- a/src/expr_ops.c
+++ b/src/expr_ops.c
@@ -31,6 +31,10 @@ extern struct expr_ops expr_ops_target;
extern struct expr_ops expr_ops_dynset;
extern struct expr_ops expr_ops_hash;
+static struct expr_ops expr_ops_notrack = {
+ .name = "notrack",
+};
+
static struct expr_ops *expr_ops[] = {
&expr_ops_bitwise,
&expr_ops_byteorder,
@@ -49,6 +53,7 @@ static struct expr_ops *expr_ops[] = {
&expr_ops_meta,
&expr_ops_ng,
&expr_ops_nat,
+ &expr_ops_notrack,
&expr_ops_payload,
&expr_ops_range,
&expr_ops_redir,