From: Jay Vosburgh <jay.vosburgh@canonical.com>
To: Hangbin Liu <liuhangbin@gmail.com>
Cc: netdev@vger.kernel.org, "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
Jonathan Toppins <jtoppins@redhat.com>,
Paolo Abeni <pabeni@redhat.com>, David Ahern <dsahern@gmail.com>,
Tom Herbert <tom@herbertland.com>,
Eric Dumazet <edumazet@google.com>, Liang Li <liali@redhat.com>,
Eric Dumazet <eric.dumazet@gmail.com>
Subject: Re: [PATCHv4 net] bonding: fix ICMPv6 header handling when receiving IPv6 messages
Date: Thu, 17 Nov 2022 20:36:07 -0800 [thread overview]
Message-ID: <12965.1668746167@famine> (raw)
In-Reply-To: <20221118034353.1736727-1-liuhangbin@gmail.com>
Hangbin Liu <liuhangbin@gmail.com> wrote:
>Currently, we get icmp6hdr via function icmp6_hdr(), which needs the skb
>transport header to be set first. But there is no rule to ask driver set
>transport header before netif_receive_skb() and bond_handle_frame(). So
>we will not able to get correct icmp6hdr on some drivers.
>
>Fix this by using skb_header_pointer to get the IPv6 and ICMPV6 headers.
>
>Reported-by: Liang Li <liali@redhat.com>
>Fixes: 4e24be018eb9 ("bonding: add new parameter ns_targets")
>Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>
>Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Jay Vosburgh <jay.vosburgh@canonical.com>
>---
>v4: get the full ipv6+icmp6 hdr in case the skb is not lineared
>v3: fix _hdr parameter warning reported by kernel test robot
>v2: use skb_header_pointer() to get icmp6hdr as Jay suggested.
>---
> drivers/net/bonding/bond_main.c | 17 ++++++++++++-----
> 1 file changed, 12 insertions(+), 5 deletions(-)
>
>diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
>index e84c49bf4d0c..f298b9b3eb77 100644
>--- a/drivers/net/bonding/bond_main.c
>+++ b/drivers/net/bonding/bond_main.c
>@@ -3231,16 +3231,23 @@ static int bond_na_rcv(const struct sk_buff *skb, struct bonding *bond,
> struct slave *slave)
> {
> struct slave *curr_active_slave, *curr_arp_slave;
>- struct icmp6hdr *hdr = icmp6_hdr(skb);
> struct in6_addr *saddr, *daddr;
>+ struct {
>+ struct ipv6hdr ip6;
>+ struct icmp6hdr icmp6;
>+ } *combined, _combined;
>
> if (skb->pkt_type == PACKET_OTHERHOST ||
>- skb->pkt_type == PACKET_LOOPBACK ||
>- hdr->icmp6_type != NDISC_NEIGHBOUR_ADVERTISEMENT)
>+ skb->pkt_type == PACKET_LOOPBACK)
>+ goto out;
>+
>+ combined = skb_header_pointer(skb, 0, sizeof(_combined), &_combined);
>+ if (!combined || combined->ip6.nexthdr != NEXTHDR_ICMP ||
>+ combined->icmp6.icmp6_type != NDISC_NEIGHBOUR_ADVERTISEMENT)
> goto out;
>
>- saddr = &ipv6_hdr(skb)->saddr;
>- daddr = &ipv6_hdr(skb)->daddr;
>+ saddr = &combined->ip6.saddr;
>+ daddr = &combined->ip6.saddr;
>
> slave_dbg(bond->dev, slave->dev, "%s: %s/%d av %d sv %d sip %pI6c tip %pI6c\n",
> __func__, slave->dev->name, bond_slave_state(slave),
>--
>2.38.1
>
next prev parent reply other threads:[~2022-11-18 4:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-18 3:43 [PATCHv4 net] bonding: fix ICMPv6 header handling when receiving IPv6 messages Hangbin Liu
2022-11-18 3:56 ` Eric Dumazet
2022-11-18 4:36 ` Jay Vosburgh [this message]
2022-11-19 3:50 ` patchwork-bot+netdevbpf
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=12965.1668746167@famine \
--to=jay.vosburgh@canonical.com \
--cc=davem@davemloft.net \
--cc=dsahern@gmail.com \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=jtoppins@redhat.com \
--cc=kuba@kernel.org \
--cc=liali@redhat.com \
--cc=liuhangbin@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=tom@herbertland.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.