diff options
author | Richard Guy Briggs <rgb@redhat.com> | 2014-04-23 03:31:56 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-04-23 03:42:27 +0200 |
commit | 3a101b8de0d39403b2c7e5c23fd0b005668acf48 (patch) | |
tree | b7bce9802ac01cfeb96167d3bdc14b90703b9672 /kernel/audit.c | |
parent | netlink: implement unbind to netlink_setsockopt NETLINK_DROP_MEMBERSHIP (diff) | |
download | linux-3a101b8de0d39403b2c7e5c23fd0b005668acf48.tar.xz linux-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/audit.c')
-rw-r--r-- | kernel/audit.c | 10 |
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); |