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