aboutsummaryrefslogtreecommitdiffstats
path: root/net/netfilter/nf_nat_irc.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2022-09-09 08:08:51 +0100
committerDavid S. Miller <davem@davemloft.net>2022-09-09 08:08:51 +0100
commitceef59b54980d0827ecbf6a7666362c8c0d2c7bb (patch)
tree9b1294e6adf45b780b5873557e1e188cdc543d71 /net/netfilter/nf_nat_irc.c
parentMerge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net (diff)
parentnetfilter: nat: avoid long-running port range loop (diff)
downloadlinux-dev-ceef59b54980d0827ecbf6a7666362c8c0d2c7bb.tar.xz
linux-dev-ceef59b54980d0827ecbf6a7666362c8c0d2c7bb.zip
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next
Florian Westphal says: ==================== The following set contains changes for your *net-next* tree: - make conntrack ignore packets that are delayed (containing data already acked). The current behaviour to flag them as INVALID causes more harm than good, let them pass so peer can send an immediate ACK for the most recent sequence number. - make conntrack recognize when both peers have sent 'invalid' FINs: This helps cleaning out stale connections faster for those cases where conntrack is no longer in sync with the actual connection state. - Now that DECNET is gone, we don't need to reserve space for DECNET related information. - compact common 'find a free port number for the new inbound connection' code and move it to a helper, then cap number of tries the new helper will make until it gives up. - replace various instances of strlcpy with strscpy, from Wolfram Sang. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netfilter/nf_nat_irc.c')
-rw-r--r--net/netfilter/nf_nat_irc.c16
1 files changed, 2 insertions, 14 deletions
diff --git a/net/netfilter/nf_nat_irc.c b/net/netfilter/nf_nat_irc.c
index c691ab8d234c..19c4fcc60c50 100644
--- a/net/netfilter/nf_nat_irc.c
+++ b/net/netfilter/nf_nat_irc.c
@@ -48,20 +48,8 @@ static unsigned int help(struct sk_buff *skb,
exp->dir = IP_CT_DIR_REPLY;
exp->expectfn = nf_nat_follow_master;
- /* Try to get same port: if not, try to change it. */
- for (port = ntohs(exp->saved_proto.tcp.port); port != 0; port++) {
- int ret;
-
- exp->tuple.dst.u.tcp.port = htons(port);
- ret = nf_ct_expect_related(exp, 0);
- if (ret == 0)
- break;
- else if (ret != -EBUSY) {
- port = 0;
- break;
- }
- }
-
+ port = nf_nat_exp_find_port(exp,
+ ntohs(exp->saved_proto.tcp.port));
if (port == 0) {
nf_ct_helper_log(skb, ct, "all ports in use");
return NF_DROP;