Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

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