]> git.ipfire.org Git - thirdparty/iptables.git/commit
extensions: Fix checking of conntrack --ctproto 0
authorQuentin Armitage <quentin@armitage.org.uk>
Sat, 23 Nov 2013 08:41:58 +0000 (08:41 +0000)
committerPhil Sutter <phil@nwl.cc>
Thu, 14 Sep 2023 10:20:11 +0000 (12:20 +0200)
commit2e704f6ddd6d056e360f3d9c11e8b6c56a20cf23
tree0c703ad982fdf243878738005ccae75f4d4039c6
parent35ff97e9aca8cd301ff9b9a95b0a72de1aeb700b
extensions: Fix checking of conntrack --ctproto 0

There are three issues in the code:
1) the check (sinfo->invflags & XT_INV_PROTO) is using the wrong mask
2) in conntrack_mt_parse it is testing (info->invert_flags &
   XT_INV_PROTO) before the invert bit has been set.
3) the sense of the error message is the wrong way round

1) To get the error, ! -ctstatus XXX has to be specified, since
   XT_INV_PROTO == XT_CONNTRACK_STATUS e.g.
   | iptables -I CHAIN -m conntrack ! --ctstatus ASSURED --ctproto 0 ...

3) Unlike --proto 0 (where 0 means all protocols), in the conntrack
   match --ctproto 0 appears to mean protocol 0, which can never be.
   Therefore --ctproto 0 could never match and ! --ctproto 0 will always
   match. Both of these should be rejected, since the user clearly
   cannot be intending what was specified.

The attached patch resolves the issue, and also produces an error
message if --ctproto 0 is specified (as well as ! --ctproto 0 ), since
--ctproto 0 will never match, and ! --ctproto 0 will always match.

[Phil: - Added Fixes: tag - it's a day 1 bug
       - Copied patch description from Bugzilla
       - Reorganized changes to reduce diff
       - Added test cases]

Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=874
Fixes: 5054e85be3068 ("general conntrack match module userspace support files")
Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
Signed-off-by: Phil Sutter <phil@nwl.cc>
extensions/libxt_conntrack.c
extensions/libxt_conntrack.t