From: Kuniyuki Iwashima <kuniyu@google.com>
To: Jiayuan Chen <jiayuan.chen@linux.dev>
Cc: netdev@vger.kernel.org, stable@vger.kernel.org,
Fernando Fernandez Mancera <fmancera@suse.de>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Randy Dunlap <rdunlap@infradead.org>,
David Ahern <dsahern@kernel.org>,
Ido Schimmel <idosch@nvidia.com>,
Joel Granados <joel.granados@kernel.org>,
Thomas Gleixner <tglx@kernel.org>,
Petr Pavlu <petr.pavlu@suse.com>,
Willem de Bruijn <willemb@google.com>,
Maoyi Xie <maoyi.xie@ntu.edu.sg>,
Jiri Wiesner <jwiesner@suse.de>,
Zhan Xusheng <zhanxusheng1024@gmail.com>,
Gerd Rausch <gerd.rausch@oracle.com>,
Oleg Nesterov <oleg@redhat.com>,
Chia-Yu Chang <chia-yu.chang@nokia-bell-labs.com>,
Wyatt Feng <bronzed_45_vested@icloud.com>,
Yung Chih Su <yuuchihsu@gmail.com>,
Hannes Frederic Sowa <hannes@stressinduktion.org>,
Flavio Leitner <fbl@redhat.com>,
"Paul E. McKenney" <paulmck@kernel.org>,
Petr Mladek <pmladek@suse.com>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net v3 2/5] ipv4: fix shift-out-of-bounds in ip_rt_send_redirect()
Date: Tue, 3 Nov 2026 05:28:25 +0000 [thread overview]
Message-ID: <aulw7Bfq65l738px@google.com> (raw)
In-Reply-To: <20261101061331.286404-3-jiayuan.chen@linux.dev>
On Sun, 01 Nov 2026 14:12:00 +0800, Jiayuan Chen wrote:
> ip_rt_redirect_number is the max number of ICMP Redirects we send to one
> endpoint; once we hit it we stop. Before that, ip_rt_redirect_load gives
> the redirects an exponential backoff:
>
> if (peer->n_redirects == 0 ||
> time_after(jiffies,
> (peer->rate_last +
> (ip_rt_redirect_load << peer->n_redirects)))) {
>
> n_redirects grows until it reaches ip_rt_redirect_number, and both
> redirect_number and redirect_load are plain proc_dointvec sysctls with
> no upper bound. Set redirect_number past 32 and n_redirects climbs past
> 31, so "ip_rt_redirect_load << peer->n_redirects" shifts a 32-bit int by
> >= 32 bits, which is UB:
>
> UBSAN: shift-out-of-bounds in net/ipv4/route.c:949:6
> shift exponent 32 is too large for 32-bit type 'int'
> CPU: 1 UID: 0 PID: 1845 Comm: ping Not tainted 7.3.0-rc7+ #364 PREEMPT
> Call Trace:
> <IRQ>
> dump_stack_lvl+0xc1/0xf0
> dump_stack+0x10/0x20
> __ubsan_handle_shift_out_of_bounds+0x1d1/0x390
> ip_rt_send_redirect.cold+0x2c/0x146
> ip_forward+0x1ddc/0x2430
> ip_rcv+0x2b1/0x320
> __netif_receive_skb_one_core+0x16b/0x1c0
> __netif_receive_skb+0x21/0x150
> process_backlog+0x37e/0x1200
> __napi_poll.constprop.0+0xa5/0x5e0
> net_rx_action+0x4c0/0xf70
>
> Bounding redirect_number instead is not an option: 0 disables redirects
> and -1 removes the cap. Compute the backoff in u64 with the shift count
> capped at 31, which cannot overflow once ip_rt_redirect_load is
> non-negative, and clamp the result to MAX_JIFFY_OFFSET: on 32-bit a
> backoff of 2^31 or more is read by time_after() as already expired. This
> keeps redirect_number as the limit on how many ICMP redirects are sent,
> and the shift can no longer go out of bounds.
>
> redirect_load on the other hand gets a lower bound of 0. A negative
> backoff never meant anything, the old code only happened to treat it as
> no backoff, and once converted to u64 it would turn into the maximum
> backoff instead.
>
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Cc: stable@vger.kernel.org
> Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
> Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
next prev parent reply other threads:[~2026-11-03 5:28 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-01 6:11 [PATCH net v3 0/5] net: fix misc signed overflows caused by bad sysctl values Jiayuan Chen
2026-11-01 6:11 ` [PATCH net v3 1/5] ipv6: restrict gc_elasticity to 31 Jiayuan Chen
2026-11-02 1:25 ` Hangbin Liu
2026-11-01 6:12 ` [PATCH net v3 2/5] ipv4: fix shift-out-of-bounds in ip_rt_send_redirect() Jiayuan Chen
2026-11-03 5:28 ` Kuniyuki Iwashima [this message]
2026-11-01 6:12 ` [PATCH net v3 3/5] ipv6: restrict mld_qrv to 255 Jiayuan Chen
2026-11-01 10:23 ` Nikolay Aleksandrov
2026-11-02 1:31 ` Hangbin Liu
2026-11-03 5:29 ` Kuniyuki Iwashima
2026-11-01 6:12 ` [PATCH net v3 4/5] ipv4: restrict igmp_qrv " Jiayuan Chen
2026-11-02 1:29 ` Hangbin Liu
2026-11-03 5:29 ` Kuniyuki Iwashima
2026-11-01 6:12 ` [PATCH net v3 5/5] net: restrict message_cost and message_burst to non-negative values Jiayuan Chen
2026-11-02 1:55 ` Hangbin Liu
2026-11-02 2:23 ` Jiayuan Chen
2026-11-02 3:32 ` Hangbin Liu
2026-11-03 5:30 ` Kuniyuki Iwashima
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=aulw7Bfq65l738px@google.com \
--to=kuniyu@google.com \
--cc=bronzed_45_vested@icloud.com \
--cc=chia-yu.chang@nokia-bell-labs.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@kernel.org \
--cc=fbl@redhat.com \
--cc=fmancera@suse.de \
--cc=gerd.rausch@oracle.com \
--cc=hannes@stressinduktion.org \
--cc=horms@kernel.org \
--cc=idosch@nvidia.com \
--cc=jiayuan.chen@linux.dev \
--cc=joel.granados@kernel.org \
--cc=jwiesner@suse.de \
--cc=kuba@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maoyi.xie@ntu.edu.sg \
--cc=netdev@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=pabeni@redhat.com \
--cc=paulmck@kernel.org \
--cc=petr.pavlu@suse.com \
--cc=pmladek@suse.com \
--cc=rdunlap@infradead.org \
--cc=skhan@linuxfoundation.org \
--cc=stable@vger.kernel.org \
--cc=tglx@kernel.org \
--cc=willemb@google.com \
--cc=yuuchihsu@gmail.com \
--cc=zhanxusheng1024@gmail.com \
/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.