All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kuniyuki Iwashima <kuniyu@amazon.com>
To: <tkhai@ya.ru>
Cc: <davem@davemloft.net>, <edumazet@google.com>, <kuba@kernel.org>,
	<kuniyu@amazon.com>, <netdev@vger.kernel.org>,
	<pabeni@redhat.com>
Subject: Re: [PATCH net-next v2] unix: Improve locking scheme in unix_show_fdinfo()
Date: Sat, 14 Jan 2023 18:59:11 +0900	[thread overview]
Message-ID: <20230114095911.5039-1-kuniyu@amazon.com> (raw)
In-Reply-To: <c6c7084c-56c7-cd37-befe-df718e080597@ya.ru>

From:   Kirill Tkhai <tkhai@ya.ru>
Date:   Sat, 14 Jan 2023 12:35:02 +0300
> After switching to TCP_ESTABLISHED or TCP_LISTEN sk_state, alive SOCK_STREAM
> and SOCK_SEQPACKET sockets can't change it anymore (since commit 3ff8bff704f4
> "unix: Fix race in SOCK_SEQPACKET's unix_dgram_sendmsg()").
> 
> Thus, we do not need to take lock here.
> 
> Signed-off-by: Kirill Tkhai <tkhai@ya.ru>
> ---
> v2: Initialize "nr_fds = 0".

Yes, this is necessary because the new if-else does not cover
(SOCK_STREAM, TCP_CLOSE), and in such a case, nr_fds is
uninitialised val with the v1 patch.

This version looks good.

Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>


> 
>  net/unix/af_unix.c |   20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
> index f0c2293f1d3b..009616fa0256 100644
> --- a/net/unix/af_unix.c
> +++ b/net/unix/af_unix.c
> @@ -807,23 +807,23 @@ static int unix_count_nr_fds(struct sock *sk)
>  static void unix_show_fdinfo(struct seq_file *m, struct socket *sock)
>  {
>  	struct sock *sk = sock->sk;
> +	unsigned char s_state;
>  	struct unix_sock *u;
> -	int nr_fds;
> +	int nr_fds = 0;
>  
>  	if (sk) {
> +		s_state = READ_ONCE(sk->sk_state);
>  		u = unix_sk(sk);
> -		if (sock->type == SOCK_DGRAM) {
> -			nr_fds = atomic_read(&u->scm_stat.nr_fds);
> -			goto out_print;
> -		}
>  
> -		unix_state_lock(sk);
> -		if (sk->sk_state != TCP_LISTEN)
> +		/* SOCK_STREAM and SOCK_SEQPACKET sockets never change their
> +		 * sk_state after switching to TCP_ESTABLISHED or TCP_LISTEN.
> +		 * SOCK_DGRAM is ordinary. So, no lock is needed.
> +		 */
> +		if (sock->type == SOCK_DGRAM || s_state == TCP_ESTABLISHED)
>  			nr_fds = atomic_read(&u->scm_stat.nr_fds);
> -		else
> +		else if (s_state == TCP_LISTEN)
>  			nr_fds = unix_count_nr_fds(sk);
> -		unix_state_unlock(sk);
> -out_print:
> +
>  		seq_printf(m, "scm_fds: %u\n", nr_fds);
>  	}
>  }

  reply	other threads:[~2023-01-14  9:59 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-14  9:35 [PATCH net-next v2] unix: Improve locking scheme in unix_show_fdinfo() Kirill Tkhai
2023-01-14  9:59 ` Kuniyuki Iwashima [this message]
2023-01-16 11:30 ` 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=20230114095911.5039-1-kuniyu@amazon.com \
    --to=kuniyu@amazon.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=tkhai@ya.ru \
    /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.