netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Gur Stavi <gur.stavi@huawei.com>
To: 'Willem de Bruijn' <willemdebruijn.kernel@gmail.com>
Cc: <davem@davemloft.net>, <edumazet@google.com>, <kuba@kernel.org>,
	<linux-kernel@vger.kernel.org>, <linux-kselftest@vger.kernel.org>,
	<netdev@vger.kernel.org>, <pabeni@redhat.com>, <shuah@kernel.org>
Subject: RE: [PATCH net-next v02 1/2] af_packet: allow fanout_add when socket is not RUNNING
Date: Wed, 9 Oct 2024 21:03:41 +0300	[thread overview]
Message-ID: <002201db1a75$9a83b420$cf8b1c60$@huawei.com> (raw)
In-Reply-To: <67068a44bff02_1cca3129431@willemb.c.googlers.com.notmuch>

> Gur Stavi wrote:
> > >> @@ -1846,21 +1846,21 @@ static int fanout_add(struct sock *sk,
> struct fanout_args *args)
> > >>  	err = -EINVAL;
> > >>
> > >>  	spin_lock(&po->bind_lock);
> > >> -	if (packet_sock_flag(po, PACKET_SOCK_RUNNING) &&
> > >> -	    match->type == type &&
> > >> +	if (match->type == type &&
> > >>  	    match->prot_hook.type == po->prot_hook.type &&
> > >>  	    match->prot_hook.dev == po->prot_hook.dev) {
> > >
> > > Remaining unaddressed issue is that the socket can now be added
> > > before being bound. See comment in v1.
> >
> > I extended the psock_fanout test with unbound fanout test.
> >
> > As far as I understand, the easiest way to verify bind is to test that
> > po->prot_hook.dev != NULL, since we are under a bind_lock anyway.
> > But perhaps a more readable and direct approach to test "bind" would be
> > to test po->ifindex != -1, as ifindex is commented as "bound device".
> > However, at the moment ifindex is not initialized to -1, I can add such
> > initialization, but perhaps I do not fully understand all the logic.
> >
> > Any preferences?
> 
> prot_hook.dev is not necessarily set if a packet socket is bound.
> It may be bound to any device. See dev_add_pack and ptype_head.
> 
> prot_hook.type, on the other hand, must be set if bound and is only
> modified with the bind_lock held too.
> 
> Well, and in packet_create. But setsockopt PACKET_FANOUT_ADD also
> succeeds in case bind() was not called explicitly first to bind to
> a specific device or change ptype.

Please clarify the last paragraph? When you say "also succeeds" do you
mean SHOULD succeed or MAY SUCCEED by mistake if "something" happens ???

Do you refer to the following scenario: socket is created with non-zero
protocol and becomes RUNNING "without bind" for all devices. In that case
it can be added to FANOUT without bind. Is that considered a bug or does
the bind requirement for fanout only apply for all-protocol (0) sockets?

What about using ifindex to detect bind? Initialize it to -1 in
packet_create and ensure that packet_do_bind, on success, sets it
to device id or 0?

psock_fanout, should probably be extended with scenarios that test
"all devices" and all/specific protocols. Any specific scenario
suggestions?



  reply	other threads:[~2024-10-09 18:04 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-08 10:27 [PATCH net-next v02 0/2] net: af_packet: allow joining a fanout when link is down Gur Stavi
2024-10-08 10:27 ` [PATCH net-next v02 1/2] af_packet: allow fanout_add when socket is not RUNNING Gur Stavi
2024-10-08 14:26   ` Willem de Bruijn
2024-10-09  6:58     ` Gur Stavi
2024-10-09 13:51       ` Willem de Bruijn
2024-10-09 18:03         ` Gur Stavi [this message]
2024-10-10  0:30           ` Willem de Bruijn
2024-10-10  7:08             ` Gur Stavi
2024-10-10 14:21               ` Willem de Bruijn
2024-10-10 16:14                 ` Gur Stavi
2024-10-10 22:12                   ` Willem de Bruijn
2024-10-11  5:17                     ` Gur Stavi
2024-10-11 14:24                       ` Willem de Bruijn
2024-10-11  9:02                     ` Gur Stavi
2024-10-11 14:35                       ` Willem de Bruijn
2024-10-11 17:12                         ` Gur Stavi
2024-10-11 19:08                           ` Willem de Bruijn
2024-10-10 11:49             ` Gur Stavi
2024-10-08 10:27 ` [PATCH net-next v02 2/2] selftests: net/psock_fanout: socket joins fanout when link is down Gur Stavi

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='002201db1a75$9a83b420$cf8b1c60$@huawei.com' \
    --to=gur.stavi@huawei.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=shuah@kernel.org \
    --cc=willemdebruijn.kernel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).