From: Julian Anastasov <ja@ssi.bg>
To: Axel Mierczuk <axel.mierczuk@1password.com>
Cc: Simon Horman <horms@verge.net.au>,
Pablo Neira Ayuso <pablo@netfilter.org>,
Florian Westphal <fw@strlen.de>, Phil Sutter <phil@nwl.cc>,
netfilter-devel@vger.kernel.org, lvs-devel@vger.kernel.org,
coreteam@netfilter.org, netdev@vger.kernel.org,
Willy Tarreau <w@1wt.eu>,
Keith Hoodlet <keith.hoodlet@1password.com>
Subject: Re: [PATCH nf 0/2] ipvs: keep templates and cport 0 conns away from packet lookups
Date: Sat, 3 Oct 2026 02:04:51 +0300 (EEST) [thread overview]
Message-ID: <f87eab0c-253a-2d5d-d2e6-f4fb691c9813@ssi.bg> (raw)
In-Reply-To: <CALb1hrnMJGj5ePZSB89ZW0Uv_oNpepeqgAmGcZxRsLyv64HOYA@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4487 bytes --]
Hi Axel,
On Wed, 30 Sep 2026, Axel Mierczuk wrote:
> Hi Julian,
>
> Sounds good. I will take a look as well and get back to you.
>
> On Tue, Sep 29, 2026 at 2:29 PM Julian Anastasov <ja@ssi.bg> wrote:
>
> Hello,
>
> On Fri, 25 Sep 2026, Axel Mierczuk wrote:
>
> > A template received over the unauthenticated sync protocol with a
> > nonzero cport is matched by data packets in ip_vs_conn_in_get() and
> > the protocol state machine runs on it. Patch 1 rejects sync records
> > with inconsistent cport and IP_VS_CONN_F_NO_CPORT combinations on
> > the backup.
> >
> > Patch 2 requires a nonzero cp->cport in ip_vs_conn_out_get() so that
> > templates and connections still waiting for their cport cannot be
> > matched through the out hook.
> >
> > The companion patch "ipvs: filter some flags received in the backup
> > server" rejects template records carrying IP_VS_CONN_F_NO_CPORT.
> >
> > Axel Mierczuk (2):
> > ipvs: validate cport in received sync records
> > ipvs: skip cport 0 connections in ip_vs_conn_out_get()
> >
> > net/netfilter/ipvs/ip_vs_conn.c | 3 ++-
> > net/netfilter/ipvs/ip_vs_sync.c | 19 +++++++++++++++++++
> > 2 files changed, 21 insertions(+), 1 deletion(-)
>
> Axel, this Sashiko review is shattering:
>
> https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260925141115.16126-1-axel.mierczuk%401password.com
>
> I'll be back with analyze how should we fix the
> problems...
Here is what we have for the Sashiko review:
https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260925141115.16126-1-axel.mierczuk%401password.com
Patch 1:
Q. Should the template branch also reject IP_VS_CONN_F_NO_CPORT?
A. Fixed by "ipvs: filter some flags received in the backup server"
which is already in the trees
Q. Can the master itself briefly send a record with a nonzero cport and
IP_VS_CONN_F_NO_CPORT still set?
A. Harmless
So, nothing that needs to change the patch.
Patch 2:
Q1. Does this make the "update or create" lookup in ip_vs_ftp_out() in
net/netfilter/ipvs/ip_vs_ftp.c unreachable?
A. Looks like we need the same check in ip_vs_conn_out_get:
We should use:
(!p->vport ^ (!(cp->flags & IP_VS_CONN_F_NO_CPORT)))
instead of the wrong cp->cport check.
Using p->vport and not re-reading cp->cport above due to
tricks in ip_vs_conn_fill_cport(), see Q4 below.
Q2. Can this lead to a new connection being created for every packet of a
flow started by a real server towards client port 0?
A. I can provide patch to ignore packets with port 0.
Q3. The commit message assumes that only templates and NO_CPORT entries have
cport 0. Does that hold for ordinary MASQ connections scheduled for a
client that uses source port 0?
A. I can provide patch to ignore packets with port 0.
Q4. Can the two separate plain reads of cp->cport in ip_vs_conn_out_get()
see different values?
A. We can check p->vport, see Q1
Q5. TEMPLATE and NO_CPORT
A. Fixed by "ipvs: filter some flags received in the backup server"
which is already in the trees
There is the option to create 3th patch "validate vport and dport
in received sync records" in your patchset, so that such change can be
propagated together:
} else if (!param->vport) {
...
} else if (!dport &&
(flags & IP_VS_CONN_F_FWD_MASK) == IP_VS_CONN_F_MASQ) {
...
}
Because it depends on your "ipvs: validate cport in received sync
records" patch. Such change will prevent sync messages to create
connections with port 0 that can be later hit by packets with
port 0. But may be such change is not needed.
I can provide a separate patch that will disallow connections
with 0 in cp->cport/vport created from packets. It will not conflict
with your changes.
After correcting the check in ip_vs_conn_out_get() lookup misses
caused by client port 0 can lead to scheduling for every packet and
creating duplicate connections. The main thing is to isolate cport 0
which for the backup server is already in your patch. The remaining part
is to filter it in the scheduler. OTOH, the vport/dport checks are
just nice to have. The rule here is, if we do not match cport 0 when
NO_CPORT is not set, we should also not create connections with cport 0.
As for the zero vport/dport, I'm not sure, they look harmless.
What do you think?
Regards
--
Julian Anastasov <ja@ssi.bg>
prev parent reply other threads:[~2026-10-02 23:05 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-25 14:11 [PATCH nf 0/2] ipvs: keep templates and cport 0 conns away from packet lookups Axel Mierczuk
2026-09-25 14:11 ` [PATCH nf 1/2] ipvs: validate cport in received sync records Axel Mierczuk
2026-09-29 15:40 ` netdev-bot+sashiko
2026-09-29 17:47 ` Julian Anastasov
2026-09-25 14:11 ` [PATCH nf 2/2] ipvs: skip cport 0 connections in ip_vs_conn_out_get() Axel Mierczuk
2026-09-29 15:40 ` netdev-bot+sashiko
2026-09-29 18:16 ` Julian Anastasov
2026-09-25 17:39 ` [PATCH nf 0/2] ipvs: keep templates and cport 0 conns away from packet lookups Julian Anastasov
2026-09-29 18:29 ` Julian Anastasov
[not found] ` <CALb1hrnMJGj5ePZSB89ZW0Uv_oNpepeqgAmGcZxRsLyv64HOYA@mail.gmail.com>
2026-10-02 23:04 ` Julian Anastasov [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f87eab0c-253a-2d5d-d2e6-f4fb691c9813@ssi.bg \
--to=ja@ssi.bg \
--cc=axel.mierczuk@1password.com \
--cc=coreteam@netfilter.org \
--cc=fw@strlen.de \
--cc=horms@verge.net.au \
--cc=keith.hoodlet@1password.com \
--cc=lvs-devel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=phil@nwl.cc \
--cc=w@1wt.eu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox