All of lore.kernel.org
 help / color / mirror / Atom feed
From: Florian Westphal <fw@strlen.de>
To: Eric Dumazet <edumazet@google.com>
Cc: "David S . Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Pablo Neira Ayuso <pablo@netfilter.org>,
	netdev@vger.kernel.org, netfilter-devel@vger.kernel.org,
	coreteam@netfilter.org, eric.dumazet@gmail.com
Subject: Re: [PATCH nf-next] netfilter: nf_log_syslog: no longer acquire sk_callback_lock in nf_log_dump_sk_uid_gid()
Date: Tue, 24 Feb 2026 13:54:16 +0100	[thread overview]
Message-ID: <aZ2feO_xVKN8bT3g@strlen.de> (raw)
In-Reply-To: <20260224123347.3163030-1-edumazet@google.com>

Eric Dumazet <edumazet@google.com> wrote:
> After commit 983512f3a87f ("net: Drop the lock in skb_may_tx_timestamp()")
> from Sebastian Andrzej Siewior, apply the same logic in nf_log_dump_sk_uid_gid()
> to avoid touching sk_callback_lock.
> 
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> ---
>  net/netfilter/nf_log_syslog.c | 18 ++++++++++++++----
>  1 file changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/net/netfilter/nf_log_syslog.c b/net/netfilter/nf_log_syslog.c
> index 41503847d9d7fb21824fabb1b57b45f2622b9310..dee6be17440c6c0f202fc2ba67129437879e45a6 100644
> --- a/net/netfilter/nf_log_syslog.c
> +++ b/net/netfilter/nf_log_syslog.c
> @@ -165,18 +165,28 @@ static struct nf_logger nf_arp_logger __read_mostly = {
>  static void nf_log_dump_sk_uid_gid(struct net *net, struct nf_log_buf *m,
>  				   struct sock *sk)
>  {
> +	const struct socket *sock;
> +	const struct file *file;
> +
>  	if (!sk || !sk_fullsock(sk) || !net_eq(net, sock_net(sk)))
>  		return;
>  
> -	read_lock_bh(&sk->sk_callback_lock);
> -	if (sk->sk_socket && sk->sk_socket->file) {
> -		const struct cred *cred = sk->sk_socket->file->f_cred;
> +	/* The sk pointer remains valid as long as the skb is. The sk_socket and
> +	 * file pointer may become NULL if the socket is closed. Both structures
> +	 * (including file->cred) are RCU freed which means they can be accessed
> +	 * within a RCU read section.
> +	 */
> +	rcu_read_lock();
> +	sock = READ_ONCE(sk->sk_socket);
> +	file = sock ? READ_ONCE(sock->file) : NULL;
> +	if (file) {
> +		const struct cred *cred = file->f_cred;
>  
>  		nf_log_buf_add(m, "UID=%u GID=%u ",
>  			       from_kuid_munged(&init_user_ns, cred->fsuid),
>  			       from_kgid_munged(&init_user_ns, cred->fsgid));
>  	}
> -	read_unlock_bh(&sk->sk_callback_lock);
> +	rcu_read_unlock();

Thanks Eric!  The explicit rcu_read_lock()/unlock are not required,
caller guarantees RCU read-side section.

Aside of that nit:
Reviewed-by: Florian Westphal <fw@strlen.de>


      reply	other threads:[~2026-02-24 12:54 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-24 12:33 [PATCH nf-next] netfilter: nf_log_syslog: no longer acquire sk_callback_lock in nf_log_dump_sk_uid_gid() Eric Dumazet
2026-02-24 12:54 ` Florian Westphal [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=aZ2feO_xVKN8bT3g@strlen.de \
    --to=fw@strlen.de \
    --cc=coreteam@netfilter.org \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=eric.dumazet@gmail.com \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=pablo@netfilter.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.