All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <edumazet@kernel.org>
To: bestswngs@gmail.com, ncardwell@google.com, netdev@vger.kernel.org
Cc: kuniyu@google.com, davem@davemloft.net, horms@kernel.org,
	xmei5@asu.edu, co+71b6509cb791e531@bugs.sh
Subject: Re: [PATCH net] tcp: ignore locked zero CWND route metric
Date: Sat, 3 Oct 2026 19:09:14 +0200	[thread overview]
Message-ID: <701a85ad-2403-41ff-8ef2-a5a71a7f068b@kernel.org> (raw)
In-Reply-To: <cec4b256-da83-40df-99d5-44710ab8ea63@kernel.org>



On 10/3/26 18:10, Eric Dumazet wrote:
> 
> 
> On 10/3/26 17:32, bestswngs@gmail.com wrote:
>> From: Weiming Shi <bestswngs@gmail.com>
>>
>> A locked RTAX_CWND route metric of zero is copied into the TCP metrics
>> cache and then into snd_cwnd_clamp. This sets the initial cwnd to zero.
>> With a cached SSTHRESH metric, a later Reno ACK can reach a divide by
>> zero in tcp_cong_avoid_ai(). A user with CAP_NET_ADMIN in a user-created
>> network namespace can trigger the oops.
>>
>> Ignore a zero cached CWND metric when applying the locked clamp, leaving
>> the socket's initialized nonzero clamp in place.
>>
>>    Oops: divide error: 0000 [#1] SMP KASAN NOPTI
>>    RIP: 0010:tcp_cong_avoid_ai (net/ipv4/tcp_cong.c:482)
>>    Call Trace:
>>    tcp_ack (net/ipv4/tcp_input.c:4440)
>>    tcp_rcv_established (net/ipv4/tcp_input.c:6678)
>>    tcp_v4_do_rcv (net/ipv4/tcp_ipv4.c:1854)
>>    tcp_v4_rcv (net/ipv4/tcp_ipv4.c:2248)
>>    Kernel panic - not syncing: Fatal exception in interrupt
>>
>  > Fixes: 51c5d0c4b169 ("tcp: Maintain dynamic metrics in local 
> cache.")> Reported-by: <co+71b6509cb791e531@bugs.sh>
>> Assisted-by: LLM
>> Signed-off-by: Weiming Shi <bestswngs@gmail.com>
>> ---
>>   net/ipv4/tcp_metrics.c | 7 +++++--
>>   1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
>> index dc0c081fc1f3..ff41804ad086 100644
>> --- a/net/ipv4/tcp_metrics.c
>> +++ b/net/ipv4/tcp_metrics.c
>> @@ -484,8 +484,11 @@ void tcp_init_metrics(struct sock *sk)
>>           goto reset;
>>       }
>> -    if (tcp_metric_locked(tm, TCP_METRIC_CWND))
>> -        tp->snd_cwnd_clamp = tcp_metric_get(tm, TCP_METRIC_CWND);
>> +    if (tcp_metric_locked(tm, TCP_METRIC_CWND)) {
>> +        val = tcp_metric_get(tm, TCP_METRIC_CWND);
> 
> Please explain how we can come to this situation?
> 
> cwnd can never be zero, so how a save metric could contain zero?

That is to say :

The right fix is in ip_metrics_convert(), one time instead of at each 
TCP session init.

diff --git a/net/ipv4/metrics.c b/net/ipv4/metrics.c
index 
ad40762a8b38379e4ccdc505e3885adb8dfff763..50a08e592b207e85ccc2bb6f917379de61af4579 
100644
--- a/net/ipv4/metrics.c
+++ b/net/ipv4/metrics.c
@@ -54,6 +54,10 @@ static int ip_metrics_convert(struct nlattr *fc_mx,
                         NL_SET_ERR_MSG(extack, "Unknown flag set in 
feature mask in metrics attribute");
                         return -EINVAL;
                 }
+               if ((type == RTAX_CWND || type == RTAX_INITCWND) && !val) {
+                       NL_SET_ERR_MSG(extack, "CWND metric must be 
greater than zero");
+                       return -EINVAL;
+               }
                 metrics[type - 1] = val;
         }

pw-bot: cr


  reply	other threads:[~2026-10-03 17:09 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-03 15:32 [PATCH net] tcp: ignore locked zero CWND route metric bestswngs
2026-10-03 16:10 ` Eric Dumazet
2026-10-03 17:09   ` Eric Dumazet [this message]
2026-10-04 16:51     ` Weiming Shi

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=701a85ad-2403-41ff-8ef2-a5a71a7f068b@kernel.org \
    --to=edumazet@kernel.org \
    --cc=bestswngs@gmail.com \
    --cc=co+71b6509cb791e531@bugs.sh \
    --cc=davem@davemloft.net \
    --cc=horms@kernel.org \
    --cc=kuniyu@google.com \
    --cc=ncardwell@google.com \
    --cc=netdev@vger.kernel.org \
    --cc=xmei5@asu.edu \
    /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.