mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-04 04:02:26 +00:00
netfilter pull request 23-10-25
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEN9lkrMBJgcdVAPub1V2XiooUIOQFAmU45rAACgkQ1V2XiooU IORtEQ//U91FHPqc1KpJi5lAnXXAXaDji6RjZ080bwk4H3oXc2moc71SiGEgggGs POZEnN0sNJXfUacdG23pQGLnrT1iQpG927mzV01W9HhyZEopO4g+mRt5ymt/qmvO Q9MKWuNOlJCD5blPyKxU7VF3LsQynaPST1IbuPI1NVKiqNUpIpAWC1G+Ofpt67QY Tq7KiJDX0yc+51OFT9Ahs3piSbzC5bl0yC4iynajPxziv+rUiJW5ym2GM24G2rNh /SD4EeJkArdFa3I4Kf15Hnj9809qQP22PDhoQ2Hzzr7XbveArmPjaI0UQ39uV5Jr 1/lFP3iQMBsj04dI/xRLBHJHb2WZvlNa+btV/RHuaw1TEnYevdarMl3Lh0q7p5sT 3M4JBbk0+bq7ZXWmDBT48ZQs4S5UqMscunZXKg2k0fZPn/rSlASAZ3TAXZuF0avp KLQGQsjeBX/zgmQqhq37/oD+YV13LCtEqC0xz4WgX9WpVvgyMR3LFcsHQcZBAVUN PJenvgmpdo8sbhABOXsURJPVDo0JzS4xZhrPyIKaojTo33KfQ/1Z5Ef0EOkbs75+ 6wMoUTdvcZK+Y5f6hvMQ/XOu7XNz0sVZlfBjAhFrVU/TsbprviQCN8QB1IQNHclm 5A93VnID0WPCSAmOmaIdMlcJka4wKv4irI+Iv8vNlQXqV7dXuzQ= =r+0z -----END PGP SIGNATURE----- Merge tag 'nf-23-10-25' of git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf Pablo Neira Ayuso says: ==================== Netfilter fixes for net This patch contains two late Netfilter's flowtable fixes for net: 1) Flowtable GC pushes back packets to classic path in every GC run, ie. every second. This is because NF_FLOW_HW_ESTABLISHED is only used by sched/act_ct (never set) and IPS_SEEN_REPLY might be unset by the time the flow is offloaded (this status bit is only reliable in the sched/act_ct datapath). 2) sched/act_ct logic to push back packets to classic path to reevaluate if UDP flow is unidirectional only applies if IPS_HW_OFFLOAD_BIT is set on and no hardware offload request is pending to be handled. From Vlad Buslov. These two patches fixes two problems that were introduced in the previous 6.5 development cycle. * tag 'nf-23-10-25' of git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf: net/sched: act_ct: additional checks for outdated flows netfilter: flowtable: GC pushes back packets to classic path ==================== Link: https://lore.kernel.org/r/20231025100819.2664-1-pablo@netfilter.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
5e5d8b94a4
@ -53,6 +53,7 @@ struct nf_flowtable_type {
|
||||
struct list_head list;
|
||||
int family;
|
||||
int (*init)(struct nf_flowtable *ft);
|
||||
bool (*gc)(const struct flow_offload *flow);
|
||||
int (*setup)(struct nf_flowtable *ft,
|
||||
struct net_device *dev,
|
||||
enum flow_block_command cmd);
|
||||
|
@ -316,12 +316,6 @@ void flow_offload_refresh(struct nf_flowtable *flow_table,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(flow_offload_refresh);
|
||||
|
||||
static bool nf_flow_is_outdated(const struct flow_offload *flow)
|
||||
{
|
||||
return test_bit(IPS_SEEN_REPLY_BIT, &flow->ct->status) &&
|
||||
!test_bit(NF_FLOW_HW_ESTABLISHED, &flow->flags);
|
||||
}
|
||||
|
||||
static inline bool nf_flow_has_expired(const struct flow_offload *flow)
|
||||
{
|
||||
return nf_flow_timeout_delta(flow->timeout) <= 0;
|
||||
@ -407,12 +401,18 @@ nf_flow_table_iterate(struct nf_flowtable *flow_table,
|
||||
return err;
|
||||
}
|
||||
|
||||
static bool nf_flow_custom_gc(struct nf_flowtable *flow_table,
|
||||
const struct flow_offload *flow)
|
||||
{
|
||||
return flow_table->type->gc && flow_table->type->gc(flow);
|
||||
}
|
||||
|
||||
static void nf_flow_offload_gc_step(struct nf_flowtable *flow_table,
|
||||
struct flow_offload *flow, void *data)
|
||||
{
|
||||
if (nf_flow_has_expired(flow) ||
|
||||
nf_ct_is_dying(flow->ct) ||
|
||||
nf_flow_is_outdated(flow))
|
||||
nf_flow_custom_gc(flow_table, flow))
|
||||
flow_offload_teardown(flow);
|
||||
|
||||
if (test_bit(NF_FLOW_TEARDOWN, &flow->flags)) {
|
||||
|
@ -278,7 +278,16 @@ static int tcf_ct_flow_table_fill_actions(struct net *net,
|
||||
return err;
|
||||
}
|
||||
|
||||
static bool tcf_ct_flow_is_outdated(const struct flow_offload *flow)
|
||||
{
|
||||
return test_bit(IPS_SEEN_REPLY_BIT, &flow->ct->status) &&
|
||||
test_bit(IPS_HW_OFFLOAD_BIT, &flow->ct->status) &&
|
||||
!test_bit(NF_FLOW_HW_PENDING, &flow->flags) &&
|
||||
!test_bit(NF_FLOW_HW_ESTABLISHED, &flow->flags);
|
||||
}
|
||||
|
||||
static struct nf_flowtable_type flowtable_ct = {
|
||||
.gc = tcf_ct_flow_is_outdated,
|
||||
.action = tcf_ct_flow_table_fill_actions,
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user