aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorRichard Guy Briggs <rgb@redhat.com>2014-04-22 21:31:56 -0400
committerDavid S. Miller <davem@davemloft.net>2014-04-22 21:42:27 -0400
commit3a101b8de0d39403b2c7e5c23fd0b005668acf48 (patch)
treeb7bce9802ac01cfeb96167d3bdc14b90703b9672 /kernel
parentnetlink: implement unbind to netlink_setsockopt NETLINK_DROP_MEMBERSHIP (diff)
downloadlinux-dev-3a101b8de0d39403b2c7e5c23fd0b005668acf48.tar.xz
linux-dev-3a101b8de0d39403b2c7e5c23fd0b005668acf48.zip
audit: add netlink audit protocol bind to check capabilities on multicast join
Register a netlink per-protocol bind fuction for audit to check userspace process capabilities before allowing a multicast group connection. Signed-off-by: Richard Guy Briggs <rgb@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/audit.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/audit.c b/kernel/audit.c
index 7c2893602d06..223cb746f141 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -1076,10 +1076,20 @@ static void audit_receive(struct sk_buff *skb)
mutex_unlock(&audit_cmd_mutex);
}
+/* Run custom bind function on netlink socket group connect or bind requests. */
+static int audit_bind(int group)
+{
+ if (!capable(CAP_AUDIT_READ))
+ return -EPERM;
+
+ return 0;
+}
+
static int __net_init audit_net_init(struct net *net)
{
struct netlink_kernel_cfg cfg = {
.input = audit_receive,
+ .bind = audit_bind,
};
struct audit_net *aunet = net_generic(net, audit_net_id);