diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/core/scm.c | 4 | ||||
-rw-r--r-- | net/unix/af_unix.c | 6 |
2 files changed, 6 insertions, 4 deletions
diff --git a/net/core/scm.c b/net/core/scm.c index 530bee8d9ed9..100ba6d9d478 100644 --- a/net/core/scm.c +++ b/net/core/scm.c | |||
@@ -24,6 +24,8 @@ | |||
24 | #include <linux/interrupt.h> | 24 | #include <linux/interrupt.h> |
25 | #include <linux/netdevice.h> | 25 | #include <linux/netdevice.h> |
26 | #include <linux/security.h> | 26 | #include <linux/security.h> |
27 | #include <linux/pid.h> | ||
28 | #include <linux/nsproxy.h> | ||
27 | 29 | ||
28 | #include <asm/system.h> | 30 | #include <asm/system.h> |
29 | #include <asm/uaccess.h> | 31 | #include <asm/uaccess.h> |
@@ -42,7 +44,7 @@ | |||
42 | 44 | ||
43 | static __inline__ int scm_check_creds(struct ucred *creds) | 45 | static __inline__ int scm_check_creds(struct ucred *creds) |
44 | { | 46 | { |
45 | if ((creds->pid == current->tgid || capable(CAP_SYS_ADMIN)) && | 47 | if ((creds->pid == task_tgid_vnr(current) || capable(CAP_SYS_ADMIN)) && |
46 | ((creds->uid == current->uid || creds->uid == current->euid || | 48 | ((creds->uid == current->uid || creds->uid == current->euid || |
47 | creds->uid == current->suid) || capable(CAP_SETUID)) && | 49 | creds->uid == current->suid) || capable(CAP_SETUID)) && |
48 | ((creds->gid == current->gid || creds->gid == current->egid || | 50 | ((creds->gid == current->gid || creds->gid == current->egid || |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 6996cba5aa96..9163ec526c2a 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -483,7 +483,7 @@ static int unix_listen(struct socket *sock, int backlog) | |||
483 | sk->sk_max_ack_backlog = backlog; | 483 | sk->sk_max_ack_backlog = backlog; |
484 | sk->sk_state = TCP_LISTEN; | 484 | sk->sk_state = TCP_LISTEN; |
485 | /* set credentials so connect can copy them */ | 485 | /* set credentials so connect can copy them */ |
486 | sk->sk_peercred.pid = current->tgid; | 486 | sk->sk_peercred.pid = task_tgid_vnr(current); |
487 | sk->sk_peercred.uid = current->euid; | 487 | sk->sk_peercred.uid = current->euid; |
488 | sk->sk_peercred.gid = current->egid; | 488 | sk->sk_peercred.gid = current->egid; |
489 | err = 0; | 489 | err = 0; |
@@ -1133,7 +1133,7 @@ restart: | |||
1133 | unix_peer(newsk) = sk; | 1133 | unix_peer(newsk) = sk; |
1134 | newsk->sk_state = TCP_ESTABLISHED; | 1134 | newsk->sk_state = TCP_ESTABLISHED; |
1135 | newsk->sk_type = sk->sk_type; | 1135 | newsk->sk_type = sk->sk_type; |
1136 | newsk->sk_peercred.pid = current->tgid; | 1136 | newsk->sk_peercred.pid = task_tgid_vnr(current); |
1137 | newsk->sk_peercred.uid = current->euid; | 1137 | newsk->sk_peercred.uid = current->euid; |
1138 | newsk->sk_peercred.gid = current->egid; | 1138 | newsk->sk_peercred.gid = current->egid; |
1139 | newu = unix_sk(newsk); | 1139 | newu = unix_sk(newsk); |
@@ -1194,7 +1194,7 @@ static int unix_socketpair(struct socket *socka, struct socket *sockb) | |||
1194 | sock_hold(skb); | 1194 | sock_hold(skb); |
1195 | unix_peer(ska)=skb; | 1195 | unix_peer(ska)=skb; |
1196 | unix_peer(skb)=ska; | 1196 | unix_peer(skb)=ska; |
1197 | ska->sk_peercred.pid = skb->sk_peercred.pid = current->tgid; | 1197 | ska->sk_peercred.pid = skb->sk_peercred.pid = task_tgid_vnr(current); |
1198 | ska->sk_peercred.uid = skb->sk_peercred.uid = current->euid; | 1198 | ska->sk_peercred.uid = skb->sk_peercred.uid = current->euid; |
1199 | ska->sk_peercred.gid = skb->sk_peercred.gid = current->egid; | 1199 | ska->sk_peercred.gid = skb->sk_peercred.gid = current->egid; |
1200 | 1200 | ||