diff options
Diffstat (limited to 'net/unix/af_unix.c')
| -rw-r--r-- | net/unix/af_unix.c | 29 | 
1 files changed, 19 insertions, 10 deletions
| diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 01625ccc3ae6..29fc8bee9702 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -80,6 +80,8 @@   *		  with BSD names.   */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +  #include <linux/module.h>  #include <linux/kernel.h>  #include <linux/signal.h> @@ -366,7 +368,7 @@ static void unix_sock_destructor(struct sock *sk)  	WARN_ON(!sk_unhashed(sk));  	WARN_ON(sk->sk_socket);  	if (!sock_flag(sk, SOCK_DEAD)) { -		printk(KERN_INFO "Attempt to release alive unix socket: %p\n", sk); +		pr_info("Attempt to release alive unix socket: %p\n", sk);  		return;  	} @@ -378,7 +380,7 @@ static void unix_sock_destructor(struct sock *sk)  	sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);  	local_bh_enable();  #ifdef UNIX_REFCNT_DEBUG -	printk(KERN_DEBUG "UNIX %p is destroyed, %ld are still alive.\n", sk, +	pr_debug("UNIX %p is destroyed, %ld are still alive.\n", sk,  		atomic_long_read(&unix_nr_socks));  #endif  } @@ -530,13 +532,17 @@ static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *,  static int unix_seqpacket_recvmsg(struct kiocb *, struct socket *,  				  struct msghdr *, size_t, int); -static void unix_set_peek_off(struct sock *sk, int val) +static int unix_set_peek_off(struct sock *sk, int val)  {  	struct unix_sock *u = unix_sk(sk); -	mutex_lock(&u->readlock); +	if (mutex_lock_interruptible(&u->readlock)) +		return -EINTR; +  	sk->sk_peek_off = val;  	mutex_unlock(&u->readlock); + +	return 0;  } @@ -714,7 +720,9 @@ static int unix_autobind(struct socket *sock)  	int err;  	unsigned int retries = 0; -	mutex_lock(&u->readlock); +	err = mutex_lock_interruptible(&u->readlock); +	if (err) +		return err;  	err = 0;  	if (u->addr) @@ -873,7 +881,9 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)  		goto out;  	addr_len = err; -	mutex_lock(&u->readlock); +	err = mutex_lock_interruptible(&u->readlock); +	if (err) +		goto out;  	err = -EINVAL;  	if (u->addr) @@ -1440,7 +1450,7 @@ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock,  	struct sock *sk = sock->sk;  	struct net *net = sock_net(sk);  	struct unix_sock *u = unix_sk(sk); -	struct sockaddr_un *sunaddr = msg->msg_name; +	DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr, msg->msg_name);  	struct sock *other = NULL;  	int namelen = 0; /* fake GCC */  	int err; @@ -1902,7 +1912,7 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,  	struct scm_cookie tmp_scm;  	struct sock *sk = sock->sk;  	struct unix_sock *u = unix_sk(sk); -	struct sockaddr_un *sunaddr = msg->msg_name; +	DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr, msg->msg_name);  	int copied = 0;  	int check_creds = 0;  	int target; @@ -2433,8 +2443,7 @@ static int __init af_unix_init(void)  	rc = proto_register(&unix_proto, 1);  	if (rc != 0) { -		printk(KERN_CRIT "%s: Cannot create unix_sock SLAB cache!\n", -		       __func__); +		pr_crit("%s: Cannot create unix_sock SLAB cache!\n", __func__);  		goto out;  	} | 
