All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Guodeqing (A)" <geffrey.guo@huawei.com>
To: David Ahern <dsahern@gmail.com>,
	"davem@davemloft.net" <davem@davemloft.net>
Cc: "kuba@kernel.org" <kuba@kernel.org>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>
Subject: 答复: [PATCH] ipv4: fix the problem of ping failure in some cases
Date: Mon, 24 Aug 2020 03:09:15 +0000	[thread overview]
Message-ID: <5d678cbd20fd4f8fbd2ac75e62aab458@huawei.com> (raw)
In-Reply-To: <63e26f77-ccf0-4c07-8eaf-e571dcf2204f@gmail.com>



> -----邮件原件-----
> 发件人: David Ahern [mailto:dsahern@gmail.com]
> 发送时间: Monday, August 24, 2020 10:34
> 收件人: Guodeqing (A) <geffrey.guo@huawei.com>; davem@davemloft.net
> 抄送: kuba@kernel.org; netdev@vger.kernel.org
> 主题: Re: [PATCH] ipv4: fix the problem of ping failure in some cases
> 
> On 8/23/20 8:27 PM, David Ahern wrote:
> > On 8/22/20 1:46 AM, guodeqing wrote:
> >> ie.,
> >> $ ifconfig eth0 9.9.9.9 netmask 255.255.255.0
> >>
> >> $ ping -I lo 9.9.9.9
> 
> If that ever worked it was wrong; the address is scoped to eth0, not lo.
> 
> >> ping: Warning: source address might be selected on device other than lo.
> >> PING 9.9.9.9 (9.9.9.9) from 9.9.9.9 lo: 56(84) bytes of data.
> >>
> >> 4 packets transmitted, 0 received, 100% packet loss, time 3068ms
> >>
> >> This is because the return value of __raw_v4_lookup in raw_v4_input
> >> is null, the packets cannot be sent to the ping application.
> >> The reason of the __raw_v4_lookup failure is that sk_bound_dev_if and
> >> dif/sdif are not equal in raw_sk_bound_dev_eq.
> >>
> >> Here I add a check of whether the sk_bound_dev_if is LOOPBACK_IFINDEX
> >> to solve this problem.
> >>
> >> Fixes: 19e4e768064a8 ("ipv4: Fix raw socket lookup for local
> >> traffic")
> >> Signed-off-by: guodeqing <geffrey.guo@huawei.com>
> >> ---
> >>  include/net/inet_sock.h | 2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index
> >> a3702d1..7707b1d 100644
> >> --- a/include/net/inet_sock.h
> >> +++ b/include/net/inet_sock.h
> >> @@ -144,7 +144,7 @@ static inline bool inet_bound_dev_eq(bool
> >> l3mdev_accept, int bound_dev_if,  {
> >>  	if (!bound_dev_if)
> >>  		return !sdif || l3mdev_accept;
> >> -	return bound_dev_if == dif || bound_dev_if == sdif;
> >> +	return bound_dev_if == dif || bound_dev_if == sdif || bound_dev_if
> >> +== LOOPBACK_IFINDEX;
> >>  }
> >>
> >>  struct inet_cork {
> >>
> >
> > this is used by more than just raw socket lookups.
> >
> 
> And assuming it should work, this is definitely the wrong fix.

ok, I see now. I misunderstood the function of the loopback interface, thanks.

      reply	other threads:[~2020-08-24  3:09 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-22  7:46 [PATCH] ipv4: fix the problem of ping failure in some cases guodeqing
2020-08-24  2:27 ` David Ahern
2020-08-24  2:33   ` David Ahern
2020-08-24  3:09     ` Guodeqing (A) [this message]

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=5d678cbd20fd4f8fbd2ac75e62aab458@huawei.com \
    --to=geffrey.guo@huawei.com \
    --cc=davem@davemloft.net \
    --cc=dsahern@gmail.com \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    /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.