diff options
Diffstat (limited to 'net/unix/diag.c')
-rw-r--r-- | net/unix/diag.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/net/unix/diag.c b/net/unix/diag.c index c51a707260fa..9ff64f9df1f3 100644 --- a/net/unix/diag.c +++ b/net/unix/diag.c | |||
@@ -5,9 +5,11 @@ | |||
5 | #include <linux/unix_diag.h> | 5 | #include <linux/unix_diag.h> |
6 | #include <linux/skbuff.h> | 6 | #include <linux/skbuff.h> |
7 | #include <linux/module.h> | 7 | #include <linux/module.h> |
8 | #include <linux/uidgid.h> | ||
8 | #include <net/netlink.h> | 9 | #include <net/netlink.h> |
9 | #include <net/af_unix.h> | 10 | #include <net/af_unix.h> |
10 | #include <net/tcp_states.h> | 11 | #include <net/tcp_states.h> |
12 | #include <net/sock.h> | ||
11 | 13 | ||
12 | static int sk_diag_dump_name(struct sock *sk, struct sk_buff *nlskb) | 14 | static int sk_diag_dump_name(struct sock *sk, struct sk_buff *nlskb) |
13 | { | 15 | { |
@@ -111,6 +113,12 @@ static int sk_diag_show_rqlen(struct sock *sk, struct sk_buff *nlskb) | |||
111 | return nla_put(nlskb, UNIX_DIAG_RQLEN, sizeof(rql), &rql); | 113 | return nla_put(nlskb, UNIX_DIAG_RQLEN, sizeof(rql), &rql); |
112 | } | 114 | } |
113 | 115 | ||
116 | static int sk_diag_dump_uid(struct sock *sk, struct sk_buff *nlskb) | ||
117 | { | ||
118 | uid_t uid = from_kuid_munged(sk_user_ns(nlskb->sk), sock_i_uid(sk)); | ||
119 | return nla_put(nlskb, UNIX_DIAG_UID, sizeof(uid_t), &uid); | ||
120 | } | ||
121 | |||
114 | static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req, | 122 | static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req, |
115 | u32 portid, u32 seq, u32 flags, int sk_ino) | 123 | u32 portid, u32 seq, u32 flags, int sk_ino) |
116 | { | 124 | { |
@@ -157,6 +165,10 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r | |||
157 | if (nla_put_u8(skb, UNIX_DIAG_SHUTDOWN, sk->sk_shutdown)) | 165 | if (nla_put_u8(skb, UNIX_DIAG_SHUTDOWN, sk->sk_shutdown)) |
158 | goto out_nlmsg_trim; | 166 | goto out_nlmsg_trim; |
159 | 167 | ||
168 | if ((req->udiag_show & UDIAG_SHOW_UID) && | ||
169 | sk_diag_dump_uid(sk, skb)) | ||
170 | goto out_nlmsg_trim; | ||
171 | |||
160 | nlmsg_end(skb, nlh); | 172 | nlmsg_end(skb, nlh); |
161 | return 0; | 173 | return 0; |
162 | 174 | ||