From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.netfilter.org (mail.netfilter.org [217.70.190.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DCCFA3F4DEB; Wed, 30 Sep 2026 07:41:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.190.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790754117; cv=none; b=s8taFvj397xVGwsoVYipZHaJjYdVLVYHKkX5AuOkx1M3cxfT1T4K4JB8xouCWpw85BrK9ZOtJ/X9AD6OJohSsq9TH0kMIm9IlMZa9FPasn3gy2WACa76SAZ82rAq2Sfdmh2MgZ/v+FyLKVLlAT+N+URTuJnnoDXFhIwlv2N+oZg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790754117; c=relaxed/simple; bh=8vzOGrFkWgI8jYjz3Q67R4wq3+7OJDfWZo4c9QtJucU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oOm//TUIRRphdJm6wH2djf546GTB2J9Whk/MP9RT7HLzEzNU/5Xzk2uAAUPcBZBfGs9DnSSyRHOEz1+yNTdey5azjncmiQqLNLsMg00mmdqS2E9xdt+KFWusNMuso+DS5X9vU4uqqnPEiTDIevb48mHOkEYJ3B1A3hR5yPvHkAk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=netfilter.org; spf=pass smtp.mailfrom=netfilter.org; dkim=pass (2048-bit key) header.d=netfilter.org header.i=@netfilter.org header.b=EHNjWHmG; arc=none smtp.client-ip=217.70.190.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=netfilter.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=netfilter.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=netfilter.org header.i=@netfilter.org header.b="EHNjWHmG" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netfilter.org; s=2025; t=1790754112; bh=kCoFU4XIFa6Wo+ZLdkpBKqak8kZCy16d0Dp9cP9wS7Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EHNjWHmGWpUFORJVDxNWshRVdlRb2v3fwK4mCjZJvxOR53Zwcro5BgvwvSwoCOwHe m9OL+9HyCOj+xIUeZyGt9Euwu5v6FnSIJtVyn/gwX1eFkH9c+KoSmuuDBhjLmicxGS h/RWx+e4x+8CQJVxh7v7PIFap+jJ0KhIgJINfNzjdSdRuDJGaxo+VSxYRQutSHOUyX uTOMV/w2LO22sANGB+wk+SD+eBkmI53uxHNBQ/iD2K6Btj2DQvVGsQiwhIOUb4mXQI UHuYjD7Hs35dU2MwfVzUGOWLXfBRPrDB0a0U6W6H963Cxd7LSgN310B9Yheh9phbPW T4MCDloY4WDXA== Received: from localhost.localdomain (mail-agni [217.70.190.124]) by mail.netfilter.org (Postfix) with ESMTPSA id DE19F6068C; Wed, 30 Sep 2026 09:41:51 +0200 (CEST) From: Pablo Neira Ayuso To: netfilter-devel@vger.kernel.org Cc: davem@davemloft.net, netdev@vger.kernel.org, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, horms@kernel.org, fw@strlen.de, ja@ssi.bg Subject: [PATCH net 04/10] ipvs: bound LBLCR and LBLC cache growth Date: Wed, 30 Sep 2026 09:41:35 +0200 Message-ID: <20260930074142.298353-5-pablo@netfilter.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260930074142.298353-1-pablo@netfilter.org> References: <20260930074142.298353-1-pablo@netfilter.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Zhiling Zou ip_vs_lblcr_new() and ip_vs_lblc_new() create cache entries for every previously unseen destination address. The table max_size only tells the periodic collector to reclaim entries after the cache has already exceeded the limit. It does not reclaim entries that the attacker continues to use. Reject new cache entries once either table reaches max_size * 3 / 2. The extra headroom lets the periodic collector catch up while the existing scheduler fallback continues to use the selected destination when cache creation fails. New traffic therefore stays serviceable without growing the tables further. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Cc: stable@vger.kernel.org Reported-by: Vega Suggested-by: Julian Anastasov Signed-off-by: Zhiling Zou Acked-by: Julian Anastasov Signed-off-by: Pablo Neira Ayuso --- net/netfilter/ipvs/ip_vs_lblc.c | 3 +++ net/netfilter/ipvs/ip_vs_lblcr.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/net/netfilter/ipvs/ip_vs_lblc.c b/net/netfilter/ipvs/ip_vs_lblc.c index a2b574904f13..55af77a56929 100644 --- a/net/netfilter/ipvs/ip_vs_lblc.c +++ b/net/netfilter/ipvs/ip_vs_lblc.c @@ -205,6 +205,9 @@ ip_vs_lblc_new(struct ip_vs_lblc_table *tbl, const union nf_inet_addr *daddr, ip_vs_lblc_del(en); atomic_dec(&tbl->entries); } + if (atomic_read(&tbl->entries) >= tbl->max_size * 3 / 2) + return NULL; + en = kmalloc_obj(*en, GFP_ATOMIC); if (!en) return NULL; diff --git a/net/netfilter/ipvs/ip_vs_lblcr.c b/net/netfilter/ipvs/ip_vs_lblcr.c index f53f05ceea36..858393b1d2d1 100644 --- a/net/netfilter/ipvs/ip_vs_lblcr.c +++ b/net/netfilter/ipvs/ip_vs_lblcr.c @@ -363,6 +363,9 @@ ip_vs_lblcr_new(struct ip_vs_lblcr_table *tbl, const union nf_inet_addr *daddr, en = ip_vs_lblcr_get(af, tbl, daddr); if (!en) { + if (atomic_read(&tbl->entries) >= tbl->max_size * 3 / 2) + return NULL; + en = kmalloc_obj(*en, GFP_ATOMIC); if (!en) return NULL; -- 2.47.3