From 443d8a07dfa3fdd4379b4aac5f76700309d0a454 Mon Sep 17 00:00:00 2001 From: Conrad Meyer Date: Tue, 3 Nov 2020 01:19:13 +0000 Subject: [PATCH] linux(4): Emulate Linux SOL_SOCKET:SO_PASSCRED This is required by some major linux applications, such as Chrome and Firefox. (As well as Electron-using applications, which are essentially a bundled version of Chrome.) Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D27012 --- sys/compat/linux/linux_socket.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index 595500c1e21..2ac96dd6c92 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -222,6 +222,8 @@ linux_to_bsd_so_sockopt(int opt) return (SO_LINGER); case LINUX_SO_REUSEPORT: return (SO_REUSEPORT_LB); + case LINUX_SO_PASSCRED: + return (LOCAL_CREDS_PERSISTENT); case LINUX_SO_PEERCRED: return (LOCAL_PEERCRED); case LINUX_SO_RCVLOWAT: @@ -1445,6 +1447,9 @@ linux_setsockopt(struct thread *td, struct linux_setsockopt_args *args) case SOL_SOCKET: name = linux_to_bsd_so_sockopt(args->optname); switch (name) { + case LOCAL_CREDS_PERSISTENT: + level = SOL_LOCAL; + break; case SO_RCVTIMEO: /* FALLTHROUGH */ case SO_SNDTIMEO: @@ -1522,6 +1527,9 @@ linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args) case SOL_SOCKET: name = linux_to_bsd_so_sockopt(args->optname); switch (name) { + case LOCAL_CREDS_PERSISTENT: + level = SOL_LOCAL; + break; case SO_RCVTIMEO: /* FALLTHROUGH */ case SO_SNDTIMEO: