From: Ido Schimmel <idosch@idosch.org>
To: David Ahern <dsahern@kernel.org>
Cc: kuba@kernel.org, davem@davemloft.net, pabeni@redhat.com,
netdev@vger.kernel.org, Gwangun Jung <exsociety@gmail.com>
Subject: Re: [PATCH net] ipv4: Handle attempt to delete multipath route when fib_info contains an nh reference
Date: Wed, 5 Oct 2022 22:08:03 +0300 [thread overview]
Message-ID: <Yz3WE+cBd9YUj7Bp@shredder> (raw)
In-Reply-To: <20221005181257.8897-1-dsahern@kernel.org>
On Wed, Oct 05, 2022 at 12:12:57PM -0600, David Ahern wrote:
> Gwangun Jung reported a slab-out-of-bounds access in fib_nh_match:
> fib_nh_match+0xf98/0x1130 linux-6.0-rc7/net/ipv4/fib_semantics.c:961
> fib_table_delete+0x5f3/0xa40 linux-6.0-rc7/net/ipv4/fib_trie.c:1753
> inet_rtm_delroute+0x2b3/0x380 linux-6.0-rc7/net/ipv4/fib_frontend.c:874
>
> Separate nexthop objects are mutually exclusive with the legacy
> multipath spec. Fix fib_nh_match to return if the config for the
> to be deleted route contains a multipath spec while the fib_info
> is using a nexthop object.
Cool bug... Managed to reproduce with:
# ip nexthop add id 1 blackhole
# ip route add 192.0.2.0/24 nhid 1
# ip route del 192.0.2.0/24 nexthop via 198.51.100.1 nexthop via 198.51.100.2
Maybe add to tools/testing/selftests/net/fib_nexthops.sh ?
Checked IPv6 and I don't think we can hit it there, but I will double
check tomorrow morning.
>
> Fixes: 493ced1ac47c ("ipv4: Allow routes to use nexthop objects")
> Reported-by: Gwangun Jung <exsociety@gmail.com>
> Signed-off-by: David Ahern <dsahern@kernel.org>
> ---
> net/ipv4/fib_semantics.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
> index 2dc97583d279..17caa73f57e6 100644
> --- a/net/ipv4/fib_semantics.c
> +++ b/net/ipv4/fib_semantics.c
> @@ -926,6 +926,10 @@ int fib_nh_match(struct net *net, struct fib_config *cfg, struct fib_info *fi,
> if (!cfg->fc_mp)
> return 0;
>
> + /* multipath spec and nexthop id are mutually exclusive */
> + if (fi->nh)
> + return 1;
> +
> rtnh = cfg->fc_mp;
> remaining = cfg->fc_mp_len;
There is already such a check above for the non-multipath check, maybe
we can just move it up to cover both cases? Something like:
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index 2dc97583d279..e9a7f70a54df 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -888,13 +888,13 @@ int fib_nh_match(struct net *net, struct fib_config *cfg, struct fib_info *fi,
return 1;
}
+ /* cannot match on nexthop object attributes */
+ if (fi->nh)
+ return 1;
+
if (cfg->fc_oif || cfg->fc_gw_family) {
struct fib_nh *nh;
- /* cannot match on nexthop object attributes */
- if (fi->nh)
- return 1;
-
nh = fib_info_nh(fi, 0);
if (cfg->fc_encap) {
if (fib_encap_match(net, cfg->fc_encap_type,
next prev parent reply other threads:[~2022-10-05 19:08 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-05 18:12 [PATCH net] ipv4: Handle attempt to delete multipath route when fib_info contains an nh reference David Ahern
2022-10-05 19:08 ` Ido Schimmel [this message]
2022-10-05 19:27 ` David Ahern
2022-10-06 6:49 ` Ido Schimmel
2022-10-06 7:29 ` Paolo Abeni
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=Yz3WE+cBd9YUj7Bp@shredder \
--to=idosch@idosch.org \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=exsociety@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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.