bugzilla-daemon at netfilter.org
2023-Sep-03 17:05 UTC
[Bug 1702] New: iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702
Bug ID: 1702
Summary: iptables fails to parse interface wildcard "-i +"
correctly
Product: iptables
Version: 1.8.x
Hardware: x86_64
OS: Ubuntu
Status: NEW
Severity: major
Priority: P5
Component: iptables
Assignee: netfilter-buglog at lists.netfilter.org
Reporter: thomas.strangert at emblasoft.com
If I enter a simple iptables rule that uses the "-i +" input interface
wildcard
thing in it, but note that I don't give any interface namestring
"prefix"
before the "+" - for example:
iptables -A INPUT -i + -d 192.168.1.10 -j DROP
iptables -A INPUT -i + -d 192.168.1.11 -j DROP
iptables -A INPUT -i + -d 192.168.1.12 -j DROP
Then printouts of both iptables-save and iptables -L -n -v will show weird
non-ascii/non-printable characters where the interfaces are supposed to be
printed!
The result for my rule example above shows as:
-A INPUT -d 192.168.80.10/32 -i ??P
+ -j DROP
-A INPUT -d 192.168.80.11/32 -i ??P?+ -j DROP
-A INPUT -d 192.168.80.12/32 -i ??P + -j DROP
(The garbage chars in hex were for me \c0\a8\50\0a, \c0\a8\50\0b, \c0\a8\50\0c
respectively. Note the \0a newline char breaking up the printout into two lines
for the first rule.)
The garbage characters makes
"iptables-save > /etc/iptables/rules.v4"
followed up with
"iptables-restore < /etc/iptables/rules.v4"
to fail!
I discovered that if the rule also includes some "protocol"
constraints like
"-p tcp -m tcp --dport 123" then iptables parses/prints the rule
seemingly ok,
but for "simpler" rules iptables gets confused.
However, adding a state constraint like "-m conntrack --ctstate NEW"
will still
make the bug happen.
Notes about (possibly) related bug reports:
https://bugzilla.netfilter.org/show_bug.cgi?id=1085
https://bugs.launchpad.net/ubuntu/+source/iptables/+bug/2033663
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230903/5ebebbed/attachment.html>
bugzilla-daemon at netfilter.org
2023-Sep-04 12:10 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702 --- Comment #1 from thomas.strangert at emblasoft.com --- For clarity: I made a copy-paste/edit error with the IP addresses when writing the bug report, happened to first give IPs in the 192.168.1.x subnet then as 192.168.80.x. This is a textual error here. In the actual server where I found the bug, both subnets are the same. -- You are receiving this mail because: You are watching all bug changes. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230904/28600f23/attachment.html>
bugzilla-daemon at netfilter.org
2023-Sep-05 12:00 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702
Phil Sutter <phil at nwl.cc> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
CC| |phil at nwl.cc
Assignee|netfilter-buglog at lists.netf |phil at nwl.cc
|ilter.org |
--- Comment #2 from Phil Sutter <phil at nwl.cc> ---
I can neither reproduce this with current HEAD nor v1.8.7 tag. Is this a
downstream issue? I see you're facing the problem with
iptables-1.8.7-1ubuntu5.1, can you try to reproduce with a vanilla build?
Also, you could try calling:
valgrind --leak-check=full iptables -A INPUT -i + -d 192.168.1.10 -j DROP
It should report garbage data read and give some
details as to where/why it happens.
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230905/cc32d228/attachment.html>
bugzilla-daemon at netfilter.org
2023-Sep-05 12:52 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702 --- Comment #3 from thomas.strangert at emblasoft.com --- # valgrind --leak-check=full iptables -A INPUT -i + -d 192.168.8.13 -j DROP ==3046844== Memcheck, a memory error detector ==3046844== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==3046844== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info ==3046844== Command: iptables -A INPUT -i + -d 192.168.8.13 -j DROP ==3046844===3046844== Syscall param socketcall.sendto(msg) points to uninitialised byte(s) ==3046844== at 0x49DABBA: sendto (sendto.c:27) ==3046844== by 0x11666D: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x123A5D: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x12705B: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x11CF12: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x11D73C: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x11D9E0: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x11DA2F: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x48DCD8F: (below main) (libc_start_call_main.h:58) ==3046844== Address 0x1ffeffc30f is on thread 1's stack ==3046844===3046844== Syscall param sendmsg(msg.msg_iov[0]) points to uninitialised byte(s) ==3046844== at 0x49DAB17: sendmsg (sendmsg.c:28) ==3046844== by 0x11A4DC: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x11D9E0: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x11DA2F: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x48DCD8F: (below main) (libc_start_call_main.h:58) ==3046844== Address 0x4aebccb is 59 bytes inside a block of size 200,703 alloc'd ==3046844== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==3046844== by 0x4877A45: ??? (in /usr/lib/x86_64-linux-gnu/libnftnl.so.11.6.0) ==3046844== by 0x48791AC: nftnl_batch_alloc (in /usr/lib/x86_64-linux-gnu/libnftnl.so.11.6.0) ==3046844== by 0x11A1A7: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x11D9E0: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x11DA2F: ??? (in /usr/sbin/xtables-nft-multi) ==3046844== by 0x48DCD8F: (below main) (libc_start_call_main.h:58) ==3046844===3046844===3046844== HEAP SUMMARY: ==3046844== in use at exit: 0 bytes in 0 blocks ==3046844== total heap usage: 77 allocs, 77 frees, 247,730 bytes allocated ==3046844===3046844== All heap blocks were freed -- no leaks are possible ==3046844===3046844== Use --track-origins=yes to see where uninitialised values come from ==3046844== For lists of detected and suppressed errors, rerun with: -s ==3046844== ERROR SUMMARY: 4 errors from 2 contexts (suppressed: 0 from 0) -- You are receiving this mail because: You are watching all bug changes. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230905/a5e0e188/attachment.html>
bugzilla-daemon at netfilter.org
2023-Sep-05 12:57 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702
Pablo Neira Ayuso <pablo at netfilter.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pablo at netfilter.org
--- Comment #4 from Pablo Neira Ayuso <pablo at netfilter.org> ---
(In reply to thomas.strangert from comment #3)> # valgrind --leak-check=full iptables -A INPUT -i + -d 192.168.8.13 -j DROP
> ==3046844== Memcheck, a memory error detector
> ==3046844== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et
al.
> ==3046844== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright
> info
> ==3046844== Command: iptables -A INPUT -i + -d 192.168.8.13 -j DROP
It is the listing that shows the garbage, correct? Then, run valgring on
iptables-save.
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230905/89e9f8fd/attachment.html>
bugzilla-daemon at netfilter.org
2023-Sep-05 13:16 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702
--- Comment #5 from thomas.strangert at emblasoft.com ---
Now the garbage seems to end with a CR char, making the printout partly
overwrite itself - the line now starts with the +.
# iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
27M 252G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
ctstate RELATED,ESTABLISHED
... ...
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
+ * 0.0.0.0/0 192.168.8.13
# iptables-save
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
... ...
-A INPUT -j DROP
+ -j DROP-d 192.168.8.13/32 -i ?
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230905/552298f7/attachment.html>
bugzilla-daemon at netfilter.org
2023-Sep-05 13:20 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702 --- Comment #6 from thomas.strangert at emblasoft.com --- # valgrind --leak-check=full iptables-save ==3054371== Memcheck, a memory error detector ==3054371== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==3054371== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info ==3054371== Command: iptables-save ==3054371===3054371== Syscall param socketcall.sendto(msg) points to uninitialised byte(s) ==3054371== at 0x49DABBA: sendto (sendto.c:27) ==3054371== by 0x11666D: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x123D61: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C3D7: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x1270B7: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C7DE: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x48DCD8F: (below main) (libc_start_call_main.h:58) ==3054371== Address 0x1ffeffc3af is on thread 1's stack ==3054371===3054371== Syscall param socketcall.sendto(msg) points to uninitialised byte(s) ==3054371== at 0x49DABBA: sendto (sendto.c:27) ==3054371== by 0x11666D: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x123D61: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C423: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x1270B7: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C7DE: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x48DCD8F: (below main) (libc_start_call_main.h:58) ==3054371== Address 0x1ffeffc3af is on thread 1's stack ==3054371=# Generated by iptables-save v1.8.7 on Tue Sep 5 15:18:09 2023 *mangle ... ... :mangle_WAN_DDoS - [0:0] -A PREROUTING -i wan -j mangle_WAN_DDoS ==3054371== Syscall param socketcall.sendto(msg) points to uninitialised byte(s) ==3054371== at 0x49DABBA: sendto (sendto.c:27) ==3054371== by 0x1139E0: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x48A62C6: xtables_find_match (in /usr/lib/x86_64-linux-gnu/libxtables.so.12.4.0) ==3054371== by 0x48A601A: ??? (in /usr/lib/x86_64-linux-gnu/libxtables.so.12.4.0) ==3054371== by 0x48A63C6: xtables_find_match (in /usr/lib/x86_64-linux-gnu/libxtables.so.12.4.0) ==3054371== by 0x114944: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C02B: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C124: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C423: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C527: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C95B: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x48DCD8F: (below main) (libc_start_call_main.h:58) ==3054371== Address 0x1ffeffbe02 is on thread 1's stack ==3054371=... ... :Cid82520X12088.0 - [0:0] ==3054371== Syscall param socketcall.sendto(msg) points to uninitialised byte(s) ==3054371== at 0x49DABBA: sendto (sendto.c:27) ==3054371== by 0x1139E0: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x48A5C95: xtables_find_target (in /usr/lib/x86_64-linux-gnu/libxtables.so.12.4.0) ==3054371== by 0x48A5FF1: ??? (in /usr/lib/x86_64-linux-gnu/libxtables.so.12.4.0) ==3054371== by 0x48A5D20: xtables_find_target (in /usr/lib/x86_64-linux-gnu/libxtables.so.12.4.0) ==3054371== by 0x114A1D: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C02B: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C124: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C3D7: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C527: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x11C95B: ??? (in /usr/sbin/xtables-nft-multi) ==3054371== by 0x48DCD8F: (below main) (libc_start_call_main.h:58) ==3054371== Address 0x1ffeffbdfd is on thread 1's stack ==3054371=... ... # Completed on Tue Sep 5 15:18:09 2023 ==3054371===3054371== HEAP SUMMARY: ==3054371== in use at exit: 0 bytes in 0 blocks ==3054371== total heap usage: 10,741 allocs, 10,741 frees, 1,328,016 bytes allocated ==3054371===3054371== All heap blocks were freed -- no leaks are possible ==3054371===3054371== Use --track-origins=yes to see where uninitialised values come from ==3054371== For lists of detected and suppressed errors, rerun with: -s ==3054371== ERROR SUMMARY: 60 errors from 4 contexts (suppressed: 0 from 0) -- You are receiving this mail because: You are watching all bug changes. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230905/fa1d8ea3/attachment-0001.html>
bugzilla-daemon at netfilter.org
2023-Sep-05 13:31 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702 --- Comment #7 from thomas.strangert at emblasoft.com --- (In reply to Phil Sutter from comment #2)> I can neither reproduce this with current HEAD nor v1.8.7 tag. Is this a > downstream issue? I see you're facing the problem with > iptables-1.8.7-1ubuntu5.1, can you try to reproduce with a vanilla build? > > Also, you could try calling: > > valgrind --leak-check=full iptables -A INPUT -i + -d 192.168.1.10 -j DROP > > It should report garbage data read and give some > details as to where/why it happens.I noticed it when I moved to a Ubuntu 22.04 LTS from 20.04 LTS, all using native/standard distro/downstream builds I suppose. I have reported the bug to Ubuntu as well, so I hope that they can do the "flavored" tests. I don't have the servers/setup/bandwidth to go much deeper that I'm already in at. Ubuntu bug report: https://bugs.launchpad.net/ubuntu/+source/iptables/+bug/2033663 -- You are receiving this mail because: You are watching all bug changes. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230905/6c8a5a97/attachment.html>
bugzilla-daemon at netfilter.org
2023-Sep-05 16:09 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702
--- Comment #8 from Phil Sutter <phil at nwl.cc> ---
Reproduced in Ubuntu 22.04 LTS live ISO.
Looking at v1.8.7 code, I think I found the culprit:
Suppose the rule is '-A FORWARD -i + -d 1.2.3.4 -j ACCEPT'.
When adding the rule, add_iniface() unconditionally adds the meta expression
and skips adding the cmp one if interface name is "+" (actually: Ends
with "+"
and is not longer than 1).
Afterwards, payload match is created as expected. The rule in kernel then looks
like this:
[ meta load iifname => reg 1 ]
[ payload load 4b @ network header + 16 => reg 1 ]
[ cmp eq reg 1 0x04030201 ]
[ counter pkts 0 bytes 0 ]
[ immediate reg 0 accept ]
When parsing the rule, first nft_parse_meta() is called which sets ctx->reg
and
sets NFT_XT_CTX_META bit in ctx->flags. Next nft_parse_payload() is called
which overwrites ctx->reg, initializes ctx->payload and sets
NFT_XT_CTX_PAYLOAD
bit in ctx->flags. Next, nft_parse_cmp() is called which acts upon *both*
bits
in ctx->flags and thus calls h->ops->parse_meta (i.e.,
nft_ipv4_parse_meta)
with a cmp expression holding the IP address value.
With v1.8.9 all this changed via commit f315af1cf8871 ("nft: track each
register individually") which eliminated the ctx->flags use and
instroduced
reg->type instead.
We still have the odd add_iniface() (and add_outiface(), too) code in HEAD
which unconditionally emits a meta expression without following cmp one.
Therefore it should be possible to write a patch which applies to upstream and
(after dealing with context conflicts) fixes v1.8.7.
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230905/d1fc1d9f/attachment.html>
bugzilla-daemon at netfilter.org
2023-Sep-08 14:01 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702
Fabio <pedretti.fabio at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pedretti.fabio at gmail.com
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230908/44a342b3/attachment.html>
bugzilla-daemon at netfilter.org
2023-Sep-14 10:35 UTC
[Bug 1702] iptables fails to parse interface wildcard "-i +" correctly
https://bugzilla.netfilter.org/show_bug.cgi?id=1702
Phil Sutter <phil at nwl.cc> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution|--- |FIXED
--- Comment #9 from Phil Sutter <phil at nwl.cc> ---
Fix pushed upstream in commit 52ed0ac516db9 ("nft: Fix for useless meta
expressions in rule").
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230914/299467cc/attachment.html>
Maybe Matching Threads
- Re: [Qemu-devel] Hvmloader: Modify ACPI to only supply _EJ0 methods for PCIslots that support hotplug by runtime patching
- Iptables blocks out going connetion some times
- nwfilter : iptables rules not working
- [Bug 1423] New: iptables-translate silently discards --ctstate DNAT
- [Bug 712] New: iptables-save does not save correcly rateest bps parameter