diff options
author | Nicolas Dichtel <nicolas.dichtel@6wind.com> | 2013-04-25 06:53:52 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-29 13:21:30 -0400 |
commit | 626419038a3e4a1f61119a4af08d01415961eb4e (patch) | |
tree | 97dcb55640a7361062d103f9de13e68dcbb8ef86 /net/packet | |
parent | fdd5f43a1b53a844d04c6eda2cbdbe044b629ae7 (diff) | |
download | linux-3.10-626419038a3e4a1f61119a4af08d01415961eb4e.tar.gz linux-3.10-626419038a3e4a1f61119a4af08d01415961eb4e.tar.bz2 linux-3.10-626419038a3e4a1f61119a4af08d01415961eb4e.zip |
packet_diag: disclose uid value
This value is disclosed via /proc/net/packet but not via netlink messages.
The goal is to have the same level of information.
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/packet')
-rw-r--r-- | net/packet/diag.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/net/packet/diag.c b/net/packet/diag.c index d3fcd1ebef7..04c8219a2d0 100644 --- a/net/packet/diag.c +++ b/net/packet/diag.c @@ -125,8 +125,10 @@ static int pdiag_put_fanout(struct packet_sock *po, struct sk_buff *nlskb) return ret; } -static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct packet_diag_req *req, - u32 portid, u32 seq, u32 flags, int sk_ino) +static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, + struct packet_diag_req *req, + struct user_namespace *user_ns, + u32 portid, u32 seq, u32 flags, int sk_ino) { struct nlmsghdr *nlh; struct packet_diag_msg *rp; @@ -147,6 +149,11 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct packet_diag pdiag_put_info(po, skb)) goto out_nlmsg_trim; + if ((req->pdiag_show & PACKET_SHOW_INFO) && + nla_put_u32(skb, PACKET_DIAG_UID, + from_kuid_munged(user_ns, sock_i_uid(sk)))) + goto out_nlmsg_trim; + if ((req->pdiag_show & PACKET_SHOW_MCLIST) && pdiag_put_mclist(po, skb)) goto out_nlmsg_trim; @@ -183,9 +190,11 @@ static int packet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) if (num < s_num) goto next; - if (sk_diag_fill(sk, skb, req, NETLINK_CB(cb->skb).portid, - cb->nlh->nlmsg_seq, NLM_F_MULTI, - sock_i_ino(sk)) < 0) + if (sk_diag_fill(sk, skb, req, + sk_user_ns(NETLINK_CB(cb->skb).sk), + NETLINK_CB(cb->skb).portid, + cb->nlh->nlmsg_seq, NLM_F_MULTI, + sock_i_ino(sk)) < 0) goto done; next: num++; |