ChangeSet 1.2337.1.1, 2005/04/01 12:33:21-08:00, [EMAIL PROTECTED]

        [SELINUX]: Fix for removal of i_sock
        
        This patch against -bk eliminates the use of i_sock by SELinux as it
        appears to have been removed recently, breaking the build of SELinux in
        -bk.  Simply replacing the i_sock test with an S_ISSOCK test would be
        unsafe in the SELinux code, as the latter will also return true for the
        inodes of socket files in the filesystem, not just the actual socket
        objects IIUC.  Hence this patch reworks the SELinux code to avoid the
        need to apply such a test in the first place, part of which was
        obsoleted anyway by earlier changes to SELinux.  Please apply.
        
        Signed-off-by:  Stephen Smalley <[EMAIL PROTECTED]>
        Signed-off-by:  James Morris <[EMAIL PROTECTED]>
        Signed-off-by: David S. Miller <[EMAIL PROTECTED]>



 hooks.c |   21 +++------------------
 1 files changed, 3 insertions(+), 18 deletions(-)


diff -Nru a/security/selinux/hooks.c b/security/selinux/hooks.c
--- a/security/selinux/hooks.c  2005-04-01 14:05:43 -08:00
+++ b/security/selinux/hooks.c  2005-04-01 14:05:43 -08:00
@@ -877,18 +877,8 @@
        isec->initialized = 1;
 
 out:
-       if (inode->i_sock) {
-               struct socket *sock = SOCKET_I(inode);
-               if (sock->sk) {
-                       isec->sclass = 
socket_type_to_security_class(sock->sk->sk_family,
-                                                                    
sock->sk->sk_type,
-                                                                    
sock->sk->sk_protocol);
-               } else {
-                       isec->sclass = SECCLASS_SOCKET;
-               }
-       } else {
+       if (isec->sclass == SECCLASS_FILE)
                isec->sclass = inode_mode_to_security_class(inode->i_mode);
-       }
 
        if (hold_sem)
                up(&isec->sem);
@@ -2979,18 +2969,15 @@
 static void selinux_socket_post_create(struct socket *sock, int family,
                                       int type, int protocol, int kern)
 {
-       int err;
        struct inode_security_struct *isec;
        struct task_security_struct *tsec;
 
-       err = inode_doinit(SOCK_INODE(sock));
-       if (err < 0)
-               return;
        isec = SOCK_INODE(sock)->i_security;
 
        tsec = current->security;
        isec->sclass = socket_type_to_security_class(family, type, protocol);
        isec->sid = kern ? SECINITSID_KERNEL : tsec->sid;
+       isec->initialized = 1;
 
        return;
 }
@@ -3158,14 +3145,12 @@
        if (err)
                return err;
 
-       err = inode_doinit(SOCK_INODE(newsock));
-       if (err < 0)
-               return err;
        newisec = SOCK_INODE(newsock)->i_security;
 
        isec = SOCK_INODE(sock)->i_security;
        newisec->sclass = isec->sclass;
        newisec->sid = isec->sid;
+       newisec->initialized = 1;
 
        return 0;
 }
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to