Message ID | 20220531084544.15126-1-tariqt@nvidia.com (mailing list archive) |
---|---|
State | Accepted |
Commit | e6652a8ef3e64d953168a95878fe29b934ad78ac |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,V3] net: ping6: Fix ping -6 with interface name | expand |
On 5/31/22 2:45 AM, Tariq Toukan wrote: > From: Aya Levin <ayal@nvidia.com> > > When passing interface parameter to ping -6: > $ ping -6 ::11:141:84:9 -I eth2 > Results in: > PING ::11:141:84:10(::11:141:84:10) from ::11:141:84:9 eth2: 56 data bytes > ping: sendmsg: Invalid argument > ping: sendmsg: Invalid argument > > Initialize the fl6's outgoing interface (OIF) before triggering > ip6_datagram_send_ctl. Don't wipe fl6 after ip6_datagram_send_ctl() as > changes in fl6 that may happen in the function are overwritten explicitly. > Update comment accordingly. > > Fixes: 13651224c00b ("net: ping6: support setting basic SOL_IPV6 options via cmsg") > Signed-off-by: Aya Levin <ayal@nvidia.com> > Reviewed-by: Gal Pressman <gal@nvidia.com> > Reviewed-by: Saeed Mahameed <saeedm@nvidia.com> > Signed-off-by: Tariq Toukan <tariqt@nvidia.com> > --- > net/ipv6/ping.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > V3: > Per David Ahern's comment, moved fl6.flowi6_oif init to the > shared flow right after the memset. > > V2: > Per David Ahern's comment, moved memset before if (msg->msg_controllen), > and updated the code comment accordingly. > Reviewed-by: David Ahern <dsahern@kernel.org> The patch set with the Fixes tag added selftests using cmsg_sender.c. You can extend it to support IPV6_PKTINFO and submit a selftest for this case to -next when it opens.
On 5/31/2022 5:31 PM, David Ahern wrote: > On 5/31/22 2:45 AM, Tariq Toukan wrote: >> From: Aya Levin <ayal@nvidia.com> >> >> When passing interface parameter to ping -6: >> $ ping -6 ::11:141:84:9 -I eth2 >> Results in: >> PING ::11:141:84:10(::11:141:84:10) from ::11:141:84:9 eth2: 56 data bytes >> ping: sendmsg: Invalid argument >> ping: sendmsg: Invalid argument >> >> Initialize the fl6's outgoing interface (OIF) before triggering >> ip6_datagram_send_ctl. Don't wipe fl6 after ip6_datagram_send_ctl() as >> changes in fl6 that may happen in the function are overwritten explicitly. >> Update comment accordingly. >> >> Fixes: 13651224c00b ("net: ping6: support setting basic SOL_IPV6 options via cmsg") >> Signed-off-by: Aya Levin <ayal@nvidia.com> >> Reviewed-by: Gal Pressman <gal@nvidia.com> >> Reviewed-by: Saeed Mahameed <saeedm@nvidia.com> >> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> >> --- >> net/ipv6/ping.c | 8 ++++---- >> 1 file changed, 4 insertions(+), 4 deletions(-) >> >> V3: >> Per David Ahern's comment, moved fl6.flowi6_oif init to the >> shared flow right after the memset. >> >> V2: >> Per David Ahern's comment, moved memset before if (msg->msg_controllen), >> and updated the code comment accordingly. >> > > Reviewed-by: David Ahern <dsahern@kernel.org> Thanks for the review. > > The patch set with the Fixes tag added selftests using cmsg_sender.c. > You can extend it to support IPV6_PKTINFO and submit a selftest for this > case to -next when it opens. I'll submit the selftest extension in the coming window Aya
Hello: This patch was applied to netdev/net.git (master) by Paolo Abeni <pabeni@redhat.com>: On Tue, 31 May 2022 11:45:44 +0300 you wrote: > From: Aya Levin <ayal@nvidia.com> > > When passing interface parameter to ping -6: > $ ping -6 ::11:141:84:9 -I eth2 > Results in: > PING ::11:141:84:10(::11:141:84:10) from ::11:141:84:9 eth2: 56 data bytes > ping: sendmsg: Invalid argument > ping: sendmsg: Invalid argument > > [...] Here is the summary with links: - [net,V3] net: ping6: Fix ping -6 with interface name https://git.kernel.org/netdev/net/c/e6652a8ef3e6 You are awesome, thank you!
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c index ff033d16549e..ecf3a553a0dc 100644 --- a/net/ipv6/ping.c +++ b/net/ipv6/ping.c @@ -101,6 +101,9 @@ static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) ipc6.sockc.tsflags = sk->sk_tsflags; ipc6.sockc.mark = sk->sk_mark; + memset(&fl6, 0, sizeof(fl6)); + fl6.flowi6_oif = oif; + if (msg->msg_controllen) { struct ipv6_txoptions opt = {}; @@ -112,17 +115,14 @@ static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) return err; /* Changes to txoptions and flow info are not implemented, yet. - * Drop the options, fl6 is wiped below. + * Drop the options. */ ipc6.opt = NULL; } - memset(&fl6, 0, sizeof(fl6)); - fl6.flowi6_proto = IPPROTO_ICMPV6; fl6.saddr = np->saddr; fl6.daddr = *daddr; - fl6.flowi6_oif = oif; fl6.flowi6_mark = ipc6.sockc.mark; fl6.flowi6_uid = sk->sk_uid; fl6.fl6_icmp_type = user_icmph.icmp6_type;