X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Funix%2Faf_unix.c;h=d2bdd01167623ab0d890cb033449d9e2fe022721;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=bcda09eb8689edf9c0ce58c3d5c0751583458bde;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index bcda09eb8..d2bdd0116 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -83,6 +83,7 @@ */ #include +#include #include #include #include @@ -130,24 +131,6 @@ static atomic_t unix_nr_socks = ATOMIC_INIT(0); #define UNIX_ABSTRACT(sk) (unix_sk(sk)->addr->hash != UNIX_HASH_SIZE) -#ifdef CONFIG_SECURITY_NETWORK -static void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) -{ - memcpy(UNIXSID(skb), &scm->secid, sizeof(u32)); -} - -static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) -{ - scm->secid = *UNIXSID(skb); -} -#else -static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) -{ } - -static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) -{ } -#endif /* CONFIG_SECURITY_NETWORK */ - /* * SMP locking strategy: * hash table is protected with spinlock unix_table_lock @@ -564,14 +547,6 @@ static struct proto unix_proto = { .obj_size = sizeof(struct unix_sock), }; -/* - * AF_UNIX sockets do not interact with hardware, hence they - * dont trigger interrupts - so it's safe for them to have - * bh-unsafe locking for their sk_receive_queue.lock. Split off - * this special lock-class by reinitializing the spinlock key: - */ -static struct lock_class_key af_unix_sk_receive_queue_lock_key; - static struct sock * unix_create1(struct socket *sock) { struct sock *sk = NULL; @@ -587,8 +562,6 @@ static struct sock * unix_create1(struct socket *sock) atomic_inc(&unix_nr_socks); sock_init_data(sock,sk); - lockdep_set_class(&sk->sk_receive_queue.lock, - &af_unix_sk_receive_queue_lock_key); sk->sk_write_space = unix_write_space; sk->sk_max_ack_backlog = sysctl_unix_max_dgram_qlen; @@ -662,10 +635,11 @@ static int unix_autobind(struct socket *sock) goto out; err = -ENOMEM; - addr = kzalloc(sizeof(*addr) + sizeof(short) + 16, GFP_KERNEL); + addr = kmalloc(sizeof(*addr) + sizeof(short) + 16, GFP_KERNEL); if (!addr) goto out; + memset(addr, 0, sizeof(*addr) + sizeof(short) + 16); addr->name->sun_family = AF_UNIX; atomic_set(&addr->refcnt, 1); @@ -1053,7 +1027,7 @@ restart: goto out_unlock; } - unix_state_wlock_nested(sk); + unix_state_wlock(sk); if (sk->sk_state != st) { unix_state_wunlock(sk); @@ -1321,7 +1295,6 @@ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock, memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred)); if (siocb->scm->fp) unix_attach_fds(siocb->scm, skb); - unix_get_secdata(siocb->scm, skb); skb->h.raw = skb->data; err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len); @@ -1602,7 +1575,6 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock, memset(&tmp_scm, 0, sizeof(tmp_scm)); } siocb->scm->creds = *UNIXCREDS(skb); - unix_set_secdata(siocb->scm, skb); if (!(flags & MSG_PEEK)) {