Commit 62641903 authored by Nicolas Dichtel's avatar Nicolas Dichtel Committed by David S. Miller

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: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fdd5f43a
...@@ -32,6 +32,7 @@ enum { ...@@ -32,6 +32,7 @@ enum {
PACKET_DIAG_RX_RING, PACKET_DIAG_RX_RING,
PACKET_DIAG_TX_RING, PACKET_DIAG_TX_RING,
PACKET_DIAG_FANOUT, PACKET_DIAG_FANOUT,
PACKET_DIAG_UID,
__PACKET_DIAG_MAX, __PACKET_DIAG_MAX,
}; };
......
...@@ -125,7 +125,9 @@ static int pdiag_put_fanout(struct packet_sock *po, struct sk_buff *nlskb) ...@@ -125,7 +125,9 @@ static int pdiag_put_fanout(struct packet_sock *po, struct sk_buff *nlskb)
return ret; return ret;
} }
static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct packet_diag_req *req, 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) u32 portid, u32 seq, u32 flags, int sk_ino)
{ {
struct nlmsghdr *nlh; struct nlmsghdr *nlh;
...@@ -147,6 +149,11 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct packet_diag ...@@ -147,6 +149,11 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct packet_diag
pdiag_put_info(po, skb)) pdiag_put_info(po, skb))
goto out_nlmsg_trim; 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) && if ((req->pdiag_show & PACKET_SHOW_MCLIST) &&
pdiag_put_mclist(po, skb)) pdiag_put_mclist(po, skb))
goto out_nlmsg_trim; goto out_nlmsg_trim;
...@@ -183,7 +190,9 @@ static int packet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) ...@@ -183,7 +190,9 @@ static int packet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb)
if (num < s_num) if (num < s_num)
goto next; goto next;
if (sk_diag_fill(sk, skb, req, NETLINK_CB(cb->skb).portid, 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, cb->nlh->nlmsg_seq, NLM_F_MULTI,
sock_i_ino(sk)) < 0) sock_i_ino(sk)) < 0)
goto done; goto done;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment