fs: cleanup files_lock locking
[linux-2.6.git] / security / selinux / netlink.c
index 18d08acafa7827485161bee36f7a4ea16ca9587d..36ac257cec9a523106d79aab69a19254eaf9f494 100644 (file)
  */
 #include <linux/init.h>
 #include <linux/types.h>
+#include <linux/slab.h>
 #include <linux/stddef.h>
 #include <linux/kernel.h>
-#include <linux/list.h>
 #include <linux/skbuff.h>
 #include <linux/netlink.h>
 #include <linux/selinux_netlink.h>
+#include <net/net_namespace.h>
 
 static struct sock *selnl;
 
 static int selnl_msglen(int msgtype)
 {
        int ret = 0;
-       
+
        switch (msgtype) {
        case SELNL_MSG_SETENFORCE:
                ret = sizeof(struct selnl_msg_setenforce);
                break;
-       
+
        case SELNL_MSG_POLICYLOAD:
                ret = sizeof(struct selnl_msg_policyload);
                break;
-               
+
        default:
                BUG();
        }
@@ -44,15 +45,15 @@ static void selnl_add_payload(struct nlmsghdr *nlh, int len, int msgtype, void *
        switch (msgtype) {
        case SELNL_MSG_SETENFORCE: {
                struct selnl_msg_setenforce *msg = NLMSG_DATA(nlh);
-               
+
                memset(msg, 0, len);
                msg->val = *((int *)data);
                break;
        }
-       
+
        case SELNL_MSG_POLICYLOAD: {
                struct selnl_msg_policyload *msg = NLMSG_DATA(nlh);
-               
+
                memset(msg, 0, len);
                msg->seqno = *((u32 *)data);
                break;
@@ -66,12 +67,12 @@ static void selnl_add_payload(struct nlmsghdr *nlh, int len, int msgtype, void *
 static void selnl_notify(int msgtype, void *data)
 {
        int len;
-       unsigned char *tmp;
+       sk_buff_data_t tmp;
        struct sk_buff *skb;
        struct nlmsghdr *nlh;
-       
+
        len = selnl_msglen(msgtype);
-       
+
        skb = alloc_skb(NLMSG_SPACE(len), GFP_USER);
        if (!skb)
                goto oom;
@@ -80,14 +81,15 @@ static void selnl_notify(int msgtype, void *data)
        nlh = NLMSG_PUT(skb, 0, 0, msgtype, len);
        selnl_add_payload(nlh, len, msgtype, data);
        nlh->nlmsg_len = skb->tail - tmp;
-       netlink_broadcast(selnl, skb, 0, SELNL_GRP_AVC, GFP_USER);
+       NETLINK_CB(skb).dst_group = SELNLGRP_AVC;
+       netlink_broadcast(selnl, skb, 0, SELNLGRP_AVC, GFP_USER);
 out:
        return;
-       
+
 nlmsg_failure:
        kfree_skb(skb);
 oom:
-       printk(KERN_ERR "SELinux:  OOM in %s\n", __FUNCTION__);
+       printk(KERN_ERR "SELinux:  OOM in %s\n", __func__);
        goto out;
 }
 
@@ -103,10 +105,11 @@ void selnl_notify_policyload(u32 seqno)
 
 static int __init selnl_init(void)
 {
-       selnl = netlink_kernel_create(NETLINK_SELINUX, NULL);
+       selnl = netlink_kernel_create(&init_net, NETLINK_SELINUX,
+                                     SELNLGRP_MAX, NULL, NULL, THIS_MODULE);
        if (selnl == NULL)
                panic("SELinux:  Cannot create netlink socket.");
-       netlink_set_nonroot(NETLINK_SELINUX, NL_NONROOT_RECV);  
+       netlink_set_nonroot(NETLINK_SELINUX, NL_NONROOT_RECV);
        return 0;
 }