All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net/unix: use consistent error code in SO_PEERPIDFD
@ 2023-08-07  8:12 David Rheinsberg
  2023-08-07  8:19 ` Alexander Mikhalitsyn
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: David Rheinsberg @ 2023-08-07  8:12 UTC (permalink / raw)
  To: netdev
  Cc: Alexander Mikhalitsyn, Christian Brauner, David S . Miller,
	Stanislav Fomichev, Luca Boccassi, Eric Dumazet,
	David Rheinsberg

Change the new (unreleased) SO_PEERPIDFD sockopt to return ENODATA
rather than ESRCH if a socket type does not support remote peer-PID
queries.

Currently, SO_PEERPIDFD returns ESRCH when the socket in question is
not an AF_UNIX socket. This is quite unexpected, given that one would
assume ESRCH means the peer process already exited and thus cannot be
found. However, in that case the sockopt actually returns EINVAL (via
pidfd_prepare()). This is rather inconsistent with other syscalls, which
usually return ESRCH if a given PID refers to a non-existant process.

This changes SO_PEERPIDFD to return ENODATA instead. This is also what
SO_PEERGROUPS returns, and thus keeps a consistent behavior across
sockopts.

Note that this code is returned in 2 cases: First, if the socket type is
not AF_UNIX, and secondly if the socket was not yet connected. In both
cases ENODATA seems suitable.

Signed-off-by: David Rheinsberg <david@readahead.eu>
---
Hi!

The SO_PEERPIDFD sockopt has been queued for 6.5, so hopefully we can
get that in before the release?

Thanks
David

 net/core/sock.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/core/sock.c b/net/core/sock.c
index 6d4f28efe29a..732fc37a4771 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1778,7 +1778,7 @@ int sk_getsockopt(struct sock *sk, int level, int optname,
 		spin_unlock(&sk->sk_peer_lock);
 
 		if (!peer_pid)
-			return -ESRCH;
+			return -ENODATA;
 
 		pidfd = pidfd_prepare(peer_pid, 0, &pidfd_file);
 		put_pid(peer_pid);
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] net/unix: use consistent error code in SO_PEERPIDFD
  2023-08-07  8:12 [PATCH] net/unix: use consistent error code in SO_PEERPIDFD David Rheinsberg
@ 2023-08-07  8:19 ` Alexander Mikhalitsyn
  2023-08-07  8:40 ` Christian Brauner
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Alexander Mikhalitsyn @ 2023-08-07  8:19 UTC (permalink / raw)
  To: David Rheinsberg
  Cc: netdev, Christian Brauner, David S . Miller, Stanislav Fomichev,
	Luca Boccassi, Eric Dumazet

On Mon, Aug 7, 2023 at 10:12 AM David Rheinsberg <david@readahead.eu> wrote:
>
> Change the new (unreleased) SO_PEERPIDFD sockopt to return ENODATA
> rather than ESRCH if a socket type does not support remote peer-PID
> queries.
>
> Currently, SO_PEERPIDFD returns ESRCH when the socket in question is
> not an AF_UNIX socket. This is quite unexpected, given that one would
> assume ESRCH means the peer process already exited and thus cannot be
> found. However, in that case the sockopt actually returns EINVAL (via
> pidfd_prepare()). This is rather inconsistent with other syscalls, which
> usually return ESRCH if a given PID refers to a non-existant process.
>
> This changes SO_PEERPIDFD to return ENODATA instead. This is also what
> SO_PEERGROUPS returns, and thus keeps a consistent behavior across
> sockopts.
>
> Note that this code is returned in 2 cases: First, if the socket type is
> not AF_UNIX, and secondly if the socket was not yet connected. In both
> cases ENODATA seems suitable.
>
> Signed-off-by: David Rheinsberg <david@readahead.eu>

Hi David!

I generally agree with this. But just to be more precise, l2cap
sockets (AF_BLUETOOTH) also properly
set ->sk_peer_pid and SO_PEERPIDFD will work just fine. This thing is
not limited
only to AF_UNIX sockets.

Kind regards,
Alex

> ---
> Hi!
>
> The SO_PEERPIDFD sockopt has been queued for 6.5, so hopefully we can
> get that in before the release?
>
> Thanks
> David
>
>  net/core/sock.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/core/sock.c b/net/core/sock.c
> index 6d4f28efe29a..732fc37a4771 100644
> --- a/net/core/sock.c
> +++ b/net/core/sock.c
> @@ -1778,7 +1778,7 @@ int sk_getsockopt(struct sock *sk, int level, int optname,
>                 spin_unlock(&sk->sk_peer_lock);
>
>                 if (!peer_pid)
> -                       return -ESRCH;
> +                       return -ENODATA;
>
>                 pidfd = pidfd_prepare(peer_pid, 0, &pidfd_file);
>                 put_pid(peer_pid);
> --
> 2.41.0
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] net/unix: use consistent error code in SO_PEERPIDFD
  2023-08-07  8:12 [PATCH] net/unix: use consistent error code in SO_PEERPIDFD David Rheinsberg
  2023-08-07  8:19 ` Alexander Mikhalitsyn
@ 2023-08-07  8:40 ` Christian Brauner
  2023-08-07  9:50 ` Luca Boccassi
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Christian Brauner @ 2023-08-07  8:40 UTC (permalink / raw)
  To: David Rheinsberg
  Cc: netdev, Alexander Mikhalitsyn, David S . Miller,
	Stanislav Fomichev, Luca Boccassi, Eric Dumazet

On Mon, Aug 07, 2023 at 10:12:25AM +0200, David Rheinsberg wrote:
> Change the new (unreleased) SO_PEERPIDFD sockopt to return ENODATA
> rather than ESRCH if a socket type does not support remote peer-PID
> queries.
> 
> Currently, SO_PEERPIDFD returns ESRCH when the socket in question is
> not an AF_UNIX socket. This is quite unexpected, given that one would
> assume ESRCH means the peer process already exited and thus cannot be
> found. However, in that case the sockopt actually returns EINVAL (via
> pidfd_prepare()). This is rather inconsistent with other syscalls, which
> usually return ESRCH if a given PID refers to a non-existant process.
> 
> This changes SO_PEERPIDFD to return ENODATA instead. This is also what
> SO_PEERGROUPS returns, and thus keeps a consistent behavior across
> sockopts.
> 
> Note that this code is returned in 2 cases: First, if the socket type is
> not AF_UNIX, and secondly if the socket was not yet connected. In both
> cases ENODATA seems suitable.
> 
> Signed-off-by: David Rheinsberg <david@readahead.eu>
> ---
> Hi!
> 
> The SO_PEERPIDFD sockopt has been queued for 6.5, so hopefully we can
> get that in before the release?

Shouldn't be an issue afaict.

Looks good to me,
Reviewed-by: Christian Brauner <brauner@kernel.org>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] net/unix: use consistent error code in SO_PEERPIDFD
  2023-08-07  8:12 [PATCH] net/unix: use consistent error code in SO_PEERPIDFD David Rheinsberg
  2023-08-07  8:19 ` Alexander Mikhalitsyn
  2023-08-07  8:40 ` Christian Brauner
@ 2023-08-07  9:50 ` Luca Boccassi
  2023-08-08 13:00 ` Simon Horman
  2023-08-08 23:40 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: Luca Boccassi @ 2023-08-07  9:50 UTC (permalink / raw)
  To: David Rheinsberg
  Cc: netdev, Alexander Mikhalitsyn, Christian Brauner,
	David S . Miller, Stanislav Fomichev, Eric Dumazet

On Mon, 7 Aug 2023 at 09:13, David Rheinsberg <david@readahead.eu> wrote:
>
> Change the new (unreleased) SO_PEERPIDFD sockopt to return ENODATA
> rather than ESRCH if a socket type does not support remote peer-PID
> queries.
>
> Currently, SO_PEERPIDFD returns ESRCH when the socket in question is
> not an AF_UNIX socket. This is quite unexpected, given that one would
> assume ESRCH means the peer process already exited and thus cannot be
> found. However, in that case the sockopt actually returns EINVAL (via
> pidfd_prepare()). This is rather inconsistent with other syscalls, which
> usually return ESRCH if a given PID refers to a non-existant process.
>
> This changes SO_PEERPIDFD to return ENODATA instead. This is also what
> SO_PEERGROUPS returns, and thus keeps a consistent behavior across
> sockopts.
>
> Note that this code is returned in 2 cases: First, if the socket type is
> not AF_UNIX, and secondly if the socket was not yet connected. In both
> cases ENODATA seems suitable.
>
> Signed-off-by: David Rheinsberg <david@readahead.eu>
> ---
> Hi!
>
> The SO_PEERPIDFD sockopt has been queued for 6.5, so hopefully we can
> get that in before the release?
>
> Thanks
> David
>
>  net/core/sock.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

As one of the first users of this new API, I am fine with this for 6.5, thanks.

Acked-by: Luca Boccassi <bluca@debian.org>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] net/unix: use consistent error code in SO_PEERPIDFD
  2023-08-07  8:12 [PATCH] net/unix: use consistent error code in SO_PEERPIDFD David Rheinsberg
                   ` (2 preceding siblings ...)
  2023-08-07  9:50 ` Luca Boccassi
@ 2023-08-08 13:00 ` Simon Horman
  2023-08-08 23:40 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: Simon Horman @ 2023-08-08 13:00 UTC (permalink / raw)
  To: David Rheinsberg
  Cc: netdev, Alexander Mikhalitsyn, Christian Brauner,
	David S . Miller, Stanislav Fomichev, Luca Boccassi,
	Eric Dumazet

On Mon, Aug 07, 2023 at 10:12:25AM +0200, David Rheinsberg wrote:
> Change the new (unreleased) SO_PEERPIDFD sockopt to return ENODATA
> rather than ESRCH if a socket type does not support remote peer-PID
> queries.
> 
> Currently, SO_PEERPIDFD returns ESRCH when the socket in question is
> not an AF_UNIX socket. This is quite unexpected, given that one would
> assume ESRCH means the peer process already exited and thus cannot be
> found. However, in that case the sockopt actually returns EINVAL (via
> pidfd_prepare()). This is rather inconsistent with other syscalls, which
> usually return ESRCH if a given PID refers to a non-existant process.
> 
> This changes SO_PEERPIDFD to return ENODATA instead. This is also what
> SO_PEERGROUPS returns, and thus keeps a consistent behavior across
> sockopts.
> 
> Note that this code is returned in 2 cases: First, if the socket type is
> not AF_UNIX, and secondly if the socket was not yet connected. In both
> cases ENODATA seems suitable.
> 
> Signed-off-by: David Rheinsberg <david@readahead.eu>
> ---
> Hi!
> 
> The SO_PEERPIDFD sockopt has been queued for 6.5, so hopefully we can
> get that in before the release?
> 
> Thanks
> David

As a fix, it should probably have a fixes tag.
This one seems appropriate.

Fixes: 7b26952a91cf ("net: core: add getsockopt SO_PEERPIDFD")

And the patch should be targeted at net

	Subject: [PATCH net] ...

It's probably not necessary to repost just to address these minor points.
But please consider them if you need to post a v2 for some other reason.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] net/unix: use consistent error code in SO_PEERPIDFD
  2023-08-07  8:12 [PATCH] net/unix: use consistent error code in SO_PEERPIDFD David Rheinsberg
                   ` (3 preceding siblings ...)
  2023-08-08 13:00 ` Simon Horman
@ 2023-08-08 23:40 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-08-08 23:40 UTC (permalink / raw)
  To: David Rheinsberg; +Cc: netdev, alexander, brauner, davem, sdf, bluca, edumazet

Hello:

This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Mon,  7 Aug 2023 10:12:25 +0200 you wrote:
> Change the new (unreleased) SO_PEERPIDFD sockopt to return ENODATA
> rather than ESRCH if a socket type does not support remote peer-PID
> queries.
> 
> Currently, SO_PEERPIDFD returns ESRCH when the socket in question is
> not an AF_UNIX socket. This is quite unexpected, given that one would
> assume ESRCH means the peer process already exited and thus cannot be
> found. However, in that case the sockopt actually returns EINVAL (via
> pidfd_prepare()). This is rather inconsistent with other syscalls, which
> usually return ESRCH if a given PID refers to a non-existant process.
> 
> [...]

Here is the summary with links:
  - net/unix: use consistent error code in SO_PEERPIDFD
    https://git.kernel.org/netdev/net/c/b6f79e826fbd

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-08-08 23:40 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-07  8:12 [PATCH] net/unix: use consistent error code in SO_PEERPIDFD David Rheinsberg
2023-08-07  8:19 ` Alexander Mikhalitsyn
2023-08-07  8:40 ` Christian Brauner
2023-08-07  9:50 ` Luca Boccassi
2023-08-08 13:00 ` Simon Horman
2023-08-08 23:40 ` patchwork-bot+netdevbpf

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.