xref: /linux/net/unix/af_unix.c (revision c28054d4b31d78272f65c0d11db0796f50fb9569)
1 /*
2  * NET4:	Implementation of BSD Unix domain sockets.
3  *
4  * Authors:	Alan Cox, <alan.cox@linux.org>
5  *
6  *		This program is free software; you can redistribute it and/or
7  *		modify it under the terms of the GNU General Public License
8  *		as published by the Free Software Foundation; either version
9  *		2 of the License, or (at your option) any later version.
10  *
11  * Version:	$Id: af_unix.c,v 1.133 2002/02/08 03:57:19 davem Exp $
12  *
13  * Fixes:
14  *		Linus Torvalds	:	Assorted bug cures.
15  *		Niibe Yutaka	:	async I/O support.
16  *		Carsten Paeth	:	PF_UNIX check, address fixes.
17  *		Alan Cox	:	Limit size of allocated blocks.
18  *		Alan Cox	:	Fixed the stupid socketpair bug.
19  *		Alan Cox	:	BSD compatibility fine tuning.
20  *		Alan Cox	:	Fixed a bug in connect when interrupted.
21  *		Alan Cox	:	Sorted out a proper draft version of
22  *					file descriptor passing hacked up from
23  *					Mike Shaver's work.
24  *		Marty Leisner	:	Fixes to fd passing
25  *		Nick Nevin	:	recvmsg bugfix.
26  *		Alan Cox	:	Started proper garbage collector
27  *		Heiko EiBfeldt	:	Missing verify_area check
28  *		Alan Cox	:	Started POSIXisms
29  *		Andreas Schwab	:	Replace inode by dentry for proper
30  *					reference counting
31  *		Kirk Petersen	:	Made this a module
32  *	    Christoph Rohland	:	Elegant non-blocking accept/connect algorithm.
33  *					Lots of bug fixes.
34  *	     Alexey Kuznetosv	:	Repaired (I hope) bugs introduces
35  *					by above two patches.
36  *	     Andrea Arcangeli	:	If possible we block in connect(2)
37  *					if the max backlog of the listen socket
38  *					is been reached. This won't break
39  *					old apps and it will avoid huge amount
40  *					of socks hashed (this for unix_gc()
41  *					performances reasons).
42  *					Security fix that limits the max
43  *					number of socks to 2*max_files and
44  *					the number of skb queueable in the
45  *					dgram receiver.
46  *		Artur Skawina   :	Hash function optimizations
47  *	     Alexey Kuznetsov   :	Full scale SMP. Lot of bugs are introduced 8)
48  *	      Malcolm Beattie   :	Set peercred for socketpair
49  *	     Michal Ostrowski   :       Module initialization cleanup.
50  *	     Arnaldo C. Melo	:	Remove MOD_{INC,DEC}_USE_COUNT,
51  *	     				the core infrastructure is doing that
52  *	     				for all net proto families now (2.5.69+)
53  *
54  *
55  * Known differences from reference BSD that was tested:
56  *
57  *	[TO FIX]
58  *	ECONNREFUSED is not returned from one end of a connected() socket to the
59  *		other the moment one end closes.
60  *	fstat() doesn't return st_dev=0, and give the blksize as high water mark
61  *		and a fake inode identifier (nor the BSD first socket fstat twice bug).
62  *	[NOT TO FIX]
63  *	accept() returns a path name even if the connecting socket has closed
64  *		in the meantime (BSD loses the path and gives up).
65  *	accept() returns 0 length path for an unbound connector. BSD returns 16
66  *		and a null first byte in the path (but not for gethost/peername - BSD bug ??)
67  *	socketpair(...SOCK_RAW..) doesn't panic the kernel.
68  *	BSD af_unix apparently has connect forgetting to block properly.
69  *		(need to check this with the POSIX spec in detail)
70  *
71  * Differences from 2.0.0-11-... (ANK)
72  *	Bug fixes and improvements.
73  *		- client shutdown killed server socket.
74  *		- removed all useless cli/sti pairs.
75  *
76  *	Semantic changes/extensions.
77  *		- generic control message passing.
78  *		- SCM_CREDENTIALS control message.
79  *		- "Abstract" (not FS based) socket bindings.
80  *		  Abstract names are sequences of bytes (not zero terminated)
81  *		  started by 0, so that this name space does not intersect
82  *		  with BSD names.
83  */
84 
85 #include <linux/module.h>
86 #include <linux/kernel.h>
87 #include <linux/signal.h>
88 #include <linux/sched.h>
89 #include <linux/errno.h>
90 #include <linux/string.h>
91 #include <linux/stat.h>
92 #include <linux/dcache.h>
93 #include <linux/namei.h>
94 #include <linux/socket.h>
95 #include <linux/un.h>
96 #include <linux/fcntl.h>
97 #include <linux/termios.h>
98 #include <linux/sockios.h>
99 #include <linux/net.h>
100 #include <linux/in.h>
101 #include <linux/fs.h>
102 #include <linux/slab.h>
103 #include <asm/uaccess.h>
104 #include <linux/skbuff.h>
105 #include <linux/netdevice.h>
106 #include <net/sock.h>
107 #include <net/tcp_states.h>
108 #include <net/af_unix.h>
109 #include <linux/proc_fs.h>
110 #include <linux/seq_file.h>
111 #include <net/scm.h>
112 #include <linux/init.h>
113 #include <linux/poll.h>
114 #include <linux/rtnetlink.h>
115 #include <linux/mount.h>
116 #include <net/checksum.h>
117 #include <linux/security.h>
118 
119 int sysctl_unix_max_dgram_qlen __read_mostly = 10;
120 
121 struct hlist_head unix_socket_table[UNIX_HASH_SIZE + 1];
122 DEFINE_SPINLOCK(unix_table_lock);
123 static atomic_t unix_nr_socks = ATOMIC_INIT(0);
124 
125 #define unix_sockets_unbound	(&unix_socket_table[UNIX_HASH_SIZE])
126 
127 #define UNIX_ABSTRACT(sk)	(unix_sk(sk)->addr->hash != UNIX_HASH_SIZE)
128 
129 #ifdef CONFIG_SECURITY_NETWORK
130 static void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb)
131 {
132 	memcpy(UNIXSID(skb), &scm->secid, sizeof(u32));
133 }
134 
135 static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb)
136 {
137 	scm->secid = *UNIXSID(skb);
138 }
139 #else
140 static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb)
141 { }
142 
143 static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb)
144 { }
145 #endif /* CONFIG_SECURITY_NETWORK */
146 
147 /*
148  *  SMP locking strategy:
149  *    hash table is protected with spinlock unix_table_lock
150  *    each socket state is protected by separate rwlock.
151  */
152 
153 static inline unsigned unix_hash_fold(__wsum n)
154 {
155 	unsigned hash = (__force unsigned)n;
156 	hash ^= hash>>16;
157 	hash ^= hash>>8;
158 	return hash&(UNIX_HASH_SIZE-1);
159 }
160 
161 #define unix_peer(sk) (unix_sk(sk)->peer)
162 
163 static inline int unix_our_peer(struct sock *sk, struct sock *osk)
164 {
165 	return unix_peer(osk) == sk;
166 }
167 
168 static inline int unix_may_send(struct sock *sk, struct sock *osk)
169 {
170 	return (unix_peer(osk) == NULL || unix_our_peer(sk, osk));
171 }
172 
173 static struct sock *unix_peer_get(struct sock *s)
174 {
175 	struct sock *peer;
176 
177 	unix_state_lock(s);
178 	peer = unix_peer(s);
179 	if (peer)
180 		sock_hold(peer);
181 	unix_state_unlock(s);
182 	return peer;
183 }
184 
185 static inline void unix_release_addr(struct unix_address *addr)
186 {
187 	if (atomic_dec_and_test(&addr->refcnt))
188 		kfree(addr);
189 }
190 
191 /*
192  *	Check unix socket name:
193  *		- should be not zero length.
194  *	        - if started by not zero, should be NULL terminated (FS object)
195  *		- if started by zero, it is abstract name.
196  */
197 
198 static int unix_mkname(struct sockaddr_un * sunaddr, int len, unsigned *hashp)
199 {
200 	if (len <= sizeof(short) || len > sizeof(*sunaddr))
201 		return -EINVAL;
202 	if (!sunaddr || sunaddr->sun_family != AF_UNIX)
203 		return -EINVAL;
204 	if (sunaddr->sun_path[0]) {
205 		/*
206 		 * This may look like an off by one error but it is a bit more
207 		 * subtle. 108 is the longest valid AF_UNIX path for a binding.
208 		 * sun_path[108] doesnt as such exist.  However in kernel space
209 		 * we are guaranteed that it is a valid memory location in our
210 		 * kernel address buffer.
211 		 */
212 		((char *)sunaddr)[len]=0;
213 		len = strlen(sunaddr->sun_path)+1+sizeof(short);
214 		return len;
215 	}
216 
217 	*hashp = unix_hash_fold(csum_partial((char*)sunaddr, len, 0));
218 	return len;
219 }
220 
221 static void __unix_remove_socket(struct sock *sk)
222 {
223 	sk_del_node_init(sk);
224 }
225 
226 static void __unix_insert_socket(struct hlist_head *list, struct sock *sk)
227 {
228 	BUG_TRAP(sk_unhashed(sk));
229 	sk_add_node(sk, list);
230 }
231 
232 static inline void unix_remove_socket(struct sock *sk)
233 {
234 	spin_lock(&unix_table_lock);
235 	__unix_remove_socket(sk);
236 	spin_unlock(&unix_table_lock);
237 }
238 
239 static inline void unix_insert_socket(struct hlist_head *list, struct sock *sk)
240 {
241 	spin_lock(&unix_table_lock);
242 	__unix_insert_socket(list, sk);
243 	spin_unlock(&unix_table_lock);
244 }
245 
246 static struct sock *__unix_find_socket_byname(struct sockaddr_un *sunname,
247 					      int len, int type, unsigned hash)
248 {
249 	struct sock *s;
250 	struct hlist_node *node;
251 
252 	sk_for_each(s, node, &unix_socket_table[hash ^ type]) {
253 		struct unix_sock *u = unix_sk(s);
254 
255 		if (u->addr->len == len &&
256 		    !memcmp(u->addr->name, sunname, len))
257 			goto found;
258 	}
259 	s = NULL;
260 found:
261 	return s;
262 }
263 
264 static inline struct sock *unix_find_socket_byname(struct sockaddr_un *sunname,
265 						   int len, int type,
266 						   unsigned hash)
267 {
268 	struct sock *s;
269 
270 	spin_lock(&unix_table_lock);
271 	s = __unix_find_socket_byname(sunname, len, type, hash);
272 	if (s)
273 		sock_hold(s);
274 	spin_unlock(&unix_table_lock);
275 	return s;
276 }
277 
278 static struct sock *unix_find_socket_byinode(struct inode *i)
279 {
280 	struct sock *s;
281 	struct hlist_node *node;
282 
283 	spin_lock(&unix_table_lock);
284 	sk_for_each(s, node,
285 		    &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) {
286 		struct dentry *dentry = unix_sk(s)->dentry;
287 
288 		if(dentry && dentry->d_inode == i)
289 		{
290 			sock_hold(s);
291 			goto found;
292 		}
293 	}
294 	s = NULL;
295 found:
296 	spin_unlock(&unix_table_lock);
297 	return s;
298 }
299 
300 static inline int unix_writable(struct sock *sk)
301 {
302 	return (atomic_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf;
303 }
304 
305 static void unix_write_space(struct sock *sk)
306 {
307 	read_lock(&sk->sk_callback_lock);
308 	if (unix_writable(sk)) {
309 		if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
310 			wake_up_interruptible(sk->sk_sleep);
311 		sk_wake_async(sk, 2, POLL_OUT);
312 	}
313 	read_unlock(&sk->sk_callback_lock);
314 }
315 
316 /* When dgram socket disconnects (or changes its peer), we clear its receive
317  * queue of packets arrived from previous peer. First, it allows to do
318  * flow control based only on wmem_alloc; second, sk connected to peer
319  * may receive messages only from that peer. */
320 static void unix_dgram_disconnected(struct sock *sk, struct sock *other)
321 {
322 	if (!skb_queue_empty(&sk->sk_receive_queue)) {
323 		skb_queue_purge(&sk->sk_receive_queue);
324 		wake_up_interruptible_all(&unix_sk(sk)->peer_wait);
325 
326 		/* If one link of bidirectional dgram pipe is disconnected,
327 		 * we signal error. Messages are lost. Do not make this,
328 		 * when peer was not connected to us.
329 		 */
330 		if (!sock_flag(other, SOCK_DEAD) && unix_peer(other) == sk) {
331 			other->sk_err = ECONNRESET;
332 			other->sk_error_report(other);
333 		}
334 	}
335 }
336 
337 static void unix_sock_destructor(struct sock *sk)
338 {
339 	struct unix_sock *u = unix_sk(sk);
340 
341 	skb_queue_purge(&sk->sk_receive_queue);
342 
343 	BUG_TRAP(!atomic_read(&sk->sk_wmem_alloc));
344 	BUG_TRAP(sk_unhashed(sk));
345 	BUG_TRAP(!sk->sk_socket);
346 	if (!sock_flag(sk, SOCK_DEAD)) {
347 		printk("Attempt to release alive unix socket: %p\n", sk);
348 		return;
349 	}
350 
351 	if (u->addr)
352 		unix_release_addr(u->addr);
353 
354 	atomic_dec(&unix_nr_socks);
355 #ifdef UNIX_REFCNT_DEBUG
356 	printk(KERN_DEBUG "UNIX %p is destroyed, %d are still alive.\n", sk, atomic_read(&unix_nr_socks));
357 #endif
358 }
359 
360 static int unix_release_sock (struct sock *sk, int embrion)
361 {
362 	struct unix_sock *u = unix_sk(sk);
363 	struct dentry *dentry;
364 	struct vfsmount *mnt;
365 	struct sock *skpair;
366 	struct sk_buff *skb;
367 	int state;
368 
369 	unix_remove_socket(sk);
370 
371 	/* Clear state */
372 	unix_state_lock(sk);
373 	sock_orphan(sk);
374 	sk->sk_shutdown = SHUTDOWN_MASK;
375 	dentry	     = u->dentry;
376 	u->dentry    = NULL;
377 	mnt	     = u->mnt;
378 	u->mnt	     = NULL;
379 	state = sk->sk_state;
380 	sk->sk_state = TCP_CLOSE;
381 	unix_state_unlock(sk);
382 
383 	wake_up_interruptible_all(&u->peer_wait);
384 
385 	skpair=unix_peer(sk);
386 
387 	if (skpair!=NULL) {
388 		if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) {
389 			unix_state_lock(skpair);
390 			/* No more writes */
391 			skpair->sk_shutdown = SHUTDOWN_MASK;
392 			if (!skb_queue_empty(&sk->sk_receive_queue) || embrion)
393 				skpair->sk_err = ECONNRESET;
394 			unix_state_unlock(skpair);
395 			skpair->sk_state_change(skpair);
396 			read_lock(&skpair->sk_callback_lock);
397 			sk_wake_async(skpair,1,POLL_HUP);
398 			read_unlock(&skpair->sk_callback_lock);
399 		}
400 		sock_put(skpair); /* It may now die */
401 		unix_peer(sk) = NULL;
402 	}
403 
404 	/* Try to flush out this socket. Throw out buffers at least */
405 
406 	while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
407 		if (state==TCP_LISTEN)
408 			unix_release_sock(skb->sk, 1);
409 		/* passed fds are erased in the kfree_skb hook	      */
410 		kfree_skb(skb);
411 	}
412 
413 	if (dentry) {
414 		dput(dentry);
415 		mntput(mnt);
416 	}
417 
418 	sock_put(sk);
419 
420 	/* ---- Socket is dead now and most probably destroyed ---- */
421 
422 	/*
423 	 * Fixme: BSD difference: In BSD all sockets connected to use get
424 	 *	  ECONNRESET and we die on the spot. In Linux we behave
425 	 *	  like files and pipes do and wait for the last
426 	 *	  dereference.
427 	 *
428 	 * Can't we simply set sock->err?
429 	 *
430 	 *	  What the above comment does talk about? --ANK(980817)
431 	 */
432 
433 	if (atomic_read(&unix_tot_inflight))
434 		unix_gc();		/* Garbage collect fds */
435 
436 	return 0;
437 }
438 
439 static int unix_listen(struct socket *sock, int backlog)
440 {
441 	int err;
442 	struct sock *sk = sock->sk;
443 	struct unix_sock *u = unix_sk(sk);
444 
445 	err = -EOPNOTSUPP;
446 	if (sock->type!=SOCK_STREAM && sock->type!=SOCK_SEQPACKET)
447 		goto out;			/* Only stream/seqpacket sockets accept */
448 	err = -EINVAL;
449 	if (!u->addr)
450 		goto out;			/* No listens on an unbound socket */
451 	unix_state_lock(sk);
452 	if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN)
453 		goto out_unlock;
454 	if (backlog > sk->sk_max_ack_backlog)
455 		wake_up_interruptible_all(&u->peer_wait);
456 	sk->sk_max_ack_backlog	= backlog;
457 	sk->sk_state		= TCP_LISTEN;
458 	/* set credentials so connect can copy them */
459 	sk->sk_peercred.pid	= current->tgid;
460 	sk->sk_peercred.uid	= current->euid;
461 	sk->sk_peercred.gid	= current->egid;
462 	err = 0;
463 
464 out_unlock:
465 	unix_state_unlock(sk);
466 out:
467 	return err;
468 }
469 
470 static int unix_release(struct socket *);
471 static int unix_bind(struct socket *, struct sockaddr *, int);
472 static int unix_stream_connect(struct socket *, struct sockaddr *,
473 			       int addr_len, int flags);
474 static int unix_socketpair(struct socket *, struct socket *);
475 static int unix_accept(struct socket *, struct socket *, int);
476 static int unix_getname(struct socket *, struct sockaddr *, int *, int);
477 static unsigned int unix_poll(struct file *, struct socket *, poll_table *);
478 static int unix_ioctl(struct socket *, unsigned int, unsigned long);
479 static int unix_shutdown(struct socket *, int);
480 static int unix_stream_sendmsg(struct kiocb *, struct socket *,
481 			       struct msghdr *, size_t);
482 static int unix_stream_recvmsg(struct kiocb *, struct socket *,
483 			       struct msghdr *, size_t, int);
484 static int unix_dgram_sendmsg(struct kiocb *, struct socket *,
485 			      struct msghdr *, size_t);
486 static int unix_dgram_recvmsg(struct kiocb *, struct socket *,
487 			      struct msghdr *, size_t, int);
488 static int unix_dgram_connect(struct socket *, struct sockaddr *,
489 			      int, int);
490 static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *,
491 				  struct msghdr *, size_t);
492 
493 static const struct proto_ops unix_stream_ops = {
494 	.family =	PF_UNIX,
495 	.owner =	THIS_MODULE,
496 	.release =	unix_release,
497 	.bind =		unix_bind,
498 	.connect =	unix_stream_connect,
499 	.socketpair =	unix_socketpair,
500 	.accept =	unix_accept,
501 	.getname =	unix_getname,
502 	.poll =		unix_poll,
503 	.ioctl =	unix_ioctl,
504 	.listen =	unix_listen,
505 	.shutdown =	unix_shutdown,
506 	.setsockopt =	sock_no_setsockopt,
507 	.getsockopt =	sock_no_getsockopt,
508 	.sendmsg =	unix_stream_sendmsg,
509 	.recvmsg =	unix_stream_recvmsg,
510 	.mmap =		sock_no_mmap,
511 	.sendpage =	sock_no_sendpage,
512 };
513 
514 static const struct proto_ops unix_dgram_ops = {
515 	.family =	PF_UNIX,
516 	.owner =	THIS_MODULE,
517 	.release =	unix_release,
518 	.bind =		unix_bind,
519 	.connect =	unix_dgram_connect,
520 	.socketpair =	unix_socketpair,
521 	.accept =	sock_no_accept,
522 	.getname =	unix_getname,
523 	.poll =		datagram_poll,
524 	.ioctl =	unix_ioctl,
525 	.listen =	sock_no_listen,
526 	.shutdown =	unix_shutdown,
527 	.setsockopt =	sock_no_setsockopt,
528 	.getsockopt =	sock_no_getsockopt,
529 	.sendmsg =	unix_dgram_sendmsg,
530 	.recvmsg =	unix_dgram_recvmsg,
531 	.mmap =		sock_no_mmap,
532 	.sendpage =	sock_no_sendpage,
533 };
534 
535 static const struct proto_ops unix_seqpacket_ops = {
536 	.family =	PF_UNIX,
537 	.owner =	THIS_MODULE,
538 	.release =	unix_release,
539 	.bind =		unix_bind,
540 	.connect =	unix_stream_connect,
541 	.socketpair =	unix_socketpair,
542 	.accept =	unix_accept,
543 	.getname =	unix_getname,
544 	.poll =		datagram_poll,
545 	.ioctl =	unix_ioctl,
546 	.listen =	unix_listen,
547 	.shutdown =	unix_shutdown,
548 	.setsockopt =	sock_no_setsockopt,
549 	.getsockopt =	sock_no_getsockopt,
550 	.sendmsg =	unix_seqpacket_sendmsg,
551 	.recvmsg =	unix_dgram_recvmsg,
552 	.mmap =		sock_no_mmap,
553 	.sendpage =	sock_no_sendpage,
554 };
555 
556 static struct proto unix_proto = {
557 	.name	  = "UNIX",
558 	.owner	  = THIS_MODULE,
559 	.obj_size = sizeof(struct unix_sock),
560 };
561 
562 /*
563  * AF_UNIX sockets do not interact with hardware, hence they
564  * dont trigger interrupts - so it's safe for them to have
565  * bh-unsafe locking for their sk_receive_queue.lock. Split off
566  * this special lock-class by reinitializing the spinlock key:
567  */
568 static struct lock_class_key af_unix_sk_receive_queue_lock_key;
569 
570 static struct sock * unix_create1(struct socket *sock)
571 {
572 	struct sock *sk = NULL;
573 	struct unix_sock *u;
574 
575 	if (atomic_read(&unix_nr_socks) >= 2*get_max_files())
576 		goto out;
577 
578 	sk = sk_alloc(PF_UNIX, GFP_KERNEL, &unix_proto, 1);
579 	if (!sk)
580 		goto out;
581 
582 	atomic_inc(&unix_nr_socks);
583 
584 	sock_init_data(sock,sk);
585 	lockdep_set_class(&sk->sk_receive_queue.lock,
586 				&af_unix_sk_receive_queue_lock_key);
587 
588 	sk->sk_write_space	= unix_write_space;
589 	sk->sk_max_ack_backlog	= sysctl_unix_max_dgram_qlen;
590 	sk->sk_destruct		= unix_sock_destructor;
591 	u	  = unix_sk(sk);
592 	u->dentry = NULL;
593 	u->mnt	  = NULL;
594 	spin_lock_init(&u->lock);
595 	atomic_set(&u->inflight, 0);
596 	INIT_LIST_HEAD(&u->link);
597 	mutex_init(&u->readlock); /* single task reading lock */
598 	init_waitqueue_head(&u->peer_wait);
599 	unix_insert_socket(unix_sockets_unbound, sk);
600 out:
601 	return sk;
602 }
603 
604 static int unix_create(struct socket *sock, int protocol)
605 {
606 	if (protocol && protocol != PF_UNIX)
607 		return -EPROTONOSUPPORT;
608 
609 	sock->state = SS_UNCONNECTED;
610 
611 	switch (sock->type) {
612 	case SOCK_STREAM:
613 		sock->ops = &unix_stream_ops;
614 		break;
615 		/*
616 		 *	Believe it or not BSD has AF_UNIX, SOCK_RAW though
617 		 *	nothing uses it.
618 		 */
619 	case SOCK_RAW:
620 		sock->type=SOCK_DGRAM;
621 	case SOCK_DGRAM:
622 		sock->ops = &unix_dgram_ops;
623 		break;
624 	case SOCK_SEQPACKET:
625 		sock->ops = &unix_seqpacket_ops;
626 		break;
627 	default:
628 		return -ESOCKTNOSUPPORT;
629 	}
630 
631 	return unix_create1(sock) ? 0 : -ENOMEM;
632 }
633 
634 static int unix_release(struct socket *sock)
635 {
636 	struct sock *sk = sock->sk;
637 
638 	if (!sk)
639 		return 0;
640 
641 	sock->sk = NULL;
642 
643 	return unix_release_sock (sk, 0);
644 }
645 
646 static int unix_autobind(struct socket *sock)
647 {
648 	struct sock *sk = sock->sk;
649 	struct unix_sock *u = unix_sk(sk);
650 	static u32 ordernum = 1;
651 	struct unix_address * addr;
652 	int err;
653 
654 	mutex_lock(&u->readlock);
655 
656 	err = 0;
657 	if (u->addr)
658 		goto out;
659 
660 	err = -ENOMEM;
661 	addr = kzalloc(sizeof(*addr) + sizeof(short) + 16, GFP_KERNEL);
662 	if (!addr)
663 		goto out;
664 
665 	addr->name->sun_family = AF_UNIX;
666 	atomic_set(&addr->refcnt, 1);
667 
668 retry:
669 	addr->len = sprintf(addr->name->sun_path+1, "%05x", ordernum) + 1 + sizeof(short);
670 	addr->hash = unix_hash_fold(csum_partial((void*)addr->name, addr->len, 0));
671 
672 	spin_lock(&unix_table_lock);
673 	ordernum = (ordernum+1)&0xFFFFF;
674 
675 	if (__unix_find_socket_byname(addr->name, addr->len, sock->type,
676 				      addr->hash)) {
677 		spin_unlock(&unix_table_lock);
678 		/* Sanity yield. It is unusual case, but yet... */
679 		if (!(ordernum&0xFF))
680 			yield();
681 		goto retry;
682 	}
683 	addr->hash ^= sk->sk_type;
684 
685 	__unix_remove_socket(sk);
686 	u->addr = addr;
687 	__unix_insert_socket(&unix_socket_table[addr->hash], sk);
688 	spin_unlock(&unix_table_lock);
689 	err = 0;
690 
691 out:	mutex_unlock(&u->readlock);
692 	return err;
693 }
694 
695 static struct sock *unix_find_other(struct sockaddr_un *sunname, int len,
696 				    int type, unsigned hash, int *error)
697 {
698 	struct sock *u;
699 	struct nameidata nd;
700 	int err = 0;
701 
702 	if (sunname->sun_path[0]) {
703 		err = path_lookup(sunname->sun_path, LOOKUP_FOLLOW, &nd);
704 		if (err)
705 			goto fail;
706 		err = vfs_permission(&nd, MAY_WRITE);
707 		if (err)
708 			goto put_fail;
709 
710 		err = -ECONNREFUSED;
711 		if (!S_ISSOCK(nd.dentry->d_inode->i_mode))
712 			goto put_fail;
713 		u=unix_find_socket_byinode(nd.dentry->d_inode);
714 		if (!u)
715 			goto put_fail;
716 
717 		if (u->sk_type == type)
718 			touch_atime(nd.mnt, nd.dentry);
719 
720 		path_release(&nd);
721 
722 		err=-EPROTOTYPE;
723 		if (u->sk_type != type) {
724 			sock_put(u);
725 			goto fail;
726 		}
727 	} else {
728 		err = -ECONNREFUSED;
729 		u=unix_find_socket_byname(sunname, len, type, hash);
730 		if (u) {
731 			struct dentry *dentry;
732 			dentry = unix_sk(u)->dentry;
733 			if (dentry)
734 				touch_atime(unix_sk(u)->mnt, dentry);
735 		} else
736 			goto fail;
737 	}
738 	return u;
739 
740 put_fail:
741 	path_release(&nd);
742 fail:
743 	*error=err;
744 	return NULL;
745 }
746 
747 
748 static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
749 {
750 	struct sock *sk = sock->sk;
751 	struct unix_sock *u = unix_sk(sk);
752 	struct sockaddr_un *sunaddr=(struct sockaddr_un *)uaddr;
753 	struct dentry * dentry = NULL;
754 	struct nameidata nd;
755 	int err;
756 	unsigned hash;
757 	struct unix_address *addr;
758 	struct hlist_head *list;
759 
760 	err = -EINVAL;
761 	if (sunaddr->sun_family != AF_UNIX)
762 		goto out;
763 
764 	if (addr_len==sizeof(short)) {
765 		err = unix_autobind(sock);
766 		goto out;
767 	}
768 
769 	err = unix_mkname(sunaddr, addr_len, &hash);
770 	if (err < 0)
771 		goto out;
772 	addr_len = err;
773 
774 	mutex_lock(&u->readlock);
775 
776 	err = -EINVAL;
777 	if (u->addr)
778 		goto out_up;
779 
780 	err = -ENOMEM;
781 	addr = kmalloc(sizeof(*addr)+addr_len, GFP_KERNEL);
782 	if (!addr)
783 		goto out_up;
784 
785 	memcpy(addr->name, sunaddr, addr_len);
786 	addr->len = addr_len;
787 	addr->hash = hash ^ sk->sk_type;
788 	atomic_set(&addr->refcnt, 1);
789 
790 	if (sunaddr->sun_path[0]) {
791 		unsigned int mode;
792 		err = 0;
793 		/*
794 		 * Get the parent directory, calculate the hash for last
795 		 * component.
796 		 */
797 		err = path_lookup(sunaddr->sun_path, LOOKUP_PARENT, &nd);
798 		if (err)
799 			goto out_mknod_parent;
800 
801 		dentry = lookup_create(&nd, 0);
802 		err = PTR_ERR(dentry);
803 		if (IS_ERR(dentry))
804 			goto out_mknod_unlock;
805 
806 		/*
807 		 * All right, let's create it.
808 		 */
809 		mode = S_IFSOCK |
810 		       (SOCK_INODE(sock)->i_mode & ~current->fs->umask);
811 		err = vfs_mknod(nd.dentry->d_inode, dentry, mode, 0);
812 		if (err)
813 			goto out_mknod_dput;
814 		mutex_unlock(&nd.dentry->d_inode->i_mutex);
815 		dput(nd.dentry);
816 		nd.dentry = dentry;
817 
818 		addr->hash = UNIX_HASH_SIZE;
819 	}
820 
821 	spin_lock(&unix_table_lock);
822 
823 	if (!sunaddr->sun_path[0]) {
824 		err = -EADDRINUSE;
825 		if (__unix_find_socket_byname(sunaddr, addr_len,
826 					      sk->sk_type, hash)) {
827 			unix_release_addr(addr);
828 			goto out_unlock;
829 		}
830 
831 		list = &unix_socket_table[addr->hash];
832 	} else {
833 		list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)];
834 		u->dentry = nd.dentry;
835 		u->mnt    = nd.mnt;
836 	}
837 
838 	err = 0;
839 	__unix_remove_socket(sk);
840 	u->addr = addr;
841 	__unix_insert_socket(list, sk);
842 
843 out_unlock:
844 	spin_unlock(&unix_table_lock);
845 out_up:
846 	mutex_unlock(&u->readlock);
847 out:
848 	return err;
849 
850 out_mknod_dput:
851 	dput(dentry);
852 out_mknod_unlock:
853 	mutex_unlock(&nd.dentry->d_inode->i_mutex);
854 	path_release(&nd);
855 out_mknod_parent:
856 	if (err==-EEXIST)
857 		err=-EADDRINUSE;
858 	unix_release_addr(addr);
859 	goto out_up;
860 }
861 
862 static void unix_state_double_lock(struct sock *sk1, struct sock *sk2)
863 {
864 	if (unlikely(sk1 == sk2) || !sk2) {
865 		unix_state_lock(sk1);
866 		return;
867 	}
868 	if (sk1 < sk2) {
869 		unix_state_lock(sk1);
870 		unix_state_lock_nested(sk2);
871 	} else {
872 		unix_state_lock(sk2);
873 		unix_state_lock_nested(sk1);
874 	}
875 }
876 
877 static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2)
878 {
879 	if (unlikely(sk1 == sk2) || !sk2) {
880 		unix_state_unlock(sk1);
881 		return;
882 	}
883 	unix_state_unlock(sk1);
884 	unix_state_unlock(sk2);
885 }
886 
887 static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr,
888 			      int alen, int flags)
889 {
890 	struct sock *sk = sock->sk;
891 	struct sockaddr_un *sunaddr=(struct sockaddr_un*)addr;
892 	struct sock *other;
893 	unsigned hash;
894 	int err;
895 
896 	if (addr->sa_family != AF_UNSPEC) {
897 		err = unix_mkname(sunaddr, alen, &hash);
898 		if (err < 0)
899 			goto out;
900 		alen = err;
901 
902 		if (test_bit(SOCK_PASSCRED, &sock->flags) &&
903 		    !unix_sk(sk)->addr && (err = unix_autobind(sock)) != 0)
904 			goto out;
905 
906 restart:
907 		other=unix_find_other(sunaddr, alen, sock->type, hash, &err);
908 		if (!other)
909 			goto out;
910 
911 		unix_state_double_lock(sk, other);
912 
913 		/* Apparently VFS overslept socket death. Retry. */
914 		if (sock_flag(other, SOCK_DEAD)) {
915 			unix_state_double_unlock(sk, other);
916 			sock_put(other);
917 			goto restart;
918 		}
919 
920 		err = -EPERM;
921 		if (!unix_may_send(sk, other))
922 			goto out_unlock;
923 
924 		err = security_unix_may_send(sk->sk_socket, other->sk_socket);
925 		if (err)
926 			goto out_unlock;
927 
928 	} else {
929 		/*
930 		 *	1003.1g breaking connected state with AF_UNSPEC
931 		 */
932 		other = NULL;
933 		unix_state_double_lock(sk, other);
934 	}
935 
936 	/*
937 	 * If it was connected, reconnect.
938 	 */
939 	if (unix_peer(sk)) {
940 		struct sock *old_peer = unix_peer(sk);
941 		unix_peer(sk)=other;
942 		unix_state_double_unlock(sk, other);
943 
944 		if (other != old_peer)
945 			unix_dgram_disconnected(sk, old_peer);
946 		sock_put(old_peer);
947 	} else {
948 		unix_peer(sk)=other;
949 		unix_state_double_unlock(sk, other);
950 	}
951 	return 0;
952 
953 out_unlock:
954 	unix_state_double_unlock(sk, other);
955 	sock_put(other);
956 out:
957 	return err;
958 }
959 
960 static long unix_wait_for_peer(struct sock *other, long timeo)
961 {
962 	struct unix_sock *u = unix_sk(other);
963 	int sched;
964 	DEFINE_WAIT(wait);
965 
966 	prepare_to_wait_exclusive(&u->peer_wait, &wait, TASK_INTERRUPTIBLE);
967 
968 	sched = !sock_flag(other, SOCK_DEAD) &&
969 		!(other->sk_shutdown & RCV_SHUTDOWN) &&
970 		(skb_queue_len(&other->sk_receive_queue) >
971 		 other->sk_max_ack_backlog);
972 
973 	unix_state_unlock(other);
974 
975 	if (sched)
976 		timeo = schedule_timeout(timeo);
977 
978 	finish_wait(&u->peer_wait, &wait);
979 	return timeo;
980 }
981 
982 static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr,
983 			       int addr_len, int flags)
984 {
985 	struct sockaddr_un *sunaddr=(struct sockaddr_un *)uaddr;
986 	struct sock *sk = sock->sk;
987 	struct unix_sock *u = unix_sk(sk), *newu, *otheru;
988 	struct sock *newsk = NULL;
989 	struct sock *other = NULL;
990 	struct sk_buff *skb = NULL;
991 	unsigned hash;
992 	int st;
993 	int err;
994 	long timeo;
995 
996 	err = unix_mkname(sunaddr, addr_len, &hash);
997 	if (err < 0)
998 		goto out;
999 	addr_len = err;
1000 
1001 	if (test_bit(SOCK_PASSCRED, &sock->flags)
1002 		&& !u->addr && (err = unix_autobind(sock)) != 0)
1003 		goto out;
1004 
1005 	timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
1006 
1007 	/* First of all allocate resources.
1008 	   If we will make it after state is locked,
1009 	   we will have to recheck all again in any case.
1010 	 */
1011 
1012 	err = -ENOMEM;
1013 
1014 	/* create new sock for complete connection */
1015 	newsk = unix_create1(NULL);
1016 	if (newsk == NULL)
1017 		goto out;
1018 
1019 	/* Allocate skb for sending to listening sock */
1020 	skb = sock_wmalloc(newsk, 1, 0, GFP_KERNEL);
1021 	if (skb == NULL)
1022 		goto out;
1023 
1024 restart:
1025 	/*  Find listening sock. */
1026 	other = unix_find_other(sunaddr, addr_len, sk->sk_type, hash, &err);
1027 	if (!other)
1028 		goto out;
1029 
1030 	/* Latch state of peer */
1031 	unix_state_lock(other);
1032 
1033 	/* Apparently VFS overslept socket death. Retry. */
1034 	if (sock_flag(other, SOCK_DEAD)) {
1035 		unix_state_unlock(other);
1036 		sock_put(other);
1037 		goto restart;
1038 	}
1039 
1040 	err = -ECONNREFUSED;
1041 	if (other->sk_state != TCP_LISTEN)
1042 		goto out_unlock;
1043 
1044 	if (skb_queue_len(&other->sk_receive_queue) >
1045 	    other->sk_max_ack_backlog) {
1046 		err = -EAGAIN;
1047 		if (!timeo)
1048 			goto out_unlock;
1049 
1050 		timeo = unix_wait_for_peer(other, timeo);
1051 
1052 		err = sock_intr_errno(timeo);
1053 		if (signal_pending(current))
1054 			goto out;
1055 		sock_put(other);
1056 		goto restart;
1057 	}
1058 
1059 	/* Latch our state.
1060 
1061 	   It is tricky place. We need to grab write lock and cannot
1062 	   drop lock on peer. It is dangerous because deadlock is
1063 	   possible. Connect to self case and simultaneous
1064 	   attempt to connect are eliminated by checking socket
1065 	   state. other is TCP_LISTEN, if sk is TCP_LISTEN we
1066 	   check this before attempt to grab lock.
1067 
1068 	   Well, and we have to recheck the state after socket locked.
1069 	 */
1070 	st = sk->sk_state;
1071 
1072 	switch (st) {
1073 	case TCP_CLOSE:
1074 		/* This is ok... continue with connect */
1075 		break;
1076 	case TCP_ESTABLISHED:
1077 		/* Socket is already connected */
1078 		err = -EISCONN;
1079 		goto out_unlock;
1080 	default:
1081 		err = -EINVAL;
1082 		goto out_unlock;
1083 	}
1084 
1085 	unix_state_lock_nested(sk);
1086 
1087 	if (sk->sk_state != st) {
1088 		unix_state_unlock(sk);
1089 		unix_state_unlock(other);
1090 		sock_put(other);
1091 		goto restart;
1092 	}
1093 
1094 	err = security_unix_stream_connect(sock, other->sk_socket, newsk);
1095 	if (err) {
1096 		unix_state_unlock(sk);
1097 		goto out_unlock;
1098 	}
1099 
1100 	/* The way is open! Fastly set all the necessary fields... */
1101 
1102 	sock_hold(sk);
1103 	unix_peer(newsk)	= sk;
1104 	newsk->sk_state		= TCP_ESTABLISHED;
1105 	newsk->sk_type		= sk->sk_type;
1106 	newsk->sk_peercred.pid	= current->tgid;
1107 	newsk->sk_peercred.uid	= current->euid;
1108 	newsk->sk_peercred.gid	= current->egid;
1109 	newu = unix_sk(newsk);
1110 	newsk->sk_sleep		= &newu->peer_wait;
1111 	otheru = unix_sk(other);
1112 
1113 	/* copy address information from listening to new sock*/
1114 	if (otheru->addr) {
1115 		atomic_inc(&otheru->addr->refcnt);
1116 		newu->addr = otheru->addr;
1117 	}
1118 	if (otheru->dentry) {
1119 		newu->dentry	= dget(otheru->dentry);
1120 		newu->mnt	= mntget(otheru->mnt);
1121 	}
1122 
1123 	/* Set credentials */
1124 	sk->sk_peercred = other->sk_peercred;
1125 
1126 	sock->state	= SS_CONNECTED;
1127 	sk->sk_state	= TCP_ESTABLISHED;
1128 	sock_hold(newsk);
1129 
1130 	smp_mb__after_atomic_inc();	/* sock_hold() does an atomic_inc() */
1131 	unix_peer(sk)	= newsk;
1132 
1133 	unix_state_unlock(sk);
1134 
1135 	/* take ten and and send info to listening sock */
1136 	spin_lock(&other->sk_receive_queue.lock);
1137 	__skb_queue_tail(&other->sk_receive_queue, skb);
1138 	spin_unlock(&other->sk_receive_queue.lock);
1139 	unix_state_unlock(other);
1140 	other->sk_data_ready(other, 0);
1141 	sock_put(other);
1142 	return 0;
1143 
1144 out_unlock:
1145 	if (other)
1146 		unix_state_unlock(other);
1147 
1148 out:
1149 	if (skb)
1150 		kfree_skb(skb);
1151 	if (newsk)
1152 		unix_release_sock(newsk, 0);
1153 	if (other)
1154 		sock_put(other);
1155 	return err;
1156 }
1157 
1158 static int unix_socketpair(struct socket *socka, struct socket *sockb)
1159 {
1160 	struct sock *ska=socka->sk, *skb = sockb->sk;
1161 
1162 	/* Join our sockets back to back */
1163 	sock_hold(ska);
1164 	sock_hold(skb);
1165 	unix_peer(ska)=skb;
1166 	unix_peer(skb)=ska;
1167 	ska->sk_peercred.pid = skb->sk_peercred.pid = current->tgid;
1168 	ska->sk_peercred.uid = skb->sk_peercred.uid = current->euid;
1169 	ska->sk_peercred.gid = skb->sk_peercred.gid = current->egid;
1170 
1171 	if (ska->sk_type != SOCK_DGRAM) {
1172 		ska->sk_state = TCP_ESTABLISHED;
1173 		skb->sk_state = TCP_ESTABLISHED;
1174 		socka->state  = SS_CONNECTED;
1175 		sockb->state  = SS_CONNECTED;
1176 	}
1177 	return 0;
1178 }
1179 
1180 static int unix_accept(struct socket *sock, struct socket *newsock, int flags)
1181 {
1182 	struct sock *sk = sock->sk;
1183 	struct sock *tsk;
1184 	struct sk_buff *skb;
1185 	int err;
1186 
1187 	err = -EOPNOTSUPP;
1188 	if (sock->type!=SOCK_STREAM && sock->type!=SOCK_SEQPACKET)
1189 		goto out;
1190 
1191 	err = -EINVAL;
1192 	if (sk->sk_state != TCP_LISTEN)
1193 		goto out;
1194 
1195 	/* If socket state is TCP_LISTEN it cannot change (for now...),
1196 	 * so that no locks are necessary.
1197 	 */
1198 
1199 	skb = skb_recv_datagram(sk, 0, flags&O_NONBLOCK, &err);
1200 	if (!skb) {
1201 		/* This means receive shutdown. */
1202 		if (err == 0)
1203 			err = -EINVAL;
1204 		goto out;
1205 	}
1206 
1207 	tsk = skb->sk;
1208 	skb_free_datagram(sk, skb);
1209 	wake_up_interruptible(&unix_sk(sk)->peer_wait);
1210 
1211 	/* attach accepted sock to socket */
1212 	unix_state_lock(tsk);
1213 	newsock->state = SS_CONNECTED;
1214 	sock_graft(tsk, newsock);
1215 	unix_state_unlock(tsk);
1216 	return 0;
1217 
1218 out:
1219 	return err;
1220 }
1221 
1222 
1223 static int unix_getname(struct socket *sock, struct sockaddr *uaddr, int *uaddr_len, int peer)
1224 {
1225 	struct sock *sk = sock->sk;
1226 	struct unix_sock *u;
1227 	struct sockaddr_un *sunaddr=(struct sockaddr_un *)uaddr;
1228 	int err = 0;
1229 
1230 	if (peer) {
1231 		sk = unix_peer_get(sk);
1232 
1233 		err = -ENOTCONN;
1234 		if (!sk)
1235 			goto out;
1236 		err = 0;
1237 	} else {
1238 		sock_hold(sk);
1239 	}
1240 
1241 	u = unix_sk(sk);
1242 	unix_state_lock(sk);
1243 	if (!u->addr) {
1244 		sunaddr->sun_family = AF_UNIX;
1245 		sunaddr->sun_path[0] = 0;
1246 		*uaddr_len = sizeof(short);
1247 	} else {
1248 		struct unix_address *addr = u->addr;
1249 
1250 		*uaddr_len = addr->len;
1251 		memcpy(sunaddr, addr->name, *uaddr_len);
1252 	}
1253 	unix_state_unlock(sk);
1254 	sock_put(sk);
1255 out:
1256 	return err;
1257 }
1258 
1259 static void unix_detach_fds(struct scm_cookie *scm, struct sk_buff *skb)
1260 {
1261 	int i;
1262 
1263 	scm->fp = UNIXCB(skb).fp;
1264 	skb->destructor = sock_wfree;
1265 	UNIXCB(skb).fp = NULL;
1266 
1267 	for (i=scm->fp->count-1; i>=0; i--)
1268 		unix_notinflight(scm->fp->fp[i]);
1269 }
1270 
1271 static void unix_destruct_fds(struct sk_buff *skb)
1272 {
1273 	struct scm_cookie scm;
1274 	memset(&scm, 0, sizeof(scm));
1275 	unix_detach_fds(&scm, skb);
1276 
1277 	/* Alas, it calls VFS */
1278 	/* So fscking what? fput() had been SMP-safe since the last Summer */
1279 	scm_destroy(&scm);
1280 	sock_wfree(skb);
1281 }
1282 
1283 static void unix_attach_fds(struct scm_cookie *scm, struct sk_buff *skb)
1284 {
1285 	int i;
1286 	for (i=scm->fp->count-1; i>=0; i--)
1287 		unix_inflight(scm->fp->fp[i]);
1288 	UNIXCB(skb).fp = scm->fp;
1289 	skb->destructor = unix_destruct_fds;
1290 	scm->fp = NULL;
1291 }
1292 
1293 /*
1294  *	Send AF_UNIX data.
1295  */
1296 
1297 static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock,
1298 			      struct msghdr *msg, size_t len)
1299 {
1300 	struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
1301 	struct sock *sk = sock->sk;
1302 	struct unix_sock *u = unix_sk(sk);
1303 	struct sockaddr_un *sunaddr=msg->msg_name;
1304 	struct sock *other = NULL;
1305 	int namelen = 0; /* fake GCC */
1306 	int err;
1307 	unsigned hash;
1308 	struct sk_buff *skb;
1309 	long timeo;
1310 	struct scm_cookie tmp_scm;
1311 
1312 	if (NULL == siocb->scm)
1313 		siocb->scm = &tmp_scm;
1314 	err = scm_send(sock, msg, siocb->scm);
1315 	if (err < 0)
1316 		return err;
1317 
1318 	err = -EOPNOTSUPP;
1319 	if (msg->msg_flags&MSG_OOB)
1320 		goto out;
1321 
1322 	if (msg->msg_namelen) {
1323 		err = unix_mkname(sunaddr, msg->msg_namelen, &hash);
1324 		if (err < 0)
1325 			goto out;
1326 		namelen = err;
1327 	} else {
1328 		sunaddr = NULL;
1329 		err = -ENOTCONN;
1330 		other = unix_peer_get(sk);
1331 		if (!other)
1332 			goto out;
1333 	}
1334 
1335 	if (test_bit(SOCK_PASSCRED, &sock->flags)
1336 		&& !u->addr && (err = unix_autobind(sock)) != 0)
1337 		goto out;
1338 
1339 	err = -EMSGSIZE;
1340 	if (len > sk->sk_sndbuf - 32)
1341 		goto out;
1342 
1343 	skb = sock_alloc_send_skb(sk, len, msg->msg_flags&MSG_DONTWAIT, &err);
1344 	if (skb==NULL)
1345 		goto out;
1346 
1347 	memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred));
1348 	if (siocb->scm->fp)
1349 		unix_attach_fds(siocb->scm, skb);
1350 	unix_get_secdata(siocb->scm, skb);
1351 
1352 	skb_reset_transport_header(skb);
1353 	err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);
1354 	if (err)
1355 		goto out_free;
1356 
1357 	timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
1358 
1359 restart:
1360 	if (!other) {
1361 		err = -ECONNRESET;
1362 		if (sunaddr == NULL)
1363 			goto out_free;
1364 
1365 		other = unix_find_other(sunaddr, namelen, sk->sk_type,
1366 					hash, &err);
1367 		if (other==NULL)
1368 			goto out_free;
1369 	}
1370 
1371 	unix_state_lock(other);
1372 	err = -EPERM;
1373 	if (!unix_may_send(sk, other))
1374 		goto out_unlock;
1375 
1376 	if (sock_flag(other, SOCK_DEAD)) {
1377 		/*
1378 		 *	Check with 1003.1g - what should
1379 		 *	datagram error
1380 		 */
1381 		unix_state_unlock(other);
1382 		sock_put(other);
1383 
1384 		err = 0;
1385 		unix_state_lock(sk);
1386 		if (unix_peer(sk) == other) {
1387 			unix_peer(sk)=NULL;
1388 			unix_state_unlock(sk);
1389 
1390 			unix_dgram_disconnected(sk, other);
1391 			sock_put(other);
1392 			err = -ECONNREFUSED;
1393 		} else {
1394 			unix_state_unlock(sk);
1395 		}
1396 
1397 		other = NULL;
1398 		if (err)
1399 			goto out_free;
1400 		goto restart;
1401 	}
1402 
1403 	err = -EPIPE;
1404 	if (other->sk_shutdown & RCV_SHUTDOWN)
1405 		goto out_unlock;
1406 
1407 	if (sk->sk_type != SOCK_SEQPACKET) {
1408 		err = security_unix_may_send(sk->sk_socket, other->sk_socket);
1409 		if (err)
1410 			goto out_unlock;
1411 	}
1412 
1413 	if (unix_peer(other) != sk &&
1414 	    (skb_queue_len(&other->sk_receive_queue) >
1415 	     other->sk_max_ack_backlog)) {
1416 		if (!timeo) {
1417 			err = -EAGAIN;
1418 			goto out_unlock;
1419 		}
1420 
1421 		timeo = unix_wait_for_peer(other, timeo);
1422 
1423 		err = sock_intr_errno(timeo);
1424 		if (signal_pending(current))
1425 			goto out_free;
1426 
1427 		goto restart;
1428 	}
1429 
1430 	skb_queue_tail(&other->sk_receive_queue, skb);
1431 	unix_state_unlock(other);
1432 	other->sk_data_ready(other, len);
1433 	sock_put(other);
1434 	scm_destroy(siocb->scm);
1435 	return len;
1436 
1437 out_unlock:
1438 	unix_state_unlock(other);
1439 out_free:
1440 	kfree_skb(skb);
1441 out:
1442 	if (other)
1443 		sock_put(other);
1444 	scm_destroy(siocb->scm);
1445 	return err;
1446 }
1447 
1448 
1449 static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock,
1450 			       struct msghdr *msg, size_t len)
1451 {
1452 	struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
1453 	struct sock *sk = sock->sk;
1454 	struct sock *other = NULL;
1455 	struct sockaddr_un *sunaddr=msg->msg_name;
1456 	int err,size;
1457 	struct sk_buff *skb;
1458 	int sent=0;
1459 	struct scm_cookie tmp_scm;
1460 
1461 	if (NULL == siocb->scm)
1462 		siocb->scm = &tmp_scm;
1463 	err = scm_send(sock, msg, siocb->scm);
1464 	if (err < 0)
1465 		return err;
1466 
1467 	err = -EOPNOTSUPP;
1468 	if (msg->msg_flags&MSG_OOB)
1469 		goto out_err;
1470 
1471 	if (msg->msg_namelen) {
1472 		err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP;
1473 		goto out_err;
1474 	} else {
1475 		sunaddr = NULL;
1476 		err = -ENOTCONN;
1477 		other = unix_peer(sk);
1478 		if (!other)
1479 			goto out_err;
1480 	}
1481 
1482 	if (sk->sk_shutdown & SEND_SHUTDOWN)
1483 		goto pipe_err;
1484 
1485 	while(sent < len)
1486 	{
1487 		/*
1488 		 *	Optimisation for the fact that under 0.01% of X
1489 		 *	messages typically need breaking up.
1490 		 */
1491 
1492 		size = len-sent;
1493 
1494 		/* Keep two messages in the pipe so it schedules better */
1495 		if (size > ((sk->sk_sndbuf >> 1) - 64))
1496 			size = (sk->sk_sndbuf >> 1) - 64;
1497 
1498 		if (size > SKB_MAX_ALLOC)
1499 			size = SKB_MAX_ALLOC;
1500 
1501 		/*
1502 		 *	Grab a buffer
1503 		 */
1504 
1505 		skb=sock_alloc_send_skb(sk,size,msg->msg_flags&MSG_DONTWAIT, &err);
1506 
1507 		if (skb==NULL)
1508 			goto out_err;
1509 
1510 		/*
1511 		 *	If you pass two values to the sock_alloc_send_skb
1512 		 *	it tries to grab the large buffer with GFP_NOFS
1513 		 *	(which can fail easily), and if it fails grab the
1514 		 *	fallback size buffer which is under a page and will
1515 		 *	succeed. [Alan]
1516 		 */
1517 		size = min_t(int, size, skb_tailroom(skb));
1518 
1519 		memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred));
1520 		if (siocb->scm->fp)
1521 			unix_attach_fds(siocb->scm, skb);
1522 
1523 		if ((err = memcpy_fromiovec(skb_put(skb,size), msg->msg_iov, size)) != 0) {
1524 			kfree_skb(skb);
1525 			goto out_err;
1526 		}
1527 
1528 		unix_state_lock(other);
1529 
1530 		if (sock_flag(other, SOCK_DEAD) ||
1531 		    (other->sk_shutdown & RCV_SHUTDOWN))
1532 			goto pipe_err_free;
1533 
1534 		skb_queue_tail(&other->sk_receive_queue, skb);
1535 		unix_state_unlock(other);
1536 		other->sk_data_ready(other, size);
1537 		sent+=size;
1538 	}
1539 
1540 	scm_destroy(siocb->scm);
1541 	siocb->scm = NULL;
1542 
1543 	return sent;
1544 
1545 pipe_err_free:
1546 	unix_state_unlock(other);
1547 	kfree_skb(skb);
1548 pipe_err:
1549 	if (sent==0 && !(msg->msg_flags&MSG_NOSIGNAL))
1550 		send_sig(SIGPIPE,current,0);
1551 	err = -EPIPE;
1552 out_err:
1553 	scm_destroy(siocb->scm);
1554 	siocb->scm = NULL;
1555 	return sent ? : err;
1556 }
1557 
1558 static int unix_seqpacket_sendmsg(struct kiocb *kiocb, struct socket *sock,
1559 				  struct msghdr *msg, size_t len)
1560 {
1561 	int err;
1562 	struct sock *sk = sock->sk;
1563 
1564 	err = sock_error(sk);
1565 	if (err)
1566 		return err;
1567 
1568 	if (sk->sk_state != TCP_ESTABLISHED)
1569 		return -ENOTCONN;
1570 
1571 	if (msg->msg_namelen)
1572 		msg->msg_namelen = 0;
1573 
1574 	return unix_dgram_sendmsg(kiocb, sock, msg, len);
1575 }
1576 
1577 static void unix_copy_addr(struct msghdr *msg, struct sock *sk)
1578 {
1579 	struct unix_sock *u = unix_sk(sk);
1580 
1581 	msg->msg_namelen = 0;
1582 	if (u->addr) {
1583 		msg->msg_namelen = u->addr->len;
1584 		memcpy(msg->msg_name, u->addr->name, u->addr->len);
1585 	}
1586 }
1587 
1588 static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock,
1589 			      struct msghdr *msg, size_t size,
1590 			      int flags)
1591 {
1592 	struct sock_iocb *siocb = kiocb_to_siocb(iocb);
1593 	struct scm_cookie tmp_scm;
1594 	struct sock *sk = sock->sk;
1595 	struct unix_sock *u = unix_sk(sk);
1596 	int noblock = flags & MSG_DONTWAIT;
1597 	struct sk_buff *skb;
1598 	int err;
1599 
1600 	err = -EOPNOTSUPP;
1601 	if (flags&MSG_OOB)
1602 		goto out;
1603 
1604 	msg->msg_namelen = 0;
1605 
1606 	mutex_lock(&u->readlock);
1607 
1608 	skb = skb_recv_datagram(sk, flags, noblock, &err);
1609 	if (!skb)
1610 		goto out_unlock;
1611 
1612 	wake_up_interruptible(&u->peer_wait);
1613 
1614 	if (msg->msg_name)
1615 		unix_copy_addr(msg, skb->sk);
1616 
1617 	if (size > skb->len)
1618 		size = skb->len;
1619 	else if (size < skb->len)
1620 		msg->msg_flags |= MSG_TRUNC;
1621 
1622 	err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, size);
1623 	if (err)
1624 		goto out_free;
1625 
1626 	if (!siocb->scm) {
1627 		siocb->scm = &tmp_scm;
1628 		memset(&tmp_scm, 0, sizeof(tmp_scm));
1629 	}
1630 	siocb->scm->creds = *UNIXCREDS(skb);
1631 	unix_set_secdata(siocb->scm, skb);
1632 
1633 	if (!(flags & MSG_PEEK))
1634 	{
1635 		if (UNIXCB(skb).fp)
1636 			unix_detach_fds(siocb->scm, skb);
1637 	}
1638 	else
1639 	{
1640 		/* It is questionable: on PEEK we could:
1641 		   - do not return fds - good, but too simple 8)
1642 		   - return fds, and do not return them on read (old strategy,
1643 		     apparently wrong)
1644 		   - clone fds (I chose it for now, it is the most universal
1645 		     solution)
1646 
1647 		   POSIX 1003.1g does not actually define this clearly
1648 		   at all. POSIX 1003.1g doesn't define a lot of things
1649 		   clearly however!
1650 
1651 		*/
1652 		if (UNIXCB(skb).fp)
1653 			siocb->scm->fp = scm_fp_dup(UNIXCB(skb).fp);
1654 	}
1655 	err = size;
1656 
1657 	scm_recv(sock, msg, siocb->scm, flags);
1658 
1659 out_free:
1660 	skb_free_datagram(sk,skb);
1661 out_unlock:
1662 	mutex_unlock(&u->readlock);
1663 out:
1664 	return err;
1665 }
1666 
1667 /*
1668  *	Sleep until data has arrive. But check for races..
1669  */
1670 
1671 static long unix_stream_data_wait(struct sock * sk, long timeo)
1672 {
1673 	DEFINE_WAIT(wait);
1674 
1675 	unix_state_lock(sk);
1676 
1677 	for (;;) {
1678 		prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
1679 
1680 		if (!skb_queue_empty(&sk->sk_receive_queue) ||
1681 		    sk->sk_err ||
1682 		    (sk->sk_shutdown & RCV_SHUTDOWN) ||
1683 		    signal_pending(current) ||
1684 		    !timeo)
1685 			break;
1686 
1687 		set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
1688 		unix_state_unlock(sk);
1689 		timeo = schedule_timeout(timeo);
1690 		unix_state_lock(sk);
1691 		clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
1692 	}
1693 
1694 	finish_wait(sk->sk_sleep, &wait);
1695 	unix_state_unlock(sk);
1696 	return timeo;
1697 }
1698 
1699 
1700 
1701 static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
1702 			       struct msghdr *msg, size_t size,
1703 			       int flags)
1704 {
1705 	struct sock_iocb *siocb = kiocb_to_siocb(iocb);
1706 	struct scm_cookie tmp_scm;
1707 	struct sock *sk = sock->sk;
1708 	struct unix_sock *u = unix_sk(sk);
1709 	struct sockaddr_un *sunaddr=msg->msg_name;
1710 	int copied = 0;
1711 	int check_creds = 0;
1712 	int target;
1713 	int err = 0;
1714 	long timeo;
1715 
1716 	err = -EINVAL;
1717 	if (sk->sk_state != TCP_ESTABLISHED)
1718 		goto out;
1719 
1720 	err = -EOPNOTSUPP;
1721 	if (flags&MSG_OOB)
1722 		goto out;
1723 
1724 	target = sock_rcvlowat(sk, flags&MSG_WAITALL, size);
1725 	timeo = sock_rcvtimeo(sk, flags&MSG_DONTWAIT);
1726 
1727 	msg->msg_namelen = 0;
1728 
1729 	/* Lock the socket to prevent queue disordering
1730 	 * while sleeps in memcpy_tomsg
1731 	 */
1732 
1733 	if (!siocb->scm) {
1734 		siocb->scm = &tmp_scm;
1735 		memset(&tmp_scm, 0, sizeof(tmp_scm));
1736 	}
1737 
1738 	mutex_lock(&u->readlock);
1739 
1740 	do
1741 	{
1742 		int chunk;
1743 		struct sk_buff *skb;
1744 
1745 		unix_state_lock(sk);
1746 		skb = skb_dequeue(&sk->sk_receive_queue);
1747 		if (skb==NULL)
1748 		{
1749 			if (copied >= target)
1750 				goto unlock;
1751 
1752 			/*
1753 			 *	POSIX 1003.1g mandates this order.
1754 			 */
1755 
1756 			if ((err = sock_error(sk)) != 0)
1757 				goto unlock;
1758 			if (sk->sk_shutdown & RCV_SHUTDOWN)
1759 				goto unlock;
1760 
1761 			unix_state_unlock(sk);
1762 			err = -EAGAIN;
1763 			if (!timeo)
1764 				break;
1765 			mutex_unlock(&u->readlock);
1766 
1767 			timeo = unix_stream_data_wait(sk, timeo);
1768 
1769 			if (signal_pending(current)) {
1770 				err = sock_intr_errno(timeo);
1771 				goto out;
1772 			}
1773 			mutex_lock(&u->readlock);
1774 			continue;
1775  unlock:
1776 			unix_state_unlock(sk);
1777 			break;
1778 		}
1779 		unix_state_unlock(sk);
1780 
1781 		if (check_creds) {
1782 			/* Never glue messages from different writers */
1783 			if (memcmp(UNIXCREDS(skb), &siocb->scm->creds, sizeof(siocb->scm->creds)) != 0) {
1784 				skb_queue_head(&sk->sk_receive_queue, skb);
1785 				break;
1786 			}
1787 		} else {
1788 			/* Copy credentials */
1789 			siocb->scm->creds = *UNIXCREDS(skb);
1790 			check_creds = 1;
1791 		}
1792 
1793 		/* Copy address just once */
1794 		if (sunaddr)
1795 		{
1796 			unix_copy_addr(msg, skb->sk);
1797 			sunaddr = NULL;
1798 		}
1799 
1800 		chunk = min_t(unsigned int, skb->len, size);
1801 		if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
1802 			skb_queue_head(&sk->sk_receive_queue, skb);
1803 			if (copied == 0)
1804 				copied = -EFAULT;
1805 			break;
1806 		}
1807 		copied += chunk;
1808 		size -= chunk;
1809 
1810 		/* Mark read part of skb as used */
1811 		if (!(flags & MSG_PEEK))
1812 		{
1813 			skb_pull(skb, chunk);
1814 
1815 			if (UNIXCB(skb).fp)
1816 				unix_detach_fds(siocb->scm, skb);
1817 
1818 			/* put the skb back if we didn't use it up.. */
1819 			if (skb->len)
1820 			{
1821 				skb_queue_head(&sk->sk_receive_queue, skb);
1822 				break;
1823 			}
1824 
1825 			kfree_skb(skb);
1826 
1827 			if (siocb->scm->fp)
1828 				break;
1829 		}
1830 		else
1831 		{
1832 			/* It is questionable, see note in unix_dgram_recvmsg.
1833 			 */
1834 			if (UNIXCB(skb).fp)
1835 				siocb->scm->fp = scm_fp_dup(UNIXCB(skb).fp);
1836 
1837 			/* put message back and return */
1838 			skb_queue_head(&sk->sk_receive_queue, skb);
1839 			break;
1840 		}
1841 	} while (size);
1842 
1843 	mutex_unlock(&u->readlock);
1844 	scm_recv(sock, msg, siocb->scm, flags);
1845 out:
1846 	return copied ? : err;
1847 }
1848 
1849 static int unix_shutdown(struct socket *sock, int mode)
1850 {
1851 	struct sock *sk = sock->sk;
1852 	struct sock *other;
1853 
1854 	mode = (mode+1)&(RCV_SHUTDOWN|SEND_SHUTDOWN);
1855 
1856 	if (mode) {
1857 		unix_state_lock(sk);
1858 		sk->sk_shutdown |= mode;
1859 		other=unix_peer(sk);
1860 		if (other)
1861 			sock_hold(other);
1862 		unix_state_unlock(sk);
1863 		sk->sk_state_change(sk);
1864 
1865 		if (other &&
1866 			(sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET)) {
1867 
1868 			int peer_mode = 0;
1869 
1870 			if (mode&RCV_SHUTDOWN)
1871 				peer_mode |= SEND_SHUTDOWN;
1872 			if (mode&SEND_SHUTDOWN)
1873 				peer_mode |= RCV_SHUTDOWN;
1874 			unix_state_lock(other);
1875 			other->sk_shutdown |= peer_mode;
1876 			unix_state_unlock(other);
1877 			other->sk_state_change(other);
1878 			read_lock(&other->sk_callback_lock);
1879 			if (peer_mode == SHUTDOWN_MASK)
1880 				sk_wake_async(other,1,POLL_HUP);
1881 			else if (peer_mode & RCV_SHUTDOWN)
1882 				sk_wake_async(other,1,POLL_IN);
1883 			read_unlock(&other->sk_callback_lock);
1884 		}
1885 		if (other)
1886 			sock_put(other);
1887 	}
1888 	return 0;
1889 }
1890 
1891 static int unix_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1892 {
1893 	struct sock *sk = sock->sk;
1894 	long amount=0;
1895 	int err;
1896 
1897 	switch(cmd)
1898 	{
1899 		case SIOCOUTQ:
1900 			amount = atomic_read(&sk->sk_wmem_alloc);
1901 			err = put_user(amount, (int __user *)arg);
1902 			break;
1903 		case SIOCINQ:
1904 		{
1905 			struct sk_buff *skb;
1906 
1907 			if (sk->sk_state == TCP_LISTEN) {
1908 				err = -EINVAL;
1909 				break;
1910 			}
1911 
1912 			spin_lock(&sk->sk_receive_queue.lock);
1913 			if (sk->sk_type == SOCK_STREAM ||
1914 			    sk->sk_type == SOCK_SEQPACKET) {
1915 				skb_queue_walk(&sk->sk_receive_queue, skb)
1916 					amount += skb->len;
1917 			} else {
1918 				skb = skb_peek(&sk->sk_receive_queue);
1919 				if (skb)
1920 					amount=skb->len;
1921 			}
1922 			spin_unlock(&sk->sk_receive_queue.lock);
1923 			err = put_user(amount, (int __user *)arg);
1924 			break;
1925 		}
1926 
1927 		default:
1928 			err = -ENOIOCTLCMD;
1929 			break;
1930 	}
1931 	return err;
1932 }
1933 
1934 static unsigned int unix_poll(struct file * file, struct socket *sock, poll_table *wait)
1935 {
1936 	struct sock *sk = sock->sk;
1937 	unsigned int mask;
1938 
1939 	poll_wait(file, sk->sk_sleep, wait);
1940 	mask = 0;
1941 
1942 	/* exceptional events? */
1943 	if (sk->sk_err)
1944 		mask |= POLLERR;
1945 	if (sk->sk_shutdown == SHUTDOWN_MASK)
1946 		mask |= POLLHUP;
1947 	if (sk->sk_shutdown & RCV_SHUTDOWN)
1948 		mask |= POLLRDHUP;
1949 
1950 	/* readable? */
1951 	if (!skb_queue_empty(&sk->sk_receive_queue) ||
1952 	    (sk->sk_shutdown & RCV_SHUTDOWN))
1953 		mask |= POLLIN | POLLRDNORM;
1954 
1955 	/* Connection-based need to check for termination and startup */
1956 	if ((sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) && sk->sk_state == TCP_CLOSE)
1957 		mask |= POLLHUP;
1958 
1959 	/*
1960 	 * we set writable also when the other side has shut down the
1961 	 * connection. This prevents stuck sockets.
1962 	 */
1963 	if (unix_writable(sk))
1964 		mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
1965 
1966 	return mask;
1967 }
1968 
1969 
1970 #ifdef CONFIG_PROC_FS
1971 static struct sock *unix_seq_idx(int *iter, loff_t pos)
1972 {
1973 	loff_t off = 0;
1974 	struct sock *s;
1975 
1976 	for (s = first_unix_socket(iter); s; s = next_unix_socket(iter, s)) {
1977 		if (off == pos)
1978 			return s;
1979 		++off;
1980 	}
1981 	return NULL;
1982 }
1983 
1984 
1985 static void *unix_seq_start(struct seq_file *seq, loff_t *pos)
1986 {
1987 	spin_lock(&unix_table_lock);
1988 	return *pos ? unix_seq_idx(seq->private, *pos - 1) : ((void *) 1);
1989 }
1990 
1991 static void *unix_seq_next(struct seq_file *seq, void *v, loff_t *pos)
1992 {
1993 	++*pos;
1994 
1995 	if (v == (void *)1)
1996 		return first_unix_socket(seq->private);
1997 	return next_unix_socket(seq->private, v);
1998 }
1999 
2000 static void unix_seq_stop(struct seq_file *seq, void *v)
2001 {
2002 	spin_unlock(&unix_table_lock);
2003 }
2004 
2005 static int unix_seq_show(struct seq_file *seq, void *v)
2006 {
2007 
2008 	if (v == (void *)1)
2009 		seq_puts(seq, "Num       RefCount Protocol Flags    Type St "
2010 			 "Inode Path\n");
2011 	else {
2012 		struct sock *s = v;
2013 		struct unix_sock *u = unix_sk(s);
2014 		unix_state_lock(s);
2015 
2016 		seq_printf(seq, "%p: %08X %08X %08X %04X %02X %5lu",
2017 			s,
2018 			atomic_read(&s->sk_refcnt),
2019 			0,
2020 			s->sk_state == TCP_LISTEN ? __SO_ACCEPTCON : 0,
2021 			s->sk_type,
2022 			s->sk_socket ?
2023 			(s->sk_state == TCP_ESTABLISHED ? SS_CONNECTED : SS_UNCONNECTED) :
2024 			(s->sk_state == TCP_ESTABLISHED ? SS_CONNECTING : SS_DISCONNECTING),
2025 			sock_i_ino(s));
2026 
2027 		if (u->addr) {
2028 			int i, len;
2029 			seq_putc(seq, ' ');
2030 
2031 			i = 0;
2032 			len = u->addr->len - sizeof(short);
2033 			if (!UNIX_ABSTRACT(s))
2034 				len--;
2035 			else {
2036 				seq_putc(seq, '@');
2037 				i++;
2038 			}
2039 			for ( ; i < len; i++)
2040 				seq_putc(seq, u->addr->name->sun_path[i]);
2041 		}
2042 		unix_state_unlock(s);
2043 		seq_putc(seq, '\n');
2044 	}
2045 
2046 	return 0;
2047 }
2048 
2049 static const struct seq_operations unix_seq_ops = {
2050 	.start  = unix_seq_start,
2051 	.next   = unix_seq_next,
2052 	.stop   = unix_seq_stop,
2053 	.show   = unix_seq_show,
2054 };
2055 
2056 
2057 static int unix_seq_open(struct inode *inode, struct file *file)
2058 {
2059 	struct seq_file *seq;
2060 	int rc = -ENOMEM;
2061 	int *iter = kmalloc(sizeof(int), GFP_KERNEL);
2062 
2063 	if (!iter)
2064 		goto out;
2065 
2066 	rc = seq_open(file, &unix_seq_ops);
2067 	if (rc)
2068 		goto out_kfree;
2069 
2070 	seq	     = file->private_data;
2071 	seq->private = iter;
2072 	*iter = 0;
2073 out:
2074 	return rc;
2075 out_kfree:
2076 	kfree(iter);
2077 	goto out;
2078 }
2079 
2080 static const struct file_operations unix_seq_fops = {
2081 	.owner		= THIS_MODULE,
2082 	.open		= unix_seq_open,
2083 	.read		= seq_read,
2084 	.llseek		= seq_lseek,
2085 	.release	= seq_release_private,
2086 };
2087 
2088 #endif
2089 
2090 static struct net_proto_family unix_family_ops = {
2091 	.family = PF_UNIX,
2092 	.create = unix_create,
2093 	.owner	= THIS_MODULE,
2094 };
2095 
2096 static int __init af_unix_init(void)
2097 {
2098 	int rc = -1;
2099 	struct sk_buff *dummy_skb;
2100 
2101 	BUILD_BUG_ON(sizeof(struct unix_skb_parms) > sizeof(dummy_skb->cb));
2102 
2103 	rc = proto_register(&unix_proto, 1);
2104 	if (rc != 0) {
2105 		printk(KERN_CRIT "%s: Cannot create unix_sock SLAB cache!\n",
2106 		       __FUNCTION__);
2107 		goto out;
2108 	}
2109 
2110 	sock_register(&unix_family_ops);
2111 #ifdef CONFIG_PROC_FS
2112 	proc_net_fops_create("unix", 0, &unix_seq_fops);
2113 #endif
2114 	unix_sysctl_register();
2115 out:
2116 	return rc;
2117 }
2118 
2119 static void __exit af_unix_exit(void)
2120 {
2121 	sock_unregister(PF_UNIX);
2122 	unix_sysctl_unregister();
2123 	proc_net_remove("unix");
2124 	proto_unregister(&unix_proto);
2125 }
2126 
2127 module_init(af_unix_init);
2128 module_exit(af_unix_exit);
2129 
2130 MODULE_LICENSE("GPL");
2131 MODULE_ALIAS_NETPROTO(PF_UNIX);
2132