diff options
author | Phil Sutter <phil@nwl.cc> | 2020-01-09 13:34:20 +0100 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2020-01-10 12:37:05 +0100 |
commit | 5d57fa3e99bb9f2044e236d4ddb7d874cfefe1dd (patch) | |
tree | 182a072e3dbfe816c0fd7ce60f46ed17191513ee | |
parent | ea5af85371bd18658ea2ffa0a6c9c48e2c64684b (diff) |
monitor: Do not decompose non-anonymous sets
They have been decomposed already, trying to do that again causes a
segfault. This is a similar fix as in commit 8ecb885589591 ("src:
restore --echo with anonymous sets").
Signed-off-by: Phil Sutter <phil@nwl.cc>
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | src/monitor.c | 2 | ||||
-rw-r--r-- | tests/monitor/testcases/set-interval.t | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/monitor.c b/src/monitor.c index d586cfa3..84505eb9 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -500,7 +500,7 @@ static int netlink_events_obj_cb(const struct nlmsghdr *nlh, int type, static void rule_map_decompose_cb(struct set *s, void *data) { - if (s->flags & NFT_SET_INTERVAL) + if (s->flags & (NFT_SET_INTERVAL & NFT_SET_ANONYMOUS)) interval_map_decompose(s->init); } diff --git a/tests/monitor/testcases/set-interval.t b/tests/monitor/testcases/set-interval.t new file mode 100644 index 00000000..59930c58 --- /dev/null +++ b/tests/monitor/testcases/set-interval.t @@ -0,0 +1,20 @@ +# setup first +I add table ip t +I add chain ip t c +O - +J {"add": {"table": {"family": "ip", "name": "t", "handle": 0}}} +J {"add": {"chain": {"family": "ip", "table": "t", "name": "c", "handle": 0}}} + +# add set with elements, monitor output expectedly differs +I add set ip t s { type inet_service; flags interval; elements = { 20, 30-40 }; } +O add set ip t s { type inet_service; flags interval; } +O add element ip t s { 20 } +O add element ip t s { 30-40 } +J {"add": {"set": {"family": "ip", "name": "s", "table": "t", "type": "inet_service", "handle": 0, "flags": ["interval"]}}} +J {"add": {"element": {"family": "ip", "table": "t", "name": "s", "elem": {"set": [20]}}}} +J {"add": {"element": {"family": "ip", "table": "t", "name": "s", "elem": {"set": [{"range": [30, 40]}]}}}} + +# this would crash nft +I add rule ip t c tcp dport @s +O - +J {"add": {"rule": {"family": "ip", "table": "t", "chain": "c", "handle": 0, "expr": [{"match": {"op": "==", "left": {"payload": {"protocol": "tcp", "field": "dport"}}, "right": "@s"}}]}}} |