net, pidfd: report EINVAL for ESRCH
dbus-broker relies -EINVAL being returned to indicate ESRCH in [1]. This causes issues for some workloads as reported in [2]. Paper over it until this is fixed in userspace. Link: https://lore.kernel.org/20250416-gegriffen-tiefbau-70cfecb80ac8@brauner Link: https://github.com/bus1/dbus-broker/blob/5d34d91b138fc802a016aa68c093eb81ea31139c/src/util/sockopt.c#L241 [1] Link: https://lore.kernel.org/20250415223454.GA1852104@ax162 [2] Tested-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
+9
-1
@@ -1893,8 +1893,16 @@ int sk_getsockopt(struct sock *sk, int level, int optname,
|
||||
|
||||
pidfd = pidfd_prepare(peer_pid, 0, &pidfd_file);
|
||||
put_pid(peer_pid);
|
||||
if (pidfd < 0)
|
||||
if (pidfd < 0) {
|
||||
/*
|
||||
* dbus-broker relies on -EINVAL being returned
|
||||
* to indicate ESRCH. Paper over it until this
|
||||
* is fixed in userspace.
|
||||
*/
|
||||
if (pidfd == -ESRCH)
|
||||
pidfd = -EINVAL;
|
||||
return pidfd;
|
||||
}
|
||||
|
||||
if (copy_to_sockptr(optval, &pidfd, len) ||
|
||||
copy_to_sockptr(optlen, &len, sizeof(int))) {
|
||||
|
||||
Reference in New Issue
Block a user