Skip to content
Commit b6f79e82 authored by David Rheinsberg's avatar David Rheinsberg Committed by Jakub Kicinski
Browse files

net/unix: use consistent error code in SO_PEERPIDFD



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: default avatarDavid Rheinsberg <david@readahead.eu>
Reviewed-by: default avatarChristian Brauner <brauner@kernel.org>
Acked-by: default avatarLuca Boccassi <bluca@debian.org>
Fixes: 7b26952a ("net: core: add getsockopt SO_PEERPIDFD")
Link: https://lore.kernel.org/r/20230807081225.816199-1-david@readahead.eu


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent fa40ea27
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment