|
|
Log in / Subscribe / Register

CONFIG_SECURITY_NETWORK

From:  "Stephen D. Smalley" <sds@epoch.ncsc.mil>
To:  linux-security-module@wirex.com
Subject:  [patch] CONFIG_SECURITY_NETWORK
Date:  Mon, 27 Jan 2003 12:49:56 -0500 (EST)


The attached patch for lsm-2.5 adds a CONFIG_SECURITY_NETWORK option
for the socket and networking security fields and hooks.  At present,
it excludes the netlink hooks and the ip_decode_options hooks since
the capabilities module uses those hooks to implement capability tests
migrated from the base kernel.  It rearranges the security_ops structure
to move the optional socket and networking hooks to the end of the structure.

The patch moves the 'security = NULL' initializations for the sock and
open request structures into the corresponding alloc_security hooks
since those initializations are colocated with the allocation.  In the
sk_buff case, the patch simply #ifdef's the initialization, since other
similar #ifdef'd initializations exist in skb_headerinit.  If desired,
we could define a static inline function for that purpose, but it
didn't seem to be necessary.

The patch updates SELinux appropriately so that its socket and
networking functionality (including the NetFilter-based hooks) is
omitted if the option is not enabled.  The patch simply removes the
socket and networking hooks from DTE since it is not really using them
anyway.

Comments?

--
Stephen Smalley, NSA
sds@epoch.ncsc.mil
Index: lsm-2.5/include/linux/netdevice.h
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/include/linux/netdevice.h,v
retrieving revision 1.12
diff -u -r1.12 netdevice.h
--- lsm-2.5/include/linux/netdevice.h	17 Jan 2003 15:22:45 -0000	1.12
+++ lsm-2.5/include/linux/netdevice.h	27 Jan 2003 14:31:38 -0000
@@ -442,7 +442,9 @@
 
 	/* generic object representation */
 	struct kobject kobj;
+#ifdef CONFIG_SECURITY_NETWORK
 	void			*security;
+#endif
 };
 
 
Index: lsm-2.5/include/linux/security.h
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/include/linux/security.h,v
retrieving revision 1.35
diff -u -r1.35 security.h
--- lsm-2.5/include/linux/security.h	24 Jan 2003 20:32:48 -0000	1.35
+++ lsm-2.5/include/linux/security.h	27 Jan 2003 15:59:14 -0000
@@ -1178,10 +1178,8 @@
 
 	int (*netlink_send) (struct sk_buff * skb);
 	int (*netlink_recv) (struct sk_buff * skb);
-
-	int (*unix_stream_connect) (struct socket * sock,
-				    struct socket * other, struct sock * newsk);
-	int (*unix_may_send) (struct socket * sock, struct socket * other);
+	int (*ip_decode_options) (struct sk_buff * skb,
+				  const char *optptr, unsigned char **pp_ptr);
 
 	int (*bprm_alloc_security) (struct linux_binprm * bprm);
 	void (*bprm_free_security) (struct linux_binprm * bprm);
@@ -1294,6 +1292,49 @@
 	void (*task_kmod_set_label) (void);
 	void (*task_reparent_to_init) (struct task_struct * p);
 
+	int (*ipc_permission) (struct kern_ipc_perm * ipcp, short flag);
+
+	int (*msg_msg_alloc_security) (struct msg_msg * msg);
+	void (*msg_msg_free_security) (struct msg_msg * msg);
+
+	int (*msg_queue_alloc_security) (struct msg_queue * msq);
+	void (*msg_queue_free_security) (struct msg_queue * msq);
+	int (*msg_queue_associate) (struct msg_queue * msq, int msqflg);
+	int (*msg_queue_msgctl) (struct msg_queue * msq, int cmd);
+	int (*msg_queue_msgsnd) (struct msg_queue * msq,
+				 struct msg_msg * msg, int msqflg);
+	int (*msg_queue_msgrcv) (struct msg_queue * msq,
+				 struct msg_msg * msg,
+				 struct task_struct * target,
+				 long type, int mode);
+
+	int (*shm_alloc_security) (struct shmid_kernel * shp);
+	void (*shm_free_security) (struct shmid_kernel * shp);
+	int (*shm_associate) (struct shmid_kernel * shp, int shmflg);
+	int (*shm_shmctl) (struct shmid_kernel * shp, int cmd);
+	int (*shm_shmat) (struct shmid_kernel * shp, 
+			  char *shmaddr, int shmflg);
+
+	int (*sem_alloc_security) (struct sem_array * sma);
+	void (*sem_free_security) (struct sem_array * sma);
+	int (*sem_associate) (struct sem_array * sma, int semflg);
+	int (*sem_semctl) (struct sem_array * sma, int cmd);
+	int (*sem_semop) (struct sem_array * sma, 
+			  struct sembuf * sops, unsigned nsops, int alter);
+
+	/* allow module stacking */
+	int (*register_security) (const char *name,
+	                          struct security_operations *ops);
+	int (*unregister_security) (const char *name,
+	                            struct security_operations *ops);
+
+	void (*d_instantiate) (struct dentry * dentry, struct inode * inode);
+
+#ifdef CONFIG_SECURITY_NETWORK
+	int (*unix_stream_connect) (struct socket * sock,
+				    struct socket * other, struct sock * newsk);
+	int (*unix_may_send) (struct socket * sock, struct socket * other);
+
 	int (*socket_create) (int family, int type, int protocol);
 	void (*socket_post_create) (struct socket * sock, int family,
 				    int type, int protocol);
@@ -1342,48 +1383,9 @@
 	int (*ip_defragment) (struct sk_buff * skb);
 	void (*ip_encapsulate) (struct sk_buff * skb);
 	void (*ip_decapsulate) (struct sk_buff * skb);
-	int (*ip_decode_options) (struct sk_buff * skb,
-				  const char *optptr, unsigned char **pp_ptr);
 
 	void (*netdev_unregister) (struct net_device * dev);
-
-	int (*ipc_permission) (struct kern_ipc_perm * ipcp, short flag);
-
-	int (*msg_msg_alloc_security) (struct msg_msg * msg);
-	void (*msg_msg_free_security) (struct msg_msg * msg);
-
-	int (*msg_queue_alloc_security) (struct msg_queue * msq);
-	void (*msg_queue_free_security) (struct msg_queue * msq);
-	int (*msg_queue_associate) (struct msg_queue * msq, int msqflg);
-	int (*msg_queue_msgctl) (struct msg_queue * msq, int cmd);
-	int (*msg_queue_msgsnd) (struct msg_queue * msq,
-				 struct msg_msg * msg, int msqflg);
-	int (*msg_queue_msgrcv) (struct msg_queue * msq,
-				 struct msg_msg * msg,
-				 struct task_struct * target,
-				 long type, int mode);
-
-	int (*shm_alloc_security) (struct shmid_kernel * shp);
-	void (*shm_free_security) (struct shmid_kernel * shp);
-	int (*shm_associate) (struct shmid_kernel * shp, int shmflg);
-	int (*shm_shmctl) (struct shmid_kernel * shp, int cmd);
-	int (*shm_shmat) (struct shmid_kernel * shp, 
-			  char *shmaddr, int shmflg);
-
-	int (*sem_alloc_security) (struct sem_array * sma);
-	void (*sem_free_security) (struct sem_array * sma);
-	int (*sem_associate) (struct sem_array * sma, int semflg);
-	int (*sem_semctl) (struct sem_array * sma, int cmd);
-	int (*sem_semop) (struct sem_array * sma, 
-			  struct sembuf * sops, unsigned nsops, int alter);
-
-	/* allow module stacking */
-	int (*register_security) (const char *name,
-	                          struct security_operations *ops);
-	int (*unregister_security) (const char *name,
-	                            struct security_operations *ops);
-
-	void (*d_instantiate) (struct dentry * dentry, struct inode * inode);
+#endif
 };
 
 /* global variables */
@@ -1500,19 +1502,11 @@
 	return security_ops->netlink_recv(skb);
 }
 
-
-static inline int security_unix_stream_connect(struct socket * sock,
-					       struct socket * other, 
-					       struct sock * newsk)
-{
-	return security_ops->unix_stream_connect(sock, other, newsk);
-}
-
-
-static inline int security_unix_may_send(struct socket * sock, 
-					 struct socket * other)
+static inline int security_ip_decode_options(struct sk_buff * skb, 
+					     const char *optptr, 
+					     unsigned char **pp_ptr)
 {
-	return security_ops->unix_may_send(sock, other);
+	return security_ops->ip_decode_options(skb, optptr, pp_ptr);
 }
 
 static inline int security_bprm_alloc (struct linux_binprm *bprm)
@@ -1949,356 +1943,156 @@
 	security_ops->task_reparent_to_init (p);
 }
 
-static inline int security_socket_create (int family, int type, int protocol)
+static inline int security_ipc_permission (struct kern_ipc_perm *ipcp,
+					   short flag)
 {
-	return security_ops->socket_create(family, type, protocol);
+	return security_ops->ipc_permission (ipcp, flag);
 }
 
-static inline void security_socket_post_create(struct socket * sock, 
-					       int family,
-					       int type, 
-					       int protocol)
+static inline int security_msg_msg_alloc (struct msg_msg * msg)
 {
-	security_ops->socket_post_create(sock, family, type, protocol);
+	return security_ops->msg_msg_alloc_security (msg);
 }
 
-static inline int security_socket_bind(struct socket * sock, 
-				       struct sockaddr * address, 
-				       int addrlen)
+static inline void security_msg_msg_free (struct msg_msg * msg)
 {
-	return security_ops->socket_bind(sock, address, addrlen);
+	security_ops->msg_msg_free_security(msg);
 }
 
-static inline int security_socket_connect(struct socket * sock, 
-					  struct sockaddr * address, 
-					  int addrlen)
+static inline int security_msg_queue_alloc (struct msg_queue *msq)
 {
-	return security_ops->socket_connect(sock, address, addrlen);
+	return security_ops->msg_queue_alloc_security (msq);
 }
 
-static inline int security_socket_listen(struct socket * sock, int backlog)
+static inline void security_msg_queue_free (struct msg_queue *msq)
 {
-	return security_ops->socket_listen(sock, backlog);
+	security_ops->msg_queue_free_security (msq);
 }
 
-static inline int security_socket_accept(struct socket * sock, 
-					 struct socket * newsock)
+static inline int security_msg_queue_associate (struct msg_queue * msq, 
+						int msqflg)
 {
-	return security_ops->socket_accept(sock, newsock);
+	return security_ops->msg_queue_associate (msq, msqflg);
 }
 
-static inline void security_socket_post_accept(struct socket * sock, 
-					       struct socket * newsock)
+static inline int security_msg_queue_msgctl (struct msg_queue * msq, int cmd)
 {
-	security_ops->socket_post_accept(sock, newsock);
+	return security_ops->msg_queue_msgctl (msq, cmd);
 }
 
-static inline int security_socket_sendmsg(struct socket * sock, 
-					  struct msghdr * msg, int size)
+static inline int security_msg_queue_msgsnd (struct msg_queue * msq,
+					     struct msg_msg * msg, int msqflg)
 {
-	return security_ops->socket_sendmsg(sock, msg, size);
+	return security_ops->msg_queue_msgsnd (msq, msg, msqflg);
 }
 
-static inline int security_socket_recvmsg(struct socket * sock, 
-					  struct msghdr * msg, int size, 
-					  int flags)
+static inline int security_msg_queue_msgrcv (struct msg_queue * msq,
+					     struct msg_msg * msg,
+					     struct task_struct * target,
+					     long type, int mode)
 {
-	return security_ops->socket_recvmsg(sock, msg, size, flags);
+	return security_ops->msg_queue_msgrcv (msq, msg, target, type, mode);
 }
 
-static inline int security_socket_getsockname(struct socket * sock)
+static inline int security_shm_alloc (struct shmid_kernel *shp)
 {
-	return security_ops->socket_getsockname(sock);
+	return security_ops->shm_alloc_security (shp);
 }
 
-static inline int security_socket_getpeername(struct socket * sock)
+static inline void security_shm_free (struct shmid_kernel *shp)
 {
-	return security_ops->socket_getpeername(sock);
+	security_ops->shm_free_security (shp);
 }
 
-static inline int security_socket_getsockopt(struct socket * sock, 
-					     int level, int optname)
+static inline int security_shm_associate (struct shmid_kernel * shp, 
+					  int shmflg)
 {
-	return security_ops->socket_getsockopt(sock, level, optname);
+	return security_ops->shm_associate(shp, shmflg);
 }
 
-static inline int security_socket_setsockopt(struct socket * sock, 
-					     int level, int optname)
+static inline int security_shm_shmctl (struct shmid_kernel * shp, int cmd)
 {
-	return security_ops->socket_setsockopt(sock, level, optname);
+	return security_ops->shm_shmctl (shp, cmd);
 }
 
-static inline int security_socket_shutdown(struct socket * sock, int how)
+static inline int security_shm_shmat (struct shmid_kernel * shp, 
+				      char *shmaddr, int shmflg)
 {
-	return security_ops->socket_shutdown(sock, how);
+	return security_ops->shm_shmat(shp, shmaddr, shmflg);
 }
 
-static inline int security_sock_alloc(struct sock * sk, 
-				      int gfp_mask)
+static inline int security_sem_alloc (struct sem_array *sma)
 {
-	return security_ops->socket_sock_alloc_security(sk, gfp_mask);
+	return security_ops->sem_alloc_security (sma);
 }
 
-static inline void security_sock_free(struct sock * sk)
+static inline void security_sem_free (struct sem_array *sma)
 {
-	security_ops->socket_sock_free_security(sk);
+	security_ops->sem_free_security (sma);
 }
 
-static inline int security_sock_rcv_skb (struct sock * sk, 
-					 struct sk_buff * skb)
+static inline int security_sem_associate (struct sem_array * sma, int semflg)
 {
-	return security_ops->socket_sock_rcv_skb (sk, skb);
+	return security_ops->sem_associate (sma, semflg);
 }
 
-static inline int security_open_request_alloc (struct open_request * req)
+static inline int security_sem_semctl (struct sem_array * sma, int cmd)
 {
-	return security_ops->open_request_alloc_security (req);
+	return security_ops->sem_semctl(sma, cmd);
 }
 
-static inline void security_open_request_free (struct open_request * req)
+static inline int security_sem_semop (struct sem_array * sma, 
+				      struct sembuf * sops, unsigned nsops, 
+				      int alter)
 {
-	security_ops->open_request_free_security (req);
+	return security_ops->sem_semop(sma, sops, nsops, alter);
 }
 
-static inline void security_tcp_connection_request(struct sock * sk, 
-						   struct sk_buff * skb,
-						   struct open_request * req)
+static inline void security_d_instantiate (struct dentry *dentry, struct inode *inode)
 {
-	security_ops->tcp_connection_request(sk, skb, req);
+	security_ops->d_instantiate (dentry, inode);
 }
 
-static inline void security_tcp_synack(struct sock * sk, 
-				       struct sk_buff * skb, 
-				       struct open_request * req)
+/* prototypes */
+extern int security_scaffolding_startup	(void);
+extern int register_security	(struct security_operations *ops);
+extern int unregister_security	(struct security_operations *ops);
+extern int mod_reg_security	(const char *name, struct security_operations *ops);
+extern int mod_unreg_security	(const char *name, struct security_operations *ops);
+
+#else /* CONFIG_SECURITY */
+
+/*
+ * This is the default capabilities functionality.  Most of these functions
+ * are just stubbed out, but a few must call the proper capable code.
+ */
+
+static inline int security_scaffolding_startup (void)
 {
-	security_ops->tcp_synack(sk, skb, req);
+	return 0;
 }
 
-static inline void security_tcp_create_openreq_child(struct sock * sk, 
-						     struct sock * newsk, 
-						     struct sk_buff * skb, 
-						     struct open_request * req)
+static inline int security_sethostname (char *hostname)
 {
-	security_ops->tcp_create_openreq_child(sk, newsk, skb, req);
+	return 0;
 }
 
-static inline int security_skb_alloc(struct sk_buff * skb, int gfp_mask)
+static inline int security_setdomainname (char *domainname)
 {
-	return security_ops->skb_alloc_security(skb, gfp_mask);
+	return 0;
 }
 
-static inline int security_skb_clone(struct sk_buff * newskb, 
-				     const struct sk_buff * oldskb)
+static inline int security_reboot (unsigned int cmd)
 {
-	return security_ops->skb_clone(newskb, oldskb);
+	return 0;
 }
 
-static inline void security_skb_copy(struct sk_buff * newskb, 
-				     const struct sk_buff * oldskb)
+static inline int security_ioperm (unsigned long from, unsigned long num, int turn_on)
 {
-	security_ops->skb_copy(newskb, oldskb);
+	return 0;
 }
 
-static inline void security_skb_set_owner_w (struct sk_buff * skb, 
-					     struct sock * sk)
-{
-	security_ops->skb_set_owner_w (skb, sk);
-}
-
-static inline void security_skb_recv_datagram(struct sk_buff * skb, 
-					      struct sock * sk, unsigned flags)
-{
-	security_ops->skb_recv_datagram(skb, sk, flags);
-}
-
-static inline void security_skb_free(struct sk_buff * skb)
-{
-	security_ops->skb_free_security(skb);
-}
-
-static inline void security_ip_fragment(struct sk_buff * newskb, 
-					const struct sk_buff * oldskb)
-{
-	security_ops->ip_fragment(newskb, oldskb);
-}
-
-static inline int security_ip_defragment(struct sk_buff * skb)
-{
-	return security_ops->ip_defragment(skb);
-}
-
-static inline void security_ip_encapsulate(struct sk_buff * skb)
-{
-	security_ops->ip_encapsulate(skb);
-}
-
-static inline void security_ip_decapsulate(struct sk_buff * skb)
-{
-	security_ops->ip_decapsulate(skb);
-}
-
-static inline int security_ip_decode_options(struct sk_buff * skb, 
-					     const char *optptr, 
-					     unsigned char **pp_ptr)
-{
-	return security_ops->ip_decode_options(skb, optptr, pp_ptr);
-}
-
-static inline void security_netdev_unregister(struct net_device * dev)
-{
-	security_ops->netdev_unregister(dev);
-}
-
-static inline int security_ipc_permission (struct kern_ipc_perm *ipcp,
-					   short flag)
-{
-	return security_ops->ipc_permission (ipcp, flag);
-}
-
-static inline int security_msg_msg_alloc (struct msg_msg * msg)
-{
-	return security_ops->msg_msg_alloc_security (msg);
-}
-
-static inline void security_msg_msg_free (struct msg_msg * msg)
-{
-	security_ops->msg_msg_free_security(msg);
-}
-
-static inline int security_msg_queue_alloc (struct msg_queue *msq)
-{
-	return security_ops->msg_queue_alloc_security (msq);
-}
-
-static inline void security_msg_queue_free (struct msg_queue *msq)
-{
-	security_ops->msg_queue_free_security (msq);
-}
-
-static inline int security_msg_queue_associate (struct msg_queue * msq, 
-						int msqflg)
-{
-	return security_ops->msg_queue_associate (msq, msqflg);
-}
-
-static inline int security_msg_queue_msgctl (struct msg_queue * msq, int cmd)
-{
-	return security_ops->msg_queue_msgctl (msq, cmd);
-}
-
-static inline int security_msg_queue_msgsnd (struct msg_queue * msq,
-					     struct msg_msg * msg, int msqflg)
-{
-	return security_ops->msg_queue_msgsnd (msq, msg, msqflg);
-}
-
-static inline int security_msg_queue_msgrcv (struct msg_queue * msq,
-					     struct msg_msg * msg,
-					     struct task_struct * target,
-					     long type, int mode)
-{
-	return security_ops->msg_queue_msgrcv (msq, msg, target, type, mode);
-}
-
-static inline int security_shm_alloc (struct shmid_kernel *shp)
-{
-	return security_ops->shm_alloc_security (shp);
-}
-
-static inline void security_shm_free (struct shmid_kernel *shp)
-{
-	security_ops->shm_free_security (shp);
-}
-
-static inline int security_shm_associate (struct shmid_kernel * shp, 
-					  int shmflg)
-{
-	return security_ops->shm_associate(shp, shmflg);
-}
-
-static inline int security_shm_shmctl (struct shmid_kernel * shp, int cmd)
-{
-	return security_ops->shm_shmctl (shp, cmd);
-}
-
-static inline int security_shm_shmat (struct shmid_kernel * shp, 
-				      char *shmaddr, int shmflg)
-{
-	return security_ops->shm_shmat(shp, shmaddr, shmflg);
-}
-
-static inline int security_sem_alloc (struct sem_array *sma)
-{
-	return security_ops->sem_alloc_security (sma);
-}
-
-static inline void security_sem_free (struct sem_array *sma)
-{
-	security_ops->sem_free_security (sma);
-}
-
-static inline int security_sem_associate (struct sem_array * sma, int semflg)
-{
-	return security_ops->sem_associate (sma, semflg);
-}
-
-static inline int security_sem_semctl (struct sem_array * sma, int cmd)
-{
-	return security_ops->sem_semctl(sma, cmd);
-}
-
-static inline int security_sem_semop (struct sem_array * sma, 
-				      struct sembuf * sops, unsigned nsops, 
-				      int alter)
-{
-	return security_ops->sem_semop(sma, sops, nsops, alter);
-}
-
-static inline void security_d_instantiate (struct dentry *dentry, struct inode *inode)
-{
-	security_ops->d_instantiate (dentry, inode);
-}
-
-/* prototypes */
-extern int security_scaffolding_startup	(void);
-extern int register_security	(struct security_operations *ops);
-extern int unregister_security	(struct security_operations *ops);
-extern int mod_reg_security	(const char *name, struct security_operations *ops);
-extern int mod_unreg_security	(const char *name, struct security_operations *ops);
-
-#else /* CONFIG_SECURITY */
-
-/*
- * This is the default capabilities functionality.  Most of these functions
- * are just stubbed out, but a few must call the proper capable code.
- */
-
-static inline int security_scaffolding_startup (void)
-{
-	return 0;
-}
-
-static inline int security_sethostname (char *hostname)
-{
-	return 0;
-}
-
-static inline int security_setdomainname (char *domainname)
-{
-	return 0;
-}
-
-static inline int security_reboot (unsigned int cmd)
-{
-	return 0;
-}
-
-static inline int security_ioperm (unsigned long from, unsigned long num, int turn_on)
-{
-	return 0;
-}
-
-static inline int security_iopl (unsigned int old, unsigned int level)
+static inline int security_iopl (unsigned int old, unsigned int level)
 {
 	return 0;
 }
@@ -2388,17 +2182,11 @@
 	return cap_netlink_recv(skb);
 }
 
-static inline int security_unix_stream_connect(struct socket * sock,
-					       struct socket * other, 
-					       struct sock * newsk)
-{
-	return 0;
-}
-
-static inline int security_unix_may_send(struct socket * sock, 
-					 struct socket * other)
+static inline int security_ip_decode_options(struct sk_buff * skb, 
+					     const char *optptr, 
+					     unsigned char **pp_ptr)
 {
-	return 0;
+	return cap_ip_decode_options(skb,optptr,pp_ptr);
 }
 
 static inline int security_bprm_alloc (struct linux_binprm *bprm)
@@ -2801,123 +2589,247 @@
 	cap_task_reparent_to_init (p);
 }
 
-static inline int security_socket_create (int family, int type, int protocol)
+static inline int security_ipc_permission (struct kern_ipc_perm *ipcp,
+					   short flag)
 {
 	return 0;
 }
 
-static inline void security_socket_post_create(struct socket * sock, 
-					       int family,
-					       int type, 
-					       int protocol)
+static inline int security_msg_msg_alloc (struct msg_msg * msg)
 {
+	return 0;
 }
 
-static inline int security_socket_bind(struct socket * sock, 
-				       struct sockaddr * address, 
-				       int addrlen)
+static inline void security_msg_msg_free (struct msg_msg * msg)
+{ }
+
+static inline int security_msg_queue_alloc (struct msg_queue *msq)
 {
 	return 0;
 }
 
-static inline int security_socket_connect(struct socket * sock, 
-					  struct sockaddr * address, 
-					  int addrlen)
+static inline void security_msg_queue_free (struct msg_queue *msq)
+{ }
+
+static inline int security_msg_queue_associate (struct msg_queue * msq, 
+						int msqflg)
 {
 	return 0;
 }
 
-static inline int security_socket_listen(struct socket * sock, int backlog)
+static inline int security_msg_queue_msgctl (struct msg_queue * msq, int cmd)
 {
 	return 0;
 }
 
-static inline int security_socket_accept(struct socket * sock, 
-					 struct socket * newsock)
+static inline int security_msg_queue_msgsnd (struct msg_queue * msq,
+					     struct msg_msg * msg, int msqflg)
 {
 	return 0;
 }
 
-static inline void security_socket_post_accept(struct socket * sock, 
-					       struct socket * newsock)
+static inline int security_msg_queue_msgrcv (struct msg_queue * msq,
+					     struct msg_msg * msg,
+					     struct task_struct * target,
+					     long type, int mode)
 {
+	return 0;
 }
 
-static inline int security_socket_sendmsg(struct socket * sock, 
-					  struct msghdr * msg, int size)
+static inline int security_shm_alloc (struct shmid_kernel *shp)
 {
 	return 0;
 }
 
-static inline int security_socket_recvmsg(struct socket * sock, 
-					  struct msghdr * msg, int size, 
-					  int flags)
-{
+static inline void security_shm_free (struct shmid_kernel *shp)
+{ }
+
+static inline int security_shm_associate (struct shmid_kernel * shp, 
+					  int shmflg)
+{
 	return 0;
 }
 
-static inline int security_socket_getsockname(struct socket * sock)
+static inline int security_shm_shmctl (struct shmid_kernel * shp, int cmd)
 {
 	return 0;
 }
 
-static inline int security_socket_getpeername(struct socket * sock)
+static inline int security_shm_shmat (struct shmid_kernel * shp, 
+				      char *shmaddr, int shmflg)
+{
+	return 0;
+}
+
+static inline int security_sem_alloc (struct sem_array *sma)
+{
+	return 0;
+}
+
+static inline void security_sem_free (struct sem_array *sma)
+{ }
+
+static inline int security_sem_associate (struct sem_array * sma, int semflg)
+{
+	return 0;
+}
+
+static inline int security_sem_semctl (struct sem_array * sma, int cmd)
+{
+	return 0;
+}
+
+static inline int security_sem_semop (struct sem_array * sma, 
+				      struct sembuf * sops, unsigned nsops, 
+				      int alter)
 {
 	return 0;
 }
 
+static inline void security_d_instantiate (struct dentry *dentry, struct inode *inode)
+{ }
+
+#endif	/* CONFIG_SECURITY */
+
+#ifdef CONFIG_SECURITY_NETWORK
+
+static inline int security_unix_stream_connect(struct socket * sock,
+					       struct socket * other, 
+					       struct sock * newsk)
+{
+	return security_ops->unix_stream_connect(sock, other, newsk);
+}
+
+
+static inline int security_unix_may_send(struct socket * sock, 
+					 struct socket * other)
+{
+	return security_ops->unix_may_send(sock, other);
+}
+
+static inline int security_socket_create (int family, int type, int protocol)
+{
+	return security_ops->socket_create(family, type, protocol);
+}
+
+static inline void security_socket_post_create(struct socket * sock, 
+					       int family,
+					       int type, 
+					       int protocol)
+{
+	security_ops->socket_post_create(sock, family, type, protocol);
+}
+
+static inline int security_socket_bind(struct socket * sock, 
+				       struct sockaddr * address, 
+				       int addrlen)
+{
+	return security_ops->socket_bind(sock, address, addrlen);
+}
+
+static inline int security_socket_connect(struct socket * sock, 
+					  struct sockaddr * address, 
+					  int addrlen)
+{
+	return security_ops->socket_connect(sock, address, addrlen);
+}
+
+static inline int security_socket_listen(struct socket * sock, int backlog)
+{
+	return security_ops->socket_listen(sock, backlog);
+}
+
+static inline int security_socket_accept(struct socket * sock, 
+					 struct socket * newsock)
+{
+	return security_ops->socket_accept(sock, newsock);
+}
+
+static inline void security_socket_post_accept(struct socket * sock, 
+					       struct socket * newsock)
+{
+	security_ops->socket_post_accept(sock, newsock);
+}
+
+static inline int security_socket_sendmsg(struct socket * sock, 
+					  struct msghdr * msg, int size)
+{
+	return security_ops->socket_sendmsg(sock, msg, size);
+}
+
+static inline int security_socket_recvmsg(struct socket * sock, 
+					  struct msghdr * msg, int size, 
+					  int flags)
+{
+	return security_ops->socket_recvmsg(sock, msg, size, flags);
+}
+
+static inline int security_socket_getsockname(struct socket * sock)
+{
+	return security_ops->socket_getsockname(sock);
+}
+
+static inline int security_socket_getpeername(struct socket * sock)
+{
+	return security_ops->socket_getpeername(sock);
+}
+
 static inline int security_socket_getsockopt(struct socket * sock, 
 					     int level, int optname)
 {
-	return 0;
+	return security_ops->socket_getsockopt(sock, level, optname);
 }
 
 static inline int security_socket_setsockopt(struct socket * sock, 
 					     int level, int optname)
 {
-	return 0;
+	return security_ops->socket_setsockopt(sock, level, optname);
 }
 
 static inline int security_socket_shutdown(struct socket * sock, int how)
 {
-	return 0;
+	return security_ops->socket_shutdown(sock, how);
 }
 
 static inline int security_sock_alloc(struct sock * sk, 
 				      int gfp_mask)
 {
-	return 0;
+	return security_ops->socket_sock_alloc_security(sk, gfp_mask);
 }
 
 static inline void security_sock_free(struct sock * sk)
 {
+	security_ops->socket_sock_free_security(sk);
 }
 
 static inline int security_sock_rcv_skb (struct sock * sk, 
 					 struct sk_buff * skb)
 {
-	return 0;
+	return security_ops->socket_sock_rcv_skb (sk, skb);
 }
 
 static inline int security_open_request_alloc (struct open_request * req)
 {
-	return 0;
+	return security_ops->open_request_alloc_security (req);
 }
 
 static inline void security_open_request_free (struct open_request * req)
 {
+	security_ops->open_request_free_security (req);
 }
 
 static inline void security_tcp_connection_request(struct sock * sk, 
 						   struct sk_buff * skb,
 						   struct open_request * req)
 {
+	security_ops->tcp_connection_request(sk, skb, req);
 }
 
 static inline void security_tcp_synack(struct sock * sk, 
 				       struct sk_buff * skb, 
 				       struct open_request * req)
 {
+	security_ops->tcp_synack(sk, skb, req);
 }
 
 static inline void security_tcp_create_openreq_child(struct sock * sk, 
@@ -2925,168 +2837,263 @@
 						     struct sk_buff * skb, 
 						     struct open_request * req)
 {
+	security_ops->tcp_create_openreq_child(sk, newsk, skb, req);
 }
 
 static inline int security_skb_alloc(struct sk_buff * skb, int gfp_mask)
 {
-	return 0;
+	return security_ops->skb_alloc_security(skb, gfp_mask);
 }
 
 static inline int security_skb_clone(struct sk_buff * newskb, 
 				     const struct sk_buff * oldskb)
 {
-	return 0;
+	return security_ops->skb_clone(newskb, oldskb);
 }
 
 static inline void security_skb_copy(struct sk_buff * newskb, 
 				     const struct sk_buff * oldskb)
 {
+	security_ops->skb_copy(newskb, oldskb);
 }
 
 static inline void security_skb_set_owner_w (struct sk_buff * skb, 
 					     struct sock * sk)
 {
+	security_ops->skb_set_owner_w (skb, sk);
 }
 
 static inline void security_skb_recv_datagram(struct sk_buff * skb, 
 					      struct sock * sk, unsigned flags)
 {
+	security_ops->skb_recv_datagram(skb, sk, flags);
 }
 
 static inline void security_skb_free(struct sk_buff * skb)
 {
+	security_ops->skb_free_security(skb);
 }
 
 static inline void security_ip_fragment(struct sk_buff * newskb, 
 					const struct sk_buff * oldskb)
 {
+	security_ops->ip_fragment(newskb, oldskb);
 }
 
 static inline int security_ip_defragment(struct sk_buff * skb)
 {
-	return 0;
+	return security_ops->ip_defragment(skb);
 }
 
 static inline void security_ip_encapsulate(struct sk_buff * skb)
 {
+	security_ops->ip_encapsulate(skb);
 }
 
 static inline void security_ip_decapsulate(struct sk_buff * skb)
 {
+	security_ops->ip_decapsulate(skb);
 }
 
-static inline int security_ip_decode_options(struct sk_buff * skb, 
-					     const char *optptr, 
-					     unsigned char **pp_ptr)
+static inline void security_netdev_unregister(struct net_device * dev)
 {
-	return cap_ip_decode_options(skb,optptr,pp_ptr);
+	security_ops->netdev_unregister(dev);
 }
 
-static inline void security_netdev_unregister(struct net_device * dev)
+#else /* CONFIG_SECURITY_NETWORK */
+
+static inline int security_unix_stream_connect(struct socket * sock,
+					       struct socket * other, 
+					       struct sock * newsk)
 {
+	return 0;
 }
 
-static inline int security_ipc_permission (struct kern_ipc_perm *ipcp,
-					   short flag)
+static inline int security_unix_may_send(struct socket * sock, 
+					 struct socket * other)
 {
 	return 0;
 }
 
-static inline int security_msg_msg_alloc (struct msg_msg * msg)
+static inline int security_socket_create (int family, int type, int protocol)
 {
 	return 0;
 }
 
-static inline void security_msg_msg_free (struct msg_msg * msg)
-{ }
+static inline void security_socket_post_create(struct socket * sock, 
+					       int family,
+					       int type, 
+					       int protocol)
+{
+}
 
-static inline int security_msg_queue_alloc (struct msg_queue *msq)
+static inline int security_socket_bind(struct socket * sock, 
+				       struct sockaddr * address, 
+				       int addrlen)
 {
 	return 0;
 }
 
-static inline void security_msg_queue_free (struct msg_queue *msq)
-{ }
+static inline int security_socket_connect(struct socket * sock, 
+					  struct sockaddr * address, 
+					  int addrlen)
+{
+	return 0;
+}
 
-static inline int security_msg_queue_associate (struct msg_queue * msq, 
-						int msqflg)
+static inline int security_socket_listen(struct socket * sock, int backlog)
 {
 	return 0;
 }
 
-static inline int security_msg_queue_msgctl (struct msg_queue * msq, int cmd)
+static inline int security_socket_accept(struct socket * sock, 
+					 struct socket * newsock)
 {
 	return 0;
 }
 
-static inline int security_msg_queue_msgsnd (struct msg_queue * msq,
-					     struct msg_msg * msg, int msqflg)
+static inline void security_socket_post_accept(struct socket * sock, 
+					       struct socket * newsock)
+{
+}
+
+static inline int security_socket_sendmsg(struct socket * sock, 
+					  struct msghdr * msg, int size)
 {
 	return 0;
 }
 
-static inline int security_msg_queue_msgrcv (struct msg_queue * msq,
-					     struct msg_msg * msg,
-					     struct task_struct * target,
-					     long type, int mode)
+static inline int security_socket_recvmsg(struct socket * sock, 
+					  struct msghdr * msg, int size, 
+					  int flags)
 {
 	return 0;
 }
 
-static inline int security_shm_alloc (struct shmid_kernel *shp)
+static inline int security_socket_getsockname(struct socket * sock)
 {
 	return 0;
 }
 
-static inline void security_shm_free (struct shmid_kernel *shp)
-{ }
+static inline int security_socket_getpeername(struct socket * sock)
+{
+	return 0;
+}
 
-static inline int security_shm_associate (struct shmid_kernel * shp, 
-					  int shmflg)
+static inline int security_socket_getsockopt(struct socket * sock, 
+					     int level, int optname)
 {
 	return 0;
 }
 
-static inline int security_shm_shmctl (struct shmid_kernel * shp, int cmd)
+static inline int security_socket_setsockopt(struct socket * sock, 
+					     int level, int optname)
 {
 	return 0;
 }
 
-static inline int security_shm_shmat (struct shmid_kernel * shp, 
-				      char *shmaddr, int shmflg)
+static inline int security_socket_shutdown(struct socket * sock, int how)
 {
 	return 0;
 }
 
-static inline int security_sem_alloc (struct sem_array *sma)
+static inline int security_sock_alloc(struct sock * sk, 
+				      int gfp_mask)
 {
 	return 0;
 }
 
-static inline void security_sem_free (struct sem_array *sma)
-{ }
+static inline void security_sock_free(struct sock * sk)
+{
+}
 
-static inline int security_sem_associate (struct sem_array * sma, int semflg)
+static inline int security_sock_rcv_skb (struct sock * sk, 
+					 struct sk_buff * skb)
 {
 	return 0;
 }
 
-static inline int security_sem_semctl (struct sem_array * sma, int cmd)
+static inline int security_open_request_alloc (struct open_request * req)
 {
 	return 0;
 }
 
-static inline int security_sem_semop (struct sem_array * sma, 
-				      struct sembuf * sops, unsigned nsops, 
-				      int alter)
+static inline void security_open_request_free (struct open_request * req)
+{
+}
+
+static inline void security_tcp_connection_request(struct sock * sk, 
+						   struct sk_buff * skb,
+						   struct open_request * req)
+{
+}
+
+static inline void security_tcp_synack(struct sock * sk, 
+				       struct sk_buff * skb, 
+				       struct open_request * req)
+{
+}
+
+static inline void security_tcp_create_openreq_child(struct sock * sk, 
+						     struct sock * newsk, 
+						     struct sk_buff * skb, 
+						     struct open_request * req)
+{
+}
+
+static inline int security_skb_alloc(struct sk_buff * skb, int gfp_mask)
 {
 	return 0;
 }
 
-static inline void security_d_instantiate (struct dentry *dentry, struct inode *inode)
-{ }
+static inline int security_skb_clone(struct sk_buff * newskb, 
+				     const struct sk_buff * oldskb)
+{
+	return 0;
+}
 
-#endif	/* CONFIG_SECURITY */
+static inline void security_skb_copy(struct sk_buff * newskb, 
+				     const struct sk_buff * oldskb)
+{
+}
+
+static inline void security_skb_set_owner_w (struct sk_buff * skb, 
+					     struct sock * sk)
+{
+}
+
+static inline void security_skb_recv_datagram(struct sk_buff * skb, 
+					      struct sock * sk, unsigned flags)
+{
+}
+
+static inline void security_skb_free(struct sk_buff * skb)
+{
+}
+
+static inline void security_ip_fragment(struct sk_buff * newskb, 
+					const struct sk_buff * oldskb)
+{
+}
+
+static inline int security_ip_defragment(struct sk_buff * skb)
+{
+	return 0;
+}
+
+static inline void security_ip_encapsulate(struct sk_buff * skb)
+{
+}
+
+static inline void security_ip_decapsulate(struct sk_buff * skb)
+{
+}
+
+static inline void security_netdev_unregister(struct net_device * dev)
+{
+}
+
+#endif /* CONFIG_SECURITY_NETWORK */
 
 #endif /* ! __LINUX_SECURITY_H */
 
Index: lsm-2.5/include/linux/skbuff.h
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/include/linux/skbuff.h,v
retrieving revision 1.10
diff -u -r1.10 skbuff.h
--- lsm-2.5/include/linux/skbuff.h	13 Jan 2003 20:48:00 -0000	1.10
+++ lsm-2.5/include/linux/skbuff.h	27 Jan 2003 14:32:22 -0000
@@ -261,8 +261,9 @@
 #ifdef CONFIG_NET_SCHED
        __u32			tc_index;               /* traffic control index */
 #endif
-
+#ifdef CONFIG_SECURITY_NETWORK
 	void		*lsm_security;		/* replaces the above security field */
+#endif
 };
 
 #define SK_WMEM_MAX	65535
Index: lsm-2.5/include/linux/tcp.h
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/include/linux/tcp.h,v
retrieving revision 1.6
diff -u -r1.6 tcp.h
--- lsm-2.5/include/linux/tcp.h	24 Jan 2003 15:20:00 -0000	1.6
+++ lsm-2.5/include/linux/tcp.h	27 Jan 2003 14:32:34 -0000
@@ -383,7 +383,7 @@
 #define tcp_sk(__sk) (&((struct tcp_sock *)__sk)->tcp)
 
 static inline void clone_tcp_sk(struct sock *newsk, struct sock *sk) {
-#ifdef CONFIG_SECURITY 
+#ifdef CONFIG_SECURITY_NETWORK
 /* Save/restore the LSM security pointer around the copy */
 	void *sptr = newsk->security;
 	memcpy(newsk, sk, sizeof(struct tcp_sock));
Index: lsm-2.5/include/net/sock.h
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/include/net/sock.h,v
retrieving revision 1.18
diff -u -r1.18 sock.h
--- lsm-2.5/include/net/sock.h	4 Dec 2002 21:58:29 -0000	1.18
+++ lsm-2.5/include/net/sock.h	27 Jan 2003 14:33:16 -0000
@@ -198,8 +198,10 @@
 	/* RPC layer private data */
 	void			*user_data;
 
+#ifdef CONFIG_SECURITY_NETWORK
 	/* LSM security field */
 	void			*security;
+#endif
   
 	/* Callbacks */
 	void			(*state_change)(struct sock *sk);
Index: lsm-2.5/include/net/tcp.h
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/include/net/tcp.h,v
retrieving revision 1.8
diff -u -r1.8 tcp.h
--- lsm-2.5/include/net/tcp.h	24 Jan 2003 15:20:00 -0000	1.8
+++ lsm-2.5/include/net/tcp.h	27 Jan 2003 14:44:12 -0000
@@ -534,8 +534,10 @@
 		struct tcp_v6_open_req v6_req;
 #endif
 	} af;
+#ifdef CONFIG_SECURITY_NETWORK
 	/* LSM security field */
 	void			*security;
+#endif
 };
 
 /* SLAB cache for open requests. */
@@ -547,7 +549,6 @@
 		kmem_cache_alloc(tcp_openreq_cachep, SLAB_ATOMIC);
 
 	if (req != NULL) {
-		req->security = NULL;
 		if (security_open_request_alloc(req)) {
 			kmem_cache_free(tcp_openreq_cachep, req);
 			return NULL;
Index: lsm-2.5/net/core/skbuff.c
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/net/core/skbuff.c,v
retrieving revision 1.14
diff -u -r1.14 skbuff.c
--- lsm-2.5/net/core/skbuff.c	13 Jan 2003 20:48:08 -0000	1.14
+++ lsm-2.5/net/core/skbuff.c	27 Jan 2003 15:05:56 -0000
@@ -263,7 +263,9 @@
 #ifdef CONFIG_NET_SCHED
 	skb->tc_index	  = 0;
 #endif
+#ifdef CONFIG_SECURITY_NETWORK
 	skb->lsm_security = NULL;
+#endif
 }
 
 static void skb_drop_fraglist(struct sk_buff *skb)
Index: lsm-2.5/net/core/sock.c
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/net/core/sock.c,v
retrieving revision 1.8
diff -u -r1.8 sock.c
--- lsm-2.5/net/core/sock.c	24 Jan 2003 15:20:01 -0000	1.8
+++ lsm-2.5/net/core/sock.c	27 Jan 2003 14:44:53 -0000
@@ -601,7 +601,6 @@
 			sk->family = family;
 			sock_lock_init(sk);
 		}
-		sk->security = NULL;
 		if (security_sock_alloc(sk, priority)) {
 			kmem_cache_free(slab, sk);
 			return NULL;
Index: lsm-2.5/security/Kconfig
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/security/Kconfig,v
retrieving revision 1.6
diff -u -r1.6 Kconfig
--- lsm-2.5/security/Kconfig	27 Dec 2002 13:45:00 -0000	1.6
+++ lsm-2.5/security/Kconfig	27 Jan 2003 15:37:29 -0000
@@ -15,6 +15,15 @@
 
 	  If you are unsure how to answer this question, answer N.
 
+config SECURITY_NETWORK
+	bool "Socket and Networking Security Hooks"
+	depends on SECURITY!=n
+	help
+	  This enables the socket and networking security hooks.
+	  If enabled, a security module can use these hooks to
+	  implement socket and networking access controls.
+	  If you are unsure how to answer this question, answer N.
+
 config SECURITY_CAPABILITIES
 	tristate "Default Linux Capabilities"
 	depends on SECURITY!=n
Index: lsm-2.5/security/dummy.c
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/security/dummy.c,v
retrieving revision 1.35
diff -u -r1.35 dummy.c
--- lsm-2.5/security/dummy.c	24 Jan 2003 20:32:49 -0000	1.35
+++ lsm-2.5/security/dummy.c	27 Jan 2003 16:32:48 -0000
@@ -20,6 +20,8 @@
 #include <linux/security.h>
 #include <linux/skbuff.h>
 #include <linux/netlink.h>
+#include <net/sock.h>
+#include <net/tcp.h>
 
 static int dummy_sethostname (char *hostname)
 {
@@ -664,6 +666,18 @@
 	return 0;
 }
 
+static int dummy_ip_decode_options (struct sk_buff *skb, const char *optptr,
+				    unsigned char **pp_ptr)
+{
+	if (!skb && !capable (CAP_NET_RAW)) {
+		(const unsigned char *) *pp_ptr = optptr;
+		return -EPERM;
+	}
+	return 0;
+}
+
+#ifdef CONFIG_SECURITY_NETWORK
+
 static void dummy_ip_fragment (struct sk_buff *newskb,
 			       const struct sk_buff *oldskb)
 {
@@ -685,16 +699,6 @@
 	return;
 }
 
-static int dummy_ip_decode_options (struct sk_buff *skb, const char *optptr,
-				    unsigned char **pp_ptr)
-{
-	if (!skb && !capable (CAP_NET_RAW)) {
-		(const unsigned char *) *pp_ptr = optptr;
-		return -EPERM;
-	}
-	return 0;
-}
-
 static void dummy_netdev_unregister (struct net_device *dev)
 {
 	return;
@@ -778,6 +782,7 @@
 
 static int dummy_socket_sock_alloc_security(struct sock *sk, int gfp_mask)
 {
+	sk->security = NULL;
 	return 0;
 }
 
@@ -793,6 +798,7 @@
 
 static int dummy_open_request_alloc_security(struct open_request * req)
 {
+	req->security = NULL;
 	return 0;
 }
 
@@ -866,6 +872,8 @@
 	return;
 }
 
+#endif
+
 static int dummy_register_security (const char *name, struct security_operations *ops)
 {
 	return -EINVAL;
@@ -1002,6 +1010,7 @@
 	set_to_dummy_if_null(ops, sem_semop);
 	set_to_dummy_if_null(ops, register_security);
 	set_to_dummy_if_null(ops, unregister_security);
+	set_to_dummy_if_null(ops, d_instantiate);
 	set_to_dummy_if_null(ops, sethostname);
 	set_to_dummy_if_null(ops, setdomainname);
 	set_to_dummy_if_null(ops, reboot);
@@ -1012,11 +1021,12 @@
 	set_to_dummy_if_null(ops, settime);
 	set_to_dummy_if_null(ops, netlink_send);
 	set_to_dummy_if_null(ops, netlink_recv);
+	set_to_dummy_if_null(ops, ip_decode_options);
+#ifdef CONFIG_SECURITY_NETWORK
 	set_to_dummy_if_null(ops, ip_fragment);
 	set_to_dummy_if_null(ops, ip_defragment);
 	set_to_dummy_if_null(ops, ip_decapsulate);
 	set_to_dummy_if_null(ops, ip_encapsulate);
-	set_to_dummy_if_null(ops, ip_decode_options);
 	set_to_dummy_if_null(ops, netdev_unregister);
 	set_to_dummy_if_null(ops, socket_create);
 	set_to_dummy_if_null(ops, socket_post_create);
@@ -1048,6 +1058,6 @@
 	set_to_dummy_if_null(ops, skb_set_owner_w);
 	set_to_dummy_if_null(ops, skb_recv_datagram);
 	set_to_dummy_if_null(ops, skb_free_security);
-	set_to_dummy_if_null(ops, d_instantiate);
+#endif
 }
 
Index: lsm-2.5/security/dte/dte.c
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/security/dte/dte.c,v
retrieving revision 1.25
diff -u -r1.25 dte.c
--- lsm-2.5/security/dte/dte.c	24 Jan 2003 20:32:50 -0000	1.25
+++ lsm-2.5/security/dte/dte.c	27 Jan 2003 16:13:45 -0000
@@ -586,27 +586,6 @@
 		dte_secondary_ops->task_reparent_to_init(p);
 }
 
-static void dte_ip_fragment (struct sk_buff *newskb,
-			     const struct sk_buff *oldskb)
-{
-	return;
-}
-
-static int dte_ip_defragment (struct sk_buff *skb)
-{
-	return 0;
-}
-
-static void dte_ip_encapsulate (struct sk_buff *skb)
-{
-	return;
-}
-
-static void dte_ip_decapsulate (struct sk_buff *skb)
-{
-	return;
-}
-
 static int dte_ip_decode_options (struct sk_buff *skb, const char *optptr,
 				  unsigned char **pp_ptr)
 {
@@ -617,146 +596,6 @@
 	return 0;
 }
 
-static void dte_netdev_unregister (struct net_device *dev)
-{
-	return;
-}
-
-static int dte_socket_create (int family, int type, int protocol)
-{
-	return 0;
-}
-
-static void dte_socket_post_create (struct socket *sock, int family, int type,
-				    int protocol)
-{
-	return;
-}
-
-static int dte_socket_bind (struct socket *sock, struct sockaddr *address,
-			    int addrlen)
-{
-	return 0;
-}
-
-static int dte_socket_connect (struct socket *sock, struct sockaddr *address,
-			       int addrlen)
-{
-	return 0;
-}
-
-static int dte_socket_listen (struct socket *sock, int backlog)
-{
-	return 0;
-}
-
-static int dte_socket_accept (struct socket *sock, struct socket *newsock)
-{
-	return 0;
-}
-
-static void dte_socket_post_accept (struct socket *sock, 
-				    struct socket *newsock)
-{
-	return;
-}
-
-static int dte_socket_sendmsg (struct socket *sock, struct msghdr *msg,
-			       int size)
-{
-	return 0;
-}
-
-static int dte_socket_recvmsg (struct socket *sock, struct msghdr *msg,
-			       int size, int flags)
-{
-	return 0;
-}
-
-static int dte_socket_getsockname (struct socket *sock)
-{
-	return 0;
-}
-
-static int dte_socket_getpeername (struct socket *sock)
-{
-	return 0;
-}
-
-static int dte_socket_setsockopt (struct socket *sock, int level, int optname)
-{
-	return 0;
-}
-
-static int dte_socket_getsockopt (struct socket *sock, int level, int optname)
-{
-	return 0;
-}
-
-static int dte_socket_shutdown (struct socket *sock, int how)
-{
-	return 0;
-}
-
-static int dte_socket_sock_alloc_security (struct sock *sk, int gfp_mask)
-{
-	return 0;
-}
-
-static void dte_socket_sock_free_security (struct sock *sk)
-{
-	return;
-}
-
-static int dte_sock_rcv_skb (struct sock *sk, struct sk_buff *skb)
-{
-	return 0;
-}
-
-static int dte_open_request_alloc_security (struct open_request *req)
-{
-	return 0;
-}
-
-static void dte_open_request_free_security (struct open_request *req)
-{
-	return;
-}
-
-static void dte_tcp_connection_request (struct sock *sk,
-					struct sk_buff *skb,
-					struct open_request *req)
-{
-	return;
-}
-
-static void dte_tcp_synack (struct sock *sk, struct sk_buff *skb,
-			    struct open_request *req)
-{
-	return;
-}
-
-
-static void dte_tcp_create_openreq_child (struct sock *sk,
-					  struct sock *newsk,
-					  struct sk_buff *skb,
-					  struct open_request *req)
-{
-	return;
-}
-
-static int dte_socket_unix_stream_connect (struct socket *sock,
-					   struct socket *other,
-					   struct sock *newsk)
-{
-	return 0;
-}
-
-static int dte_socket_unix_may_send (struct socket *sock, struct socket *other)
-{
-	return 0;
-}
-
 static int dte_ipc_permission (struct kern_ipc_perm *ipcp, short flag)
 {
 	return 0;
@@ -852,37 +691,6 @@
 	return 0;
 }
 
-static int dte_skb_alloc_security (struct sk_buff *skb, int gfp_mask)
-{
-	return 0;
-}
-
-static int dte_skb_clone (struct sk_buff *newskb, const struct sk_buff *oldskb)
-{
-	return 0;
-}
-
-static void dte_skb_copy (struct sk_buff *newskb, const struct sk_buff *oldskb)
-{
-	return;
-}
-
-static void dte_skb_set_owner_w (struct sk_buff *skb, struct sock *sk)
-{
-	return;
-}
-
-static void dte_skb_recv_datagram (struct sk_buff *skb, struct sock *sk,
-				   unsigned flags)
-{
-	return;
-}
-
-static void dte_skb_free_security (struct sk_buff *skb)
-{
-	return;
-}
-
 static int dte_register (const char *name, struct security_operations *ops)
 {
 	int rc;
@@ -940,8 +748,6 @@
 
 	netlink_send:			dte_netlink_send,
 	netlink_recv:			dte_netlink_recv,
-	unix_stream_connect:		dte_socket_unix_stream_connect,
-	unix_may_send:			dte_socket_unix_may_send,
 
 	bprm_alloc_security:		dte_binprm_alloc_security,
 	bprm_free_security:		dte_binprm_free_security,
@@ -1024,43 +830,7 @@
 	task_kmod_set_label:		dte_task_kmod_set_label,
 	task_reparent_to_init:		dte_task_reparent_to_init,
 
-	socket_create:			dte_socket_create,
-	socket_post_create:		dte_socket_post_create,
-	socket_bind:			dte_socket_bind,
-	socket_connect:			dte_socket_connect,
-	socket_listen:			dte_socket_listen,
-	socket_accept:			dte_socket_accept,
-	socket_post_accept:		dte_socket_post_accept,
-	socket_sendmsg:			dte_socket_sendmsg,
-	socket_recvmsg:			dte_socket_recvmsg,
-	socket_getsockname:		dte_socket_getsockname,
-	socket_getpeername:		dte_socket_getpeername,
-	socket_getsockopt:		dte_socket_getsockopt,
-	socket_setsockopt:		dte_socket_setsockopt,
-	socket_shutdown:		dte_socket_shutdown,
-	socket_sock_alloc_security:	dte_socket_sock_alloc_security,
-	socket_sock_free_security:	dte_socket_sock_free_security,
-	socket_sock_rcv_skb:		dte_sock_rcv_skb,
-	open_request_alloc_security:	dte_open_request_alloc_security,
-	open_request_free_security:	dte_open_request_free_security,
-	tcp_connection_request:		dte_tcp_connection_request,
-	tcp_synack:			dte_tcp_synack,
-	tcp_create_openreq_child:	dte_tcp_create_openreq_child,
-	
-	skb_alloc_security:		dte_skb_alloc_security,
-	skb_clone:			dte_skb_clone,
-	skb_copy:			dte_skb_copy,
-	skb_set_owner_w:		dte_skb_set_owner_w,
-	skb_recv_datagram:		dte_skb_recv_datagram,
-	skb_free_security:		dte_skb_free_security,
-	
-	ip_fragment:			dte_ip_fragment,
-	ip_defragment:			dte_ip_defragment,
-	ip_encapsulate:			dte_ip_encapsulate,
-	ip_decapsulate:			dte_ip_decapsulate,
 	ip_decode_options:		dte_ip_decode_options,
-	
-	netdev_unregister:		dte_netdev_unregister,
 	
 	ipc_permission:			dte_ipc_permission,
 	
Index: lsm-2.5/security/selinux/Kconfig
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/security/selinux/Kconfig,v
retrieving revision 1.2
diff -u -r1.2 Kconfig
--- lsm-2.5/security/selinux/Kconfig	3 Dec 2002 14:11:28 -0000	1.2
+++ lsm-2.5/security/selinux/Kconfig	27 Jan 2003 15:38:16 -0000
@@ -33,7 +33,7 @@
 
 config SECURITY_SELINUX_EXTSOCKET
 	bool "NSA SELinux extended socket call API (EXPERIMENTAL)"
-	depends on SECURITY_SELINUX && EXPERIMENTAL
+	depends on SECURITY_SELINUX && SECURITY_NETWORK && EXPERIMENTAL
 	default n
 	help
 	  This enables the NSA SELinux extended socket call API.
@@ -45,7 +45,7 @@
 
 config SECURITY_SELINUX_NSID
 	bool "NSA SELinux network SID API (EXPERIMENTAL)"
-	depends on SECURITY_SELINUX && NETFILTER && EXPERIMENTAL
+	depends on SECURITY_SELINUX && SECURITY_NETWORK && NETFILTER && EXPERIMENTAL
 	default n
 	help
 	  This enables the NSA SELinux network SID API.
@@ -55,7 +55,7 @@
 
 config SECURITY_SELINUX_SELOPT
 	tristate "NSA SELinux CIPSO/FIPS-188 (EXPERIMENTAL)"
-	depends on SECURITY_SELINUX_NSID && NETFILTER && EXPERIMENTAL
+	depends on SECURITY_SELINUX_NSID && EXPERIMENTAL
 	default n
 	help
 	  This enables the NSA SELinux CIPSO/FIPS-188 IP options for
Index: lsm-2.5/security/selinux/extsocket.h
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/security/selinux/extsocket.h,v
retrieving revision 1.9
diff -u -r1.9 extsocket.h
--- lsm-2.5/security/selinux/extsocket.h	21 Jan 2003 20:32:30 -0000	1.9
+++ lsm-2.5/security/selinux/extsocket.h	27 Jan 2003 16:05:21 -0000
@@ -33,7 +33,7 @@
 
 static spinlock_t open_request_alloc_lock = SPIN_LOCK_UNLOCKED;
 
-static int extsocket_open_request_alloc_security(struct open_request *req)
+static inline int extsocket_open_request_alloc_security(struct open_request *req)
 {
 	struct open_request_security_struct *orsec, *new_orsec;
 	unsigned long flags;
@@ -62,7 +62,7 @@
 	return 0;
 }
 
-static void extsocket_open_request_free_security(struct open_request *req)
+static inline void extsocket_open_request_free_security(struct open_request *req)
 {
 	struct open_request_security_struct *orsec;
 	unsigned long flags;
@@ -673,12 +673,12 @@
 
 #else
 
-static int extsocket_open_request_alloc_security(struct open_request *req)
+static inline int extsocket_open_request_alloc_security(struct open_request *req)
 {
 	return 0;
 }
 
-static void extsocket_open_request_free_security(struct open_request *req)
+static inline void extsocket_open_request_free_security(struct open_request *req)
 {
 	return;
 }
Index: lsm-2.5/security/selinux/hooks.c
===================================================================
RCS file: /home/pal/CVS/lsm-2.5/security/selinux/hooks.c,v
retrieving revision 1.92
diff -u -r1.92 hooks.c
--- lsm-2.5/security/selinux/hooks.c	24 Jan 2003 20:32:51 -0000	1.92
+++ lsm-2.5/security/selinux/hooks.c	27 Jan 2003 16:42:58 -0000
@@ -148,6 +148,8 @@
 	kfree(tsec);
 }
 
+#ifdef CONFIG_SECURITY_NETWORK
+
 /* 
  * Functions used to allocate/free sock security structures.
  */
@@ -198,6 +200,8 @@
 	kfree(sksec);
 }
 
+#endif
+
 static spinlock_t inode_alloc_lock = SPIN_LOCK_UNLOCKED;
 
 static int inode_alloc_security(struct inode *inode)
@@ -349,6 +353,8 @@
 	kfree(sbsec);
 }
 
+#ifdef CONFIG_SECURITY_NETWORK
+
 static spinlock_t skb_alloc_lock = SPIN_LOCK_UNLOCKED;
 
 static int skb_alloc_security(struct sk_buff *skb, int gfp_mask)
@@ -445,6 +451,8 @@
 	kfree(nsec);
 }
 
+#endif
+
 /* The security server must be initialized before
    any labeling or access decisions can be provided. */
 extern int ss_initialized;
@@ -770,6 +778,8 @@
 	return 0;
 }
 
+#ifdef CONFIG_SECURITY_NETWORK
+
 /* The network interface security attributes must be initialized before 
  * first use. */
 int netdev_precondition(struct net_device *dev) 
@@ -795,6 +805,8 @@
 	return 1;
 }
 
+#endif
+
 /* Convert a Linux signal to an access vector. */
 static inline access_vector_t signal_to_av(int sig) 
 {
@@ -1312,36 +1324,6 @@
 
 /* assorted security operations  (mostly syscall interposition) */
 
-static int selinux_sethostname(char *hostname)
-{
-	/* Controlled via the capable hook - CAP_SYS_ADMIN */
-	return 0;
-}
-
-static int selinux_setdomainname(char *domainname)
-{
-	/* Controlled via the capable hook - CAP_SYS_ADMIN */
-	return 0;
-}
-
-static int selinux_reboot(unsigned int cmd)
-{
-	/* Controlled via the capable hook - CAP_SYS_BOOT */
-	return 0;
-}
-
-static int selinux_ioperm(unsigned long from, unsigned long num, int turn_on)
-{
-	/* Controlled via the capable hook - CAP_SYS_RAWIO */
-	return 0;
-}
-
-static int selinux_iopl(unsigned int old, unsigned int level)
-{
-	/* Controlled via the capable hook - CAP_SYS_RAWIO */
-	return 0;
-}
-
 static int selinux_ptrace(struct task_struct *parent, struct task_struct *child)
 {
 	int rc;
@@ -1386,12 +1368,6 @@
 	return secondary_ops->capset_set(target, effective, inheritable, permitted);
 }
 
-static int selinux_acct(struct file *file)
-{
-	/* Controlled via the capable hook - CAP_SYS_PACCT */
-	return 0;
-}
-
 static int selinux_capable(struct task_struct *tsk, int cap)
 {
 	int rc;
@@ -1548,11 +1524,6 @@
 	return rc;
 }
 
-static int selinux_settime (struct timeval *tv, struct timezone *tz)
-{
-        return 0;
-}
-
 static int selinux_netlink_send(struct sk_buff *skb)  
 {
 	if (capable(CAP_NET_ADMIN))
@@ -2482,6 +2453,8 @@
 	return;
 }
 
+#ifdef CONFIG_SECURITY_NETWORK
+
 static void skb_copy_security(struct skb_security_struct *new,
                               struct skb_security_struct *old)
 {
@@ -3111,6 +3084,7 @@
 
 static int selinux_socket_sock_alloc_security(struct sock *sk, int gfp_mask)
 {
+	sk->security = NULL;
 	return sock_alloc_security(sk, gfp_mask);
 }
 
@@ -3226,6 +3200,7 @@
 
 static int selinux_open_request_alloc_security(struct open_request *req)
 {
+	req->security = NULL;
 	return extsocket_open_request_alloc_security(req);
 }
 
@@ -3334,6 +3309,8 @@
 	return extsocket_unix_may_send(isec, other_isec, &ad);
 }
 
+#endif
+
 static spinlock_t ipc_alloc_lock = SPIN_LOCK_UNLOCKED;
 
 static int ipc_alloc_security(struct task_struct *task, 
@@ -3889,6 +3866,8 @@
 	return ipc_has_perm(ipcp, sclass, av);
 }
 
+#ifdef CONFIG_SECURITY_NETWORK
+
 static int selinux_skb_alloc_security(struct sk_buff *skb, int gfp_mask)
 {
 	return skb_alloc_security(skb, gfp_mask);
@@ -3977,6 +3956,8 @@
 	skb_free_security(skb);
 }
 
+#endif
+
 /* module stacking operations */
 int selinux_register_security (const char *name, struct security_operations *ops)
 {
@@ -4013,16 +3994,10 @@
 }
 
 struct security_operations selinux_ops = {
-	sethostname:			selinux_sethostname,
-	setdomainname:			selinux_setdomainname,
-	reboot:				selinux_reboot,
-	ioperm:				selinux_ioperm,
-	iopl:				selinux_iopl,
 	ptrace:				selinux_ptrace,
 	capget:			        selinux_capget,
 	capset_check:		        selinux_capset_check,
 	capset_set:		        selinux_capset_set,	
-	acct:				selinux_acct,
 	sysctl:				selinux_sysctl,
 	capable:	                selinux_capable,
 	swapon:				selinux_swapon,
@@ -4030,12 +4005,9 @@
 	quotactl:			selinux_quotactl,
 	quota_on:			selinux_quota_on,
 	syslog:				selinux_syslog,
-	settime:                        selinux_settime,	
 
 	netlink_send:			selinux_netlink_send,
         netlink_recv:			selinux_netlink_recv,
-        unix_stream_connect:		selinux_socket_unix_stream_connect,
-	unix_may_send:			selinux_socket_unix_may_send,
 
 	bprm_alloc_security:		selinux_bprm_alloc_security,
 	bprm_free_security:		selinux_bprm_free_security,
@@ -4118,6 +4090,39 @@
 	task_kmod_set_label:		selinux_task_kmod_set_label,
 	task_reparent_to_init:		selinux_task_reparent_to_init,
 
+	ipc_permission:			selinux_ipc_permission,
+	
+	msg_msg_alloc_security:		selinux_msg_msg_alloc_security,
+	msg_msg_free_security:		selinux_msg_msg_free_security,
+	
+	msg_queue_alloc_security:	selinux_msg_queue_alloc_security,
+	msg_queue_free_security:	selinux_msg_queue_free_security,
+	msg_queue_associate:		selinux_msg_queue_associate,
+	msg_queue_msgctl:		selinux_msg_queue_msgctl,
+	msg_queue_msgsnd:		selinux_msg_queue_msgsnd,
+	msg_queue_msgrcv:		selinux_msg_queue_msgrcv,
+	
+	shm_alloc_security:		selinux_shm_alloc_security,
+	shm_free_security:		selinux_shm_free_security,
+	shm_associate:			selinux_shm_associate,
+	shm_shmctl:			selinux_shm_shmctl,
+	shm_shmat:			selinux_shm_shmat,
+	
+	sem_alloc_security: 		selinux_sem_alloc_security,
+	sem_free_security:  		selinux_sem_free_security,
+	sem_associate:			selinux_sem_associate,
+	sem_semctl:			selinux_sem_semctl,
+	sem_semop:			selinux_sem_semop,
+	
+	register_security:		&selinux_register_security,
+	unregister_security:		&selinux_unregister_security,
+
+	d_instantiate:                  selinux_d_instantiate,
+
+#ifdef CONFIG_SECURITY_NETWORK
+        unix_stream_connect:		selinux_socket_unix_stream_connect,
+	unix_may_send:			selinux_socket_unix_may_send,
+
 	socket_create:			selinux_socket_create,
 	socket_post_create:		selinux_socket_post_create,
 	socket_bind:			selinux_socket_bind,
@@ -4155,35 +4160,8 @@
 	ip_decode_options:		selinux_ip_decode_options,
 	
 	netdev_unregister:		selinux_netdev_unregister,
-	
-	ipc_permission:			selinux_ipc_permission,
-	
-	msg_msg_alloc_security:		selinux_msg_msg_alloc_security,
-	msg_msg_free_security:		selinux_msg_msg_free_security,
-	
-	msg_queue_alloc_security:	selinux_msg_queue_alloc_security,
-	msg_queue_free_security:	selinux_msg_queue_free_security,
-	msg_queue_associate:		selinux_msg_queue_associate,
-	msg_queue_msgctl:		selinux_msg_queue_msgctl,
-	msg_queue_msgsnd:		selinux_msg_queue_msgsnd,
-	msg_queue_msgrcv:		selinux_msg_queue_msgrcv,
-	
-	shm_alloc_security:		selinux_shm_alloc_security,
-	shm_free_security:		selinux_shm_free_security,
-	shm_associate:			selinux_shm_associate,
-	shm_shmctl:			selinux_shm_shmctl,
-	shm_shmat:			selinux_shm_shmat,
-	
-	sem_alloc_security: 		selinux_sem_alloc_security,
-	sem_free_security:  		selinux_sem_free_security,
-	sem_associate:			selinux_sem_associate,
-	sem_semctl:			selinux_sem_semctl,
-	sem_semop:			selinux_sem_semop,
-	
-	register_security:		&selinux_register_security,
-	unregister_security:		&selinux_unregister_security,
 
-	d_instantiate:                  selinux_d_instantiate,
+#endif
 };
 
 extern long sys_security_selinux(struct pt_regs regs);
@@ -4250,7 +4228,7 @@
 __initcall(selinux_init);
 #endif
 
-#ifdef CONFIG_NETFILTER
+#if defined(CONFIG_SECURITY_NETWORK) && defined(CONFIG_NETFILTER)
 
 #define NF_IP_PRI_SELINUX_FIRST	(NF_IP_PRI_CONNTRACK + 5)
 #define NF_IP_PRI_SELINUX_LAST	-NF_IP_PRI_SELINUX_FIRST


Copyright © 2003, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds