From e20342f99558f952e1fb803199a9c1459abe8a0a Mon Sep 17 00:00:00 2001 From: "Eric W. Biederman" Date: Sun, 13 Jun 2010 03:31:06 +0000 Subject: [PATCH] --- yaml --- r: 202976 b: refs/heads/master c: b47030c71dfd6c8cd5cb6e551b6f7f7cfc96f6a6 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/netlink/af_netlink.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index f50c24e3b153..4c947cb818fa 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 109f6e39fa07c48f580125f531f46cb7c245b528 +refs/heads/master: b47030c71dfd6c8cd5cb6e551b6f7f7cfc96f6a6 diff --git a/trunk/net/netlink/af_netlink.c b/trunk/net/netlink/af_netlink.c index a2eb965207d3..7aeaa83193db 100644 --- a/trunk/net/netlink/af_netlink.c +++ b/trunk/net/netlink/af_netlink.c @@ -1323,19 +1323,23 @@ static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock, if (msg->msg_flags&MSG_OOB) return -EOPNOTSUPP; - if (NULL == siocb->scm) + if (NULL == siocb->scm) { siocb->scm = &scm; + memset(&scm, 0, sizeof(scm)); + } err = scm_send(sock, msg, siocb->scm); if (err < 0) return err; if (msg->msg_namelen) { + err = -EINVAL; if (addr->nl_family != AF_NETLINK) - return -EINVAL; + goto out; dst_pid = addr->nl_pid; dst_group = ffs(addr->nl_groups); + err = -EPERM; if (dst_group && !netlink_capable(sock, NL_NONROOT_SEND)) - return -EPERM; + goto out; } else { dst_pid = nlk->dst_pid; dst_group = nlk->dst_group; @@ -1387,6 +1391,7 @@ static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock, err = netlink_unicast(sk, skb, dst_pid, msg->msg_flags&MSG_DONTWAIT); out: + scm_destroy(siocb->scm); return err; }