diff options
Diffstat (limited to 'net/core/sock.c')
| -rw-r--r-- | net/core/sock.c | 14 | 
1 files changed, 14 insertions, 0 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index f9ce0db41cd..db8335ad755 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -110,6 +110,7 @@  #include <linux/tcp.h>  #include <linux/init.h>  #include <linux/highmem.h> +#include <linux/user_namespace.h>  #include <asm/uaccess.h>  #include <asm/system.h> @@ -749,6 +750,19 @@ set_rcvbuf:  EXPORT_SYMBOL(sock_setsockopt); +void cred_to_ucred(struct pid *pid, const struct cred *cred, +		   struct ucred *ucred) +{ +	ucred->pid = pid_vnr(pid); +	ucred->uid = ucred->gid = -1; +	if (cred) { +		struct user_namespace *current_ns = current_user_ns(); + +		ucred->uid = user_ns_map_uid(current_ns, cred, cred->euid); +		ucred->gid = user_ns_map_gid(current_ns, cred, cred->egid); +	} +} +  int sock_getsockopt(struct socket *sock, int level, int optname,  		    char __user *optval, int __user *optlen)  {  |