Unverified Commit b590c928 authored by Christian Brauner's avatar Christian Brauner
Browse files

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: default avatarNathan Chancellor <nathan@kernel.org>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 0a36bad0
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -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))) {