From: Adriano Cordova <adrianox@gmail.com>
To: Simon Horman <horms@verge.net.au>, Julian Anastasov <ja@ssi.bg>,
Pablo Neira Ayuso <pablo@netfilter.org>
Cc: Florian Westphal <fw@strlen.de>,
netfilter-devel@vger.kernel.org, lvs-devel@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v6 nf-next 2/3] ipvs: tcp: enable per-connection secure_tcp in state machine
Date: Mon, 5 Oct 2026 20:08:07 -0300 [thread overview]
Message-ID: <20261005230808.148478-3-adrianox@gmail.com> (raw)
In-Reply-To: <20261005230808.148478-1-adrianox@gmail.com>
Let set_tcp_state select tcp_states_dos when the connection
carries IP_VS_CONN_F_SECURE_TCP, otherwise keep using the
global pd->tcp_state_table (the netns default / or if nomem).
Signed-off-by: Adriano Cordova <adrianox@gmail.com>
---
Changes in v5:
- Document that secure_tcp is the netns-wide default and that a service
can opt in to the hardened table with IP_VS_SVC_F_SECURE_TCP.
Documentation/networking/ipvs-sysctl.rst | 4 ++++
net/netfilter/ipvs/ip_vs_proto_tcp.c | 16 +++++++++-------
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/Documentation/networking/ipvs-sysctl.rst b/Documentation/networking/ipvs-sysctl.rst
index fe36f4fcd3a0..5fc6afd2d39a 100644
--- a/Documentation/networking/ipvs-sysctl.rst
+++ b/Documentation/networking/ipvs-sysctl.rst
@@ -290,6 +290,10 @@ secure_tcp - INTEGER
The value definition is the same as that of drop_entry and
drop_packet.
+ This is the network-namespace default. A virtual service can opt
+ in to the hardened table regardless of this setting by setting
+ IP_VS_SVC_F_SECURE_TCP (0x0100) in its service flags.
+
svc_lfactor - INTEGER
Possible values: -8 (larger table) .. 8 (smaller table)
diff --git a/net/netfilter/ipvs/ip_vs_proto_tcp.c b/net/netfilter/ipvs/ip_vs_proto_tcp.c
index fec0e8b47b71..3b9a2c8e9a52 100644
--- a/net/netfilter/ipvs/ip_vs_proto_tcp.c
+++ b/net/netfilter/ipvs/ip_vs_proto_tcp.c
@@ -451,11 +451,10 @@ static void tcp_timeout_change(struct ip_vs_proto_data *pd, int flags)
int on = (flags & 1); /* secure_tcp */
/*
- ** FIXME: change secure_tcp to independent sysctl var
- ** or make it per-service or per-app because it is valid
- ** for most if not for all of the applications. Something
- ** like "capabilities" (flags) for each object.
- */
+ * This remains the netns-wide default / global floor (e.g. when
+ * memory pressure kicks in). Per-service hardening is now carried
+ * by IP_VS_CONN_F_SECURE_TCP on each connection (set_tcp_state).
+ */
pd->tcp_state_table = (on ? tcp_states_dos : tcp_states);
}
@@ -479,6 +478,7 @@ set_tcp_state(struct ip_vs_proto_data *pd, struct ip_vs_conn *cp,
int state_idx;
int new_state = IP_VS_TCP_S_CLOSE;
int state_off = tcp_state_off[direction];
+ const struct tcp_states_t *table;
/*
* Update state offset to INPUT_ONLY if necessary
@@ -496,8 +496,10 @@ set_tcp_state(struct ip_vs_proto_data *pd, struct ip_vs_conn *cp,
goto tcp_state_out;
}
- new_state =
- pd->tcp_state_table[state_off+state_idx].next_state[cp->state];
+ table = pd->tcp_state_table;
+ if (cp->flags & IP_VS_CONN_F_SECURE_TCP)
+ table = tcp_states_dos;
+ new_state = table[state_off + state_idx].next_state[cp->state];
tcp_state_out:
if (new_state != cp->state) {
--
2.51.0
next prev parent reply other threads:[~2026-10-05 23:08 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-05 23:08 [PATCH v6 nf-next 0/3] ipvs: add per-service secure_tcp Adriano Cordova
2026-10-05 23:08 ` [PATCH v6 nf-next 1/3] ipvs: add flags for per-service secure TCP state table Adriano Cordova
2026-10-05 23:08 ` Adriano Cordova [this message]
2026-10-05 23:08 ` [PATCH v6 nf-next 3/3] selftests: netfilter: ipvs: add per-service secure_tcp test Adriano Cordova
2026-10-07 3:52 ` [PATCH v6 nf-next 0/3] ipvs: add per-service secure_tcp Julian Anastasov
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=20261005230808.148478-3-adrianox@gmail.com \
--to=adrianox@gmail.com \
--cc=fw@strlen.de \
--cc=horms@verge.net.au \
--cc=ja@ssi.bg \
--cc=linux-kernel@vger.kernel.org \
--cc=lvs-devel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.