]> git.ipfire.org Git - thirdparty/nftables.git/commit
parser_bison: Fix for ECN keyword in LHS of relational
authorPhil Sutter <phil@nwl.cc>
Fri, 24 Aug 2018 11:26:57 +0000 (13:26 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 4 Oct 2018 00:11:17 +0000 (02:11 +0200)
commit14a9968a56f8b35138bab172aa7ce796f5d98e03
treea901e04ad134ee30ec1fa9b9606e05e7c083898d
parenta493147e60d350aca4197975281bf2ffe4cd1009
parser_bison: Fix for ECN keyword in LHS of relational

Of all possible TCP flags, 'ecn' is special since it is recognized by
lex as a keyword (there is a a field in IPv4 and IPv6 headers with the
same name). Therefore it is listed in keyword_expr, but that was
sufficient for RHS only. The following statement reproduces the issue:

| tcp flags & (syn | ecn) == (syn | ecn)

The solution is to limit binop expressions to accept an RHS expression
on RHS ("real" LHS expressions don't make much sense there anyway),
which then allows keyword_expr to occur there. In order to maintain the
recursive behaviour if braces are present, allow primary_rhs_expr to
consist of a basic_rhs_expr enclosed in braces. This in turn requires
for braced RHS part in relational_expr to be dropped, otherwise bison
complains about shift/reduce conflict.

Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/parser_bison.y
tests/py/inet/tcp.t
tests/py/inet/tcp.t.json
tests/py/inet/tcp.t.json.output
tests/py/inet/tcp.t.payload