NetLabel: correct locking in selinux_netlbl_socket_setsid()
authorPaul Moore <paul.moore@hp.com>
Fri, 5 Jan 2007 20:08:21 +0000 (15:08 -0500)
committerDavid S. Miller <davem@sunset.davemloft.net>
Tue, 9 Jan 2007 08:30:00 +0000 (00:30 -0800)
The spinlock protecting the update of the "sksec->nlbl_state" variable is not
currently softirq safe which can lead to problems.  This patch fixes this by
changing the spin_{un}lock() functions into spin_{un}lock_bh() functions.

Signed-off-by: Paul Moore <paul.moore@hp.com>
Signed-off-by: James Morris <jmorris@namei.org>
security/selinux/ss/services.c

index 372eaad..3eb1fa9 100644 (file)
@@ -2491,9 +2491,9 @@ static int selinux_netlbl_socket_setsid(struct socket *sock, u32 sid)
 
        rc = netlbl_socket_setattr(sock, &secattr);
        if (rc == 0) {
-               spin_lock(&sksec->nlbl_lock);
+               spin_lock_bh(&sksec->nlbl_lock);
                sksec->nlbl_state = NLBL_LABELED;
-               spin_unlock(&sksec->nlbl_lock);
+               spin_unlock_bh(&sksec->nlbl_lock);
        }
 
 netlbl_socket_setsid_return: