summaryrefslogtreecommitdiffstats
path: root/net/unix/diag.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/unix/diag.c')
-rw-r--r--net/unix/diag.c12
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
12static int sk_diag_dump_name(struct sock *sk, struct sk_buff *nlskb) 14static 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
116static 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
114static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_req *req, 122static 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