af_unix: fix use-after-free in unix_stream_read_actor()
[platform/kernel/linux-starfive.git] / net / unix / af_unix.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * NET4:        Implementation of BSD Unix domain sockets.
4  *
5  * Authors:     Alan Cox, <alan@lxorguk.ukuu.org.uk>
6  *
7  * Fixes:
8  *              Linus Torvalds  :       Assorted bug cures.
9  *              Niibe Yutaka    :       async I/O support.
10  *              Carsten Paeth   :       PF_UNIX check, address fixes.
11  *              Alan Cox        :       Limit size of allocated blocks.
12  *              Alan Cox        :       Fixed the stupid socketpair bug.
13  *              Alan Cox        :       BSD compatibility fine tuning.
14  *              Alan Cox        :       Fixed a bug in connect when interrupted.
15  *              Alan Cox        :       Sorted out a proper draft version of
16  *                                      file descriptor passing hacked up from
17  *                                      Mike Shaver's work.
18  *              Marty Leisner   :       Fixes to fd passing
19  *              Nick Nevin      :       recvmsg bugfix.
20  *              Alan Cox        :       Started proper garbage collector
21  *              Heiko EiBfeldt  :       Missing verify_area check
22  *              Alan Cox        :       Started POSIXisms
23  *              Andreas Schwab  :       Replace inode by dentry for proper
24  *                                      reference counting
25  *              Kirk Petersen   :       Made this a module
26  *          Christoph Rohland   :       Elegant non-blocking accept/connect algorithm.
27  *                                      Lots of bug fixes.
28  *           Alexey Kuznetosv   :       Repaired (I hope) bugs introduces
29  *                                      by above two patches.
30  *           Andrea Arcangeli   :       If possible we block in connect(2)
31  *                                      if the max backlog of the listen socket
32  *                                      is been reached. This won't break
33  *                                      old apps and it will avoid huge amount
34  *                                      of socks hashed (this for unix_gc()
35  *                                      performances reasons).
36  *                                      Security fix that limits the max
37  *                                      number of socks to 2*max_files and
38  *                                      the number of skb queueable in the
39  *                                      dgram receiver.
40  *              Artur Skawina   :       Hash function optimizations
41  *           Alexey Kuznetsov   :       Full scale SMP. Lot of bugs are introduced 8)
42  *            Malcolm Beattie   :       Set peercred for socketpair
43  *           Michal Ostrowski   :       Module initialization cleanup.
44  *           Arnaldo C. Melo    :       Remove MOD_{INC,DEC}_USE_COUNT,
45  *                                      the core infrastructure is doing that
46  *                                      for all net proto families now (2.5.69+)
47  *
48  * Known differences from reference BSD that was tested:
49  *
50  *      [TO FIX]
51  *      ECONNREFUSED is not returned from one end of a connected() socket to the
52  *              other the moment one end closes.
53  *      fstat() doesn't return st_dev=0, and give the blksize as high water mark
54  *              and a fake inode identifier (nor the BSD first socket fstat twice bug).
55  *      [NOT TO FIX]
56  *      accept() returns a path name even if the connecting socket has closed
57  *              in the meantime (BSD loses the path and gives up).
58  *      accept() returns 0 length path for an unbound connector. BSD returns 16
59  *              and a null first byte in the path (but not for gethost/peername - BSD bug ??)
60  *      socketpair(...SOCK_RAW..) doesn't panic the kernel.
61  *      BSD af_unix apparently has connect forgetting to block properly.
62  *              (need to check this with the POSIX spec in detail)
63  *
64  * Differences from 2.0.0-11-... (ANK)
65  *      Bug fixes and improvements.
66  *              - client shutdown killed server socket.
67  *              - removed all useless cli/sti pairs.
68  *
69  *      Semantic changes/extensions.
70  *              - generic control message passing.
71  *              - SCM_CREDENTIALS control message.
72  *              - "Abstract" (not FS based) socket bindings.
73  *                Abstract names are sequences of bytes (not zero terminated)
74  *                started by 0, so that this name space does not intersect
75  *                with BSD names.
76  */
77
78 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
79
80 #include <linux/module.h>
81 #include <linux/kernel.h>
82 #include <linux/signal.h>
83 #include <linux/sched/signal.h>
84 #include <linux/errno.h>
85 #include <linux/string.h>
86 #include <linux/stat.h>
87 #include <linux/dcache.h>
88 #include <linux/namei.h>
89 #include <linux/socket.h>
90 #include <linux/un.h>
91 #include <linux/fcntl.h>
92 #include <linux/filter.h>
93 #include <linux/termios.h>
94 #include <linux/sockios.h>
95 #include <linux/net.h>
96 #include <linux/in.h>
97 #include <linux/fs.h>
98 #include <linux/slab.h>
99 #include <linux/uaccess.h>
100 #include <linux/skbuff.h>
101 #include <linux/netdevice.h>
102 #include <net/net_namespace.h>
103 #include <net/sock.h>
104 #include <net/tcp_states.h>
105 #include <net/af_unix.h>
106 #include <linux/proc_fs.h>
107 #include <linux/seq_file.h>
108 #include <net/scm.h>
109 #include <linux/init.h>
110 #include <linux/poll.h>
111 #include <linux/rtnetlink.h>
112 #include <linux/mount.h>
113 #include <net/checksum.h>
114 #include <linux/security.h>
115 #include <linux/splice.h>
116 #include <linux/freezer.h>
117 #include <linux/file.h>
118 #include <linux/btf_ids.h>
119
120 #include "scm.h"
121
122 static atomic_long_t unix_nr_socks;
123 static struct hlist_head bsd_socket_buckets[UNIX_HASH_SIZE / 2];
124 static spinlock_t bsd_socket_locks[UNIX_HASH_SIZE / 2];
125
126 /* SMP locking strategy:
127  *    hash table is protected with spinlock.
128  *    each socket state is protected by separate spinlock.
129  */
130
131 static unsigned int unix_unbound_hash(struct sock *sk)
132 {
133         unsigned long hash = (unsigned long)sk;
134
135         hash ^= hash >> 16;
136         hash ^= hash >> 8;
137         hash ^= sk->sk_type;
138
139         return hash & UNIX_HASH_MOD;
140 }
141
142 static unsigned int unix_bsd_hash(struct inode *i)
143 {
144         return i->i_ino & UNIX_HASH_MOD;
145 }
146
147 static unsigned int unix_abstract_hash(struct sockaddr_un *sunaddr,
148                                        int addr_len, int type)
149 {
150         __wsum csum = csum_partial(sunaddr, addr_len, 0);
151         unsigned int hash;
152
153         hash = (__force unsigned int)csum_fold(csum);
154         hash ^= hash >> 8;
155         hash ^= type;
156
157         return UNIX_HASH_MOD + 1 + (hash & UNIX_HASH_MOD);
158 }
159
160 static void unix_table_double_lock(struct net *net,
161                                    unsigned int hash1, unsigned int hash2)
162 {
163         if (hash1 == hash2) {
164                 spin_lock(&net->unx.table.locks[hash1]);
165                 return;
166         }
167
168         if (hash1 > hash2)
169                 swap(hash1, hash2);
170
171         spin_lock(&net->unx.table.locks[hash1]);
172         spin_lock_nested(&net->unx.table.locks[hash2], SINGLE_DEPTH_NESTING);
173 }
174
175 static void unix_table_double_unlock(struct net *net,
176                                      unsigned int hash1, unsigned int hash2)
177 {
178         if (hash1 == hash2) {
179                 spin_unlock(&net->unx.table.locks[hash1]);
180                 return;
181         }
182
183         spin_unlock(&net->unx.table.locks[hash1]);
184         spin_unlock(&net->unx.table.locks[hash2]);
185 }
186
187 #ifdef CONFIG_SECURITY_NETWORK
188 static void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb)
189 {
190         UNIXCB(skb).secid = scm->secid;
191 }
192
193 static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb)
194 {
195         scm->secid = UNIXCB(skb).secid;
196 }
197
198 static inline bool unix_secdata_eq(struct scm_cookie *scm, struct sk_buff *skb)
199 {
200         return (scm->secid == UNIXCB(skb).secid);
201 }
202 #else
203 static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb)
204 { }
205
206 static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb)
207 { }
208
209 static inline bool unix_secdata_eq(struct scm_cookie *scm, struct sk_buff *skb)
210 {
211         return true;
212 }
213 #endif /* CONFIG_SECURITY_NETWORK */
214
215 #define unix_peer(sk) (unix_sk(sk)->peer)
216
217 static inline int unix_our_peer(struct sock *sk, struct sock *osk)
218 {
219         return unix_peer(osk) == sk;
220 }
221
222 static inline int unix_may_send(struct sock *sk, struct sock *osk)
223 {
224         return unix_peer(osk) == NULL || unix_our_peer(sk, osk);
225 }
226
227 static inline int unix_recvq_full(const struct sock *sk)
228 {
229         return skb_queue_len(&sk->sk_receive_queue) > sk->sk_max_ack_backlog;
230 }
231
232 static inline int unix_recvq_full_lockless(const struct sock *sk)
233 {
234         return skb_queue_len_lockless(&sk->sk_receive_queue) >
235                 READ_ONCE(sk->sk_max_ack_backlog);
236 }
237
238 struct sock *unix_peer_get(struct sock *s)
239 {
240         struct sock *peer;
241
242         unix_state_lock(s);
243         peer = unix_peer(s);
244         if (peer)
245                 sock_hold(peer);
246         unix_state_unlock(s);
247         return peer;
248 }
249 EXPORT_SYMBOL_GPL(unix_peer_get);
250
251 static struct unix_address *unix_create_addr(struct sockaddr_un *sunaddr,
252                                              int addr_len)
253 {
254         struct unix_address *addr;
255
256         addr = kmalloc(sizeof(*addr) + addr_len, GFP_KERNEL);
257         if (!addr)
258                 return NULL;
259
260         refcount_set(&addr->refcnt, 1);
261         addr->len = addr_len;
262         memcpy(addr->name, sunaddr, addr_len);
263
264         return addr;
265 }
266
267 static inline void unix_release_addr(struct unix_address *addr)
268 {
269         if (refcount_dec_and_test(&addr->refcnt))
270                 kfree(addr);
271 }
272
273 /*
274  *      Check unix socket name:
275  *              - should be not zero length.
276  *              - if started by not zero, should be NULL terminated (FS object)
277  *              - if started by zero, it is abstract name.
278  */
279
280 static int unix_validate_addr(struct sockaddr_un *sunaddr, int addr_len)
281 {
282         if (addr_len <= offsetof(struct sockaddr_un, sun_path) ||
283             addr_len > sizeof(*sunaddr))
284                 return -EINVAL;
285
286         if (sunaddr->sun_family != AF_UNIX)
287                 return -EINVAL;
288
289         return 0;
290 }
291
292 static int unix_mkname_bsd(struct sockaddr_un *sunaddr, int addr_len)
293 {
294         struct sockaddr_storage *addr = (struct sockaddr_storage *)sunaddr;
295         short offset = offsetof(struct sockaddr_storage, __data);
296
297         BUILD_BUG_ON(offset != offsetof(struct sockaddr_un, sun_path));
298
299         /* This may look like an off by one error but it is a bit more
300          * subtle.  108 is the longest valid AF_UNIX path for a binding.
301          * sun_path[108] doesn't as such exist.  However in kernel space
302          * we are guaranteed that it is a valid memory location in our
303          * kernel address buffer because syscall functions always pass
304          * a pointer of struct sockaddr_storage which has a bigger buffer
305          * than 108.  Also, we must terminate sun_path for strlen() in
306          * getname_kernel().
307          */
308         addr->__data[addr_len - offset] = 0;
309
310         /* Don't pass sunaddr->sun_path to strlen().  Otherwise, 108 will
311          * cause panic if CONFIG_FORTIFY_SOURCE=y.  Let __fortify_strlen()
312          * know the actual buffer.
313          */
314         return strlen(addr->__data) + offset + 1;
315 }
316
317 static void __unix_remove_socket(struct sock *sk)
318 {
319         sk_del_node_init(sk);
320 }
321
322 static void __unix_insert_socket(struct net *net, struct sock *sk)
323 {
324         DEBUG_NET_WARN_ON_ONCE(!sk_unhashed(sk));
325         sk_add_node(sk, &net->unx.table.buckets[sk->sk_hash]);
326 }
327
328 static void __unix_set_addr_hash(struct net *net, struct sock *sk,
329                                  struct unix_address *addr, unsigned int hash)
330 {
331         __unix_remove_socket(sk);
332         smp_store_release(&unix_sk(sk)->addr, addr);
333
334         sk->sk_hash = hash;
335         __unix_insert_socket(net, sk);
336 }
337
338 static void unix_remove_socket(struct net *net, struct sock *sk)
339 {
340         spin_lock(&net->unx.table.locks[sk->sk_hash]);
341         __unix_remove_socket(sk);
342         spin_unlock(&net->unx.table.locks[sk->sk_hash]);
343 }
344
345 static void unix_insert_unbound_socket(struct net *net, struct sock *sk)
346 {
347         spin_lock(&net->unx.table.locks[sk->sk_hash]);
348         __unix_insert_socket(net, sk);
349         spin_unlock(&net->unx.table.locks[sk->sk_hash]);
350 }
351
352 static void unix_insert_bsd_socket(struct sock *sk)
353 {
354         spin_lock(&bsd_socket_locks[sk->sk_hash]);
355         sk_add_bind_node(sk, &bsd_socket_buckets[sk->sk_hash]);
356         spin_unlock(&bsd_socket_locks[sk->sk_hash]);
357 }
358
359 static void unix_remove_bsd_socket(struct sock *sk)
360 {
361         if (!hlist_unhashed(&sk->sk_bind_node)) {
362                 spin_lock(&bsd_socket_locks[sk->sk_hash]);
363                 __sk_del_bind_node(sk);
364                 spin_unlock(&bsd_socket_locks[sk->sk_hash]);
365
366                 sk_node_init(&sk->sk_bind_node);
367         }
368 }
369
370 static struct sock *__unix_find_socket_byname(struct net *net,
371                                               struct sockaddr_un *sunname,
372                                               int len, unsigned int hash)
373 {
374         struct sock *s;
375
376         sk_for_each(s, &net->unx.table.buckets[hash]) {
377                 struct unix_sock *u = unix_sk(s);
378
379                 if (u->addr->len == len &&
380                     !memcmp(u->addr->name, sunname, len))
381                         return s;
382         }
383         return NULL;
384 }
385
386 static inline struct sock *unix_find_socket_byname(struct net *net,
387                                                    struct sockaddr_un *sunname,
388                                                    int len, unsigned int hash)
389 {
390         struct sock *s;
391
392         spin_lock(&net->unx.table.locks[hash]);
393         s = __unix_find_socket_byname(net, sunname, len, hash);
394         if (s)
395                 sock_hold(s);
396         spin_unlock(&net->unx.table.locks[hash]);
397         return s;
398 }
399
400 static struct sock *unix_find_socket_byinode(struct inode *i)
401 {
402         unsigned int hash = unix_bsd_hash(i);
403         struct sock *s;
404
405         spin_lock(&bsd_socket_locks[hash]);
406         sk_for_each_bound(s, &bsd_socket_buckets[hash]) {
407                 struct dentry *dentry = unix_sk(s)->path.dentry;
408
409                 if (dentry && d_backing_inode(dentry) == i) {
410                         sock_hold(s);
411                         spin_unlock(&bsd_socket_locks[hash]);
412                         return s;
413                 }
414         }
415         spin_unlock(&bsd_socket_locks[hash]);
416         return NULL;
417 }
418
419 /* Support code for asymmetrically connected dgram sockets
420  *
421  * If a datagram socket is connected to a socket not itself connected
422  * to the first socket (eg, /dev/log), clients may only enqueue more
423  * messages if the present receive queue of the server socket is not
424  * "too large". This means there's a second writeability condition
425  * poll and sendmsg need to test. The dgram recv code will do a wake
426  * up on the peer_wait wait queue of a socket upon reception of a
427  * datagram which needs to be propagated to sleeping would-be writers
428  * since these might not have sent anything so far. This can't be
429  * accomplished via poll_wait because the lifetime of the server
430  * socket might be less than that of its clients if these break their
431  * association with it or if the server socket is closed while clients
432  * are still connected to it and there's no way to inform "a polling
433  * implementation" that it should let go of a certain wait queue
434  *
435  * In order to propagate a wake up, a wait_queue_entry_t of the client
436  * socket is enqueued on the peer_wait queue of the server socket
437  * whose wake function does a wake_up on the ordinary client socket
438  * wait queue. This connection is established whenever a write (or
439  * poll for write) hit the flow control condition and broken when the
440  * association to the server socket is dissolved or after a wake up
441  * was relayed.
442  */
443
444 static int unix_dgram_peer_wake_relay(wait_queue_entry_t *q, unsigned mode, int flags,
445                                       void *key)
446 {
447         struct unix_sock *u;
448         wait_queue_head_t *u_sleep;
449
450         u = container_of(q, struct unix_sock, peer_wake);
451
452         __remove_wait_queue(&unix_sk(u->peer_wake.private)->peer_wait,
453                             q);
454         u->peer_wake.private = NULL;
455
456         /* relaying can only happen while the wq still exists */
457         u_sleep = sk_sleep(&u->sk);
458         if (u_sleep)
459                 wake_up_interruptible_poll(u_sleep, key_to_poll(key));
460
461         return 0;
462 }
463
464 static int unix_dgram_peer_wake_connect(struct sock *sk, struct sock *other)
465 {
466         struct unix_sock *u, *u_other;
467         int rc;
468
469         u = unix_sk(sk);
470         u_other = unix_sk(other);
471         rc = 0;
472         spin_lock(&u_other->peer_wait.lock);
473
474         if (!u->peer_wake.private) {
475                 u->peer_wake.private = other;
476                 __add_wait_queue(&u_other->peer_wait, &u->peer_wake);
477
478                 rc = 1;
479         }
480
481         spin_unlock(&u_other->peer_wait.lock);
482         return rc;
483 }
484
485 static void unix_dgram_peer_wake_disconnect(struct sock *sk,
486                                             struct sock *other)
487 {
488         struct unix_sock *u, *u_other;
489
490         u = unix_sk(sk);
491         u_other = unix_sk(other);
492         spin_lock(&u_other->peer_wait.lock);
493
494         if (u->peer_wake.private == other) {
495                 __remove_wait_queue(&u_other->peer_wait, &u->peer_wake);
496                 u->peer_wake.private = NULL;
497         }
498
499         spin_unlock(&u_other->peer_wait.lock);
500 }
501
502 static void unix_dgram_peer_wake_disconnect_wakeup(struct sock *sk,
503                                                    struct sock *other)
504 {
505         unix_dgram_peer_wake_disconnect(sk, other);
506         wake_up_interruptible_poll(sk_sleep(sk),
507                                    EPOLLOUT |
508                                    EPOLLWRNORM |
509                                    EPOLLWRBAND);
510 }
511
512 /* preconditions:
513  *      - unix_peer(sk) == other
514  *      - association is stable
515  */
516 static int unix_dgram_peer_wake_me(struct sock *sk, struct sock *other)
517 {
518         int connected;
519
520         connected = unix_dgram_peer_wake_connect(sk, other);
521
522         /* If other is SOCK_DEAD, we want to make sure we signal
523          * POLLOUT, such that a subsequent write() can get a
524          * -ECONNREFUSED. Otherwise, if we haven't queued any skbs
525          * to other and its full, we will hang waiting for POLLOUT.
526          */
527         if (unix_recvq_full_lockless(other) && !sock_flag(other, SOCK_DEAD))
528                 return 1;
529
530         if (connected)
531                 unix_dgram_peer_wake_disconnect(sk, other);
532
533         return 0;
534 }
535
536 static int unix_writable(const struct sock *sk)
537 {
538         return sk->sk_state != TCP_LISTEN &&
539                (refcount_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf;
540 }
541
542 static void unix_write_space(struct sock *sk)
543 {
544         struct socket_wq *wq;
545
546         rcu_read_lock();
547         if (unix_writable(sk)) {
548                 wq = rcu_dereference(sk->sk_wq);
549                 if (skwq_has_sleeper(wq))
550                         wake_up_interruptible_sync_poll(&wq->wait,
551                                 EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND);
552                 sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
553         }
554         rcu_read_unlock();
555 }
556
557 /* When dgram socket disconnects (or changes its peer), we clear its receive
558  * queue of packets arrived from previous peer. First, it allows to do
559  * flow control based only on wmem_alloc; second, sk connected to peer
560  * may receive messages only from that peer. */
561 static void unix_dgram_disconnected(struct sock *sk, struct sock *other)
562 {
563         if (!skb_queue_empty(&sk->sk_receive_queue)) {
564                 skb_queue_purge(&sk->sk_receive_queue);
565                 wake_up_interruptible_all(&unix_sk(sk)->peer_wait);
566
567                 /* If one link of bidirectional dgram pipe is disconnected,
568                  * we signal error. Messages are lost. Do not make this,
569                  * when peer was not connected to us.
570                  */
571                 if (!sock_flag(other, SOCK_DEAD) && unix_peer(other) == sk) {
572                         WRITE_ONCE(other->sk_err, ECONNRESET);
573                         sk_error_report(other);
574                 }
575         }
576         other->sk_state = TCP_CLOSE;
577 }
578
579 static void unix_sock_destructor(struct sock *sk)
580 {
581         struct unix_sock *u = unix_sk(sk);
582
583         skb_queue_purge(&sk->sk_receive_queue);
584
585         DEBUG_NET_WARN_ON_ONCE(refcount_read(&sk->sk_wmem_alloc));
586         DEBUG_NET_WARN_ON_ONCE(!sk_unhashed(sk));
587         DEBUG_NET_WARN_ON_ONCE(sk->sk_socket);
588         if (!sock_flag(sk, SOCK_DEAD)) {
589                 pr_info("Attempt to release alive unix socket: %p\n", sk);
590                 return;
591         }
592
593         if (u->addr)
594                 unix_release_addr(u->addr);
595
596         atomic_long_dec(&unix_nr_socks);
597         sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
598 #ifdef UNIX_REFCNT_DEBUG
599         pr_debug("UNIX %p is destroyed, %ld are still alive.\n", sk,
600                 atomic_long_read(&unix_nr_socks));
601 #endif
602 }
603
604 static void unix_release_sock(struct sock *sk, int embrion)
605 {
606         struct unix_sock *u = unix_sk(sk);
607         struct sock *skpair;
608         struct sk_buff *skb;
609         struct path path;
610         int state;
611
612         unix_remove_socket(sock_net(sk), sk);
613         unix_remove_bsd_socket(sk);
614
615         /* Clear state */
616         unix_state_lock(sk);
617         sock_orphan(sk);
618         WRITE_ONCE(sk->sk_shutdown, SHUTDOWN_MASK);
619         path         = u->path;
620         u->path.dentry = NULL;
621         u->path.mnt = NULL;
622         state = sk->sk_state;
623         sk->sk_state = TCP_CLOSE;
624
625         skpair = unix_peer(sk);
626         unix_peer(sk) = NULL;
627
628         unix_state_unlock(sk);
629
630 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
631         if (u->oob_skb) {
632                 kfree_skb(u->oob_skb);
633                 u->oob_skb = NULL;
634         }
635 #endif
636
637         wake_up_interruptible_all(&u->peer_wait);
638
639         if (skpair != NULL) {
640                 if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) {
641                         unix_state_lock(skpair);
642                         /* No more writes */
643                         WRITE_ONCE(skpair->sk_shutdown, SHUTDOWN_MASK);
644                         if (!skb_queue_empty(&sk->sk_receive_queue) || embrion)
645                                 WRITE_ONCE(skpair->sk_err, ECONNRESET);
646                         unix_state_unlock(skpair);
647                         skpair->sk_state_change(skpair);
648                         sk_wake_async(skpair, SOCK_WAKE_WAITD, POLL_HUP);
649                 }
650
651                 unix_dgram_peer_wake_disconnect(sk, skpair);
652                 sock_put(skpair); /* It may now die */
653         }
654
655         /* Try to flush out this socket. Throw out buffers at least */
656
657         while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
658                 if (state == TCP_LISTEN)
659                         unix_release_sock(skb->sk, 1);
660                 /* passed fds are erased in the kfree_skb hook        */
661                 UNIXCB(skb).consumed = skb->len;
662                 kfree_skb(skb);
663         }
664
665         if (path.dentry)
666                 path_put(&path);
667
668         sock_put(sk);
669
670         /* ---- Socket is dead now and most probably destroyed ---- */
671
672         /*
673          * Fixme: BSD difference: In BSD all sockets connected to us get
674          *        ECONNRESET and we die on the spot. In Linux we behave
675          *        like files and pipes do and wait for the last
676          *        dereference.
677          *
678          * Can't we simply set sock->err?
679          *
680          *        What the above comment does talk about? --ANK(980817)
681          */
682
683         if (READ_ONCE(unix_tot_inflight))
684                 unix_gc();              /* Garbage collect fds */
685 }
686
687 static void init_peercred(struct sock *sk)
688 {
689         const struct cred *old_cred;
690         struct pid *old_pid;
691
692         spin_lock(&sk->sk_peer_lock);
693         old_pid = sk->sk_peer_pid;
694         old_cred = sk->sk_peer_cred;
695         sk->sk_peer_pid  = get_pid(task_tgid(current));
696         sk->sk_peer_cred = get_current_cred();
697         spin_unlock(&sk->sk_peer_lock);
698
699         put_pid(old_pid);
700         put_cred(old_cred);
701 }
702
703 static void copy_peercred(struct sock *sk, struct sock *peersk)
704 {
705         const struct cred *old_cred;
706         struct pid *old_pid;
707
708         if (sk < peersk) {
709                 spin_lock(&sk->sk_peer_lock);
710                 spin_lock_nested(&peersk->sk_peer_lock, SINGLE_DEPTH_NESTING);
711         } else {
712                 spin_lock(&peersk->sk_peer_lock);
713                 spin_lock_nested(&sk->sk_peer_lock, SINGLE_DEPTH_NESTING);
714         }
715         old_pid = sk->sk_peer_pid;
716         old_cred = sk->sk_peer_cred;
717         sk->sk_peer_pid  = get_pid(peersk->sk_peer_pid);
718         sk->sk_peer_cred = get_cred(peersk->sk_peer_cred);
719
720         spin_unlock(&sk->sk_peer_lock);
721         spin_unlock(&peersk->sk_peer_lock);
722
723         put_pid(old_pid);
724         put_cred(old_cred);
725 }
726
727 static int unix_listen(struct socket *sock, int backlog)
728 {
729         int err;
730         struct sock *sk = sock->sk;
731         struct unix_sock *u = unix_sk(sk);
732
733         err = -EOPNOTSUPP;
734         if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET)
735                 goto out;       /* Only stream/seqpacket sockets accept */
736         err = -EINVAL;
737         if (!u->addr)
738                 goto out;       /* No listens on an unbound socket */
739         unix_state_lock(sk);
740         if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN)
741                 goto out_unlock;
742         if (backlog > sk->sk_max_ack_backlog)
743                 wake_up_interruptible_all(&u->peer_wait);
744         sk->sk_max_ack_backlog  = backlog;
745         sk->sk_state            = TCP_LISTEN;
746         /* set credentials so connect can copy them */
747         init_peercred(sk);
748         err = 0;
749
750 out_unlock:
751         unix_state_unlock(sk);
752 out:
753         return err;
754 }
755
756 static int unix_release(struct socket *);
757 static int unix_bind(struct socket *, struct sockaddr *, int);
758 static int unix_stream_connect(struct socket *, struct sockaddr *,
759                                int addr_len, int flags);
760 static int unix_socketpair(struct socket *, struct socket *);
761 static int unix_accept(struct socket *, struct socket *, int, bool);
762 static int unix_getname(struct socket *, struct sockaddr *, int);
763 static __poll_t unix_poll(struct file *, struct socket *, poll_table *);
764 static __poll_t unix_dgram_poll(struct file *, struct socket *,
765                                     poll_table *);
766 static int unix_ioctl(struct socket *, unsigned int, unsigned long);
767 #ifdef CONFIG_COMPAT
768 static int unix_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
769 #endif
770 static int unix_shutdown(struct socket *, int);
771 static int unix_stream_sendmsg(struct socket *, struct msghdr *, size_t);
772 static int unix_stream_recvmsg(struct socket *, struct msghdr *, size_t, int);
773 static ssize_t unix_stream_splice_read(struct socket *,  loff_t *ppos,
774                                        struct pipe_inode_info *, size_t size,
775                                        unsigned int flags);
776 static int unix_dgram_sendmsg(struct socket *, struct msghdr *, size_t);
777 static int unix_dgram_recvmsg(struct socket *, struct msghdr *, size_t, int);
778 static int unix_read_skb(struct sock *sk, skb_read_actor_t recv_actor);
779 static int unix_stream_read_skb(struct sock *sk, skb_read_actor_t recv_actor);
780 static int unix_dgram_connect(struct socket *, struct sockaddr *,
781                               int, int);
782 static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t);
783 static int unix_seqpacket_recvmsg(struct socket *, struct msghdr *, size_t,
784                                   int);
785
786 static int unix_set_peek_off(struct sock *sk, int val)
787 {
788         struct unix_sock *u = unix_sk(sk);
789
790         if (mutex_lock_interruptible(&u->iolock))
791                 return -EINTR;
792
793         WRITE_ONCE(sk->sk_peek_off, val);
794         mutex_unlock(&u->iolock);
795
796         return 0;
797 }
798
799 #ifdef CONFIG_PROC_FS
800 static int unix_count_nr_fds(struct sock *sk)
801 {
802         struct sk_buff *skb;
803         struct unix_sock *u;
804         int nr_fds = 0;
805
806         spin_lock(&sk->sk_receive_queue.lock);
807         skb = skb_peek(&sk->sk_receive_queue);
808         while (skb) {
809                 u = unix_sk(skb->sk);
810                 nr_fds += atomic_read(&u->scm_stat.nr_fds);
811                 skb = skb_peek_next(skb, &sk->sk_receive_queue);
812         }
813         spin_unlock(&sk->sk_receive_queue.lock);
814
815         return nr_fds;
816 }
817
818 static void unix_show_fdinfo(struct seq_file *m, struct socket *sock)
819 {
820         struct sock *sk = sock->sk;
821         unsigned char s_state;
822         struct unix_sock *u;
823         int nr_fds = 0;
824
825         if (sk) {
826                 s_state = READ_ONCE(sk->sk_state);
827                 u = unix_sk(sk);
828
829                 /* SOCK_STREAM and SOCK_SEQPACKET sockets never change their
830                  * sk_state after switching to TCP_ESTABLISHED or TCP_LISTEN.
831                  * SOCK_DGRAM is ordinary. So, no lock is needed.
832                  */
833                 if (sock->type == SOCK_DGRAM || s_state == TCP_ESTABLISHED)
834                         nr_fds = atomic_read(&u->scm_stat.nr_fds);
835                 else if (s_state == TCP_LISTEN)
836                         nr_fds = unix_count_nr_fds(sk);
837
838                 seq_printf(m, "scm_fds: %u\n", nr_fds);
839         }
840 }
841 #else
842 #define unix_show_fdinfo NULL
843 #endif
844
845 static const struct proto_ops unix_stream_ops = {
846         .family =       PF_UNIX,
847         .owner =        THIS_MODULE,
848         .release =      unix_release,
849         .bind =         unix_bind,
850         .connect =      unix_stream_connect,
851         .socketpair =   unix_socketpair,
852         .accept =       unix_accept,
853         .getname =      unix_getname,
854         .poll =         unix_poll,
855         .ioctl =        unix_ioctl,
856 #ifdef CONFIG_COMPAT
857         .compat_ioctl = unix_compat_ioctl,
858 #endif
859         .listen =       unix_listen,
860         .shutdown =     unix_shutdown,
861         .sendmsg =      unix_stream_sendmsg,
862         .recvmsg =      unix_stream_recvmsg,
863         .read_skb =     unix_stream_read_skb,
864         .mmap =         sock_no_mmap,
865         .splice_read =  unix_stream_splice_read,
866         .set_peek_off = unix_set_peek_off,
867         .show_fdinfo =  unix_show_fdinfo,
868 };
869
870 static const struct proto_ops unix_dgram_ops = {
871         .family =       PF_UNIX,
872         .owner =        THIS_MODULE,
873         .release =      unix_release,
874         .bind =         unix_bind,
875         .connect =      unix_dgram_connect,
876         .socketpair =   unix_socketpair,
877         .accept =       sock_no_accept,
878         .getname =      unix_getname,
879         .poll =         unix_dgram_poll,
880         .ioctl =        unix_ioctl,
881 #ifdef CONFIG_COMPAT
882         .compat_ioctl = unix_compat_ioctl,
883 #endif
884         .listen =       sock_no_listen,
885         .shutdown =     unix_shutdown,
886         .sendmsg =      unix_dgram_sendmsg,
887         .read_skb =     unix_read_skb,
888         .recvmsg =      unix_dgram_recvmsg,
889         .mmap =         sock_no_mmap,
890         .set_peek_off = unix_set_peek_off,
891         .show_fdinfo =  unix_show_fdinfo,
892 };
893
894 static const struct proto_ops unix_seqpacket_ops = {
895         .family =       PF_UNIX,
896         .owner =        THIS_MODULE,
897         .release =      unix_release,
898         .bind =         unix_bind,
899         .connect =      unix_stream_connect,
900         .socketpair =   unix_socketpair,
901         .accept =       unix_accept,
902         .getname =      unix_getname,
903         .poll =         unix_dgram_poll,
904         .ioctl =        unix_ioctl,
905 #ifdef CONFIG_COMPAT
906         .compat_ioctl = unix_compat_ioctl,
907 #endif
908         .listen =       unix_listen,
909         .shutdown =     unix_shutdown,
910         .sendmsg =      unix_seqpacket_sendmsg,
911         .recvmsg =      unix_seqpacket_recvmsg,
912         .mmap =         sock_no_mmap,
913         .set_peek_off = unix_set_peek_off,
914         .show_fdinfo =  unix_show_fdinfo,
915 };
916
917 static void unix_close(struct sock *sk, long timeout)
918 {
919         /* Nothing to do here, unix socket does not need a ->close().
920          * This is merely for sockmap.
921          */
922 }
923
924 static void unix_unhash(struct sock *sk)
925 {
926         /* Nothing to do here, unix socket does not need a ->unhash().
927          * This is merely for sockmap.
928          */
929 }
930
931 static bool unix_bpf_bypass_getsockopt(int level, int optname)
932 {
933         if (level == SOL_SOCKET) {
934                 switch (optname) {
935                 case SO_PEERPIDFD:
936                         return true;
937                 default:
938                         return false;
939                 }
940         }
941
942         return false;
943 }
944
945 struct proto unix_dgram_proto = {
946         .name                   = "UNIX",
947         .owner                  = THIS_MODULE,
948         .obj_size               = sizeof(struct unix_sock),
949         .close                  = unix_close,
950         .bpf_bypass_getsockopt  = unix_bpf_bypass_getsockopt,
951 #ifdef CONFIG_BPF_SYSCALL
952         .psock_update_sk_prot   = unix_dgram_bpf_update_proto,
953 #endif
954 };
955
956 struct proto unix_stream_proto = {
957         .name                   = "UNIX-STREAM",
958         .owner                  = THIS_MODULE,
959         .obj_size               = sizeof(struct unix_sock),
960         .close                  = unix_close,
961         .unhash                 = unix_unhash,
962         .bpf_bypass_getsockopt  = unix_bpf_bypass_getsockopt,
963 #ifdef CONFIG_BPF_SYSCALL
964         .psock_update_sk_prot   = unix_stream_bpf_update_proto,
965 #endif
966 };
967
968 static struct sock *unix_create1(struct net *net, struct socket *sock, int kern, int type)
969 {
970         struct unix_sock *u;
971         struct sock *sk;
972         int err;
973
974         atomic_long_inc(&unix_nr_socks);
975         if (atomic_long_read(&unix_nr_socks) > 2 * get_max_files()) {
976                 err = -ENFILE;
977                 goto err;
978         }
979
980         if (type == SOCK_STREAM)
981                 sk = sk_alloc(net, PF_UNIX, GFP_KERNEL, &unix_stream_proto, kern);
982         else /*dgram and  seqpacket */
983                 sk = sk_alloc(net, PF_UNIX, GFP_KERNEL, &unix_dgram_proto, kern);
984
985         if (!sk) {
986                 err = -ENOMEM;
987                 goto err;
988         }
989
990         sock_init_data(sock, sk);
991
992         sk->sk_hash             = unix_unbound_hash(sk);
993         sk->sk_allocation       = GFP_KERNEL_ACCOUNT;
994         sk->sk_write_space      = unix_write_space;
995         sk->sk_max_ack_backlog  = net->unx.sysctl_max_dgram_qlen;
996         sk->sk_destruct         = unix_sock_destructor;
997         u         = unix_sk(sk);
998         u->path.dentry = NULL;
999         u->path.mnt = NULL;
1000         spin_lock_init(&u->lock);
1001         atomic_long_set(&u->inflight, 0);
1002         INIT_LIST_HEAD(&u->link);
1003         mutex_init(&u->iolock); /* single task reading lock */
1004         mutex_init(&u->bindlock); /* single task binding lock */
1005         init_waitqueue_head(&u->peer_wait);
1006         init_waitqueue_func_entry(&u->peer_wake, unix_dgram_peer_wake_relay);
1007         memset(&u->scm_stat, 0, sizeof(struct scm_stat));
1008         unix_insert_unbound_socket(net, sk);
1009
1010         sock_prot_inuse_add(net, sk->sk_prot, 1);
1011
1012         return sk;
1013
1014 err:
1015         atomic_long_dec(&unix_nr_socks);
1016         return ERR_PTR(err);
1017 }
1018
1019 static int unix_create(struct net *net, struct socket *sock, int protocol,
1020                        int kern)
1021 {
1022         struct sock *sk;
1023
1024         if (protocol && protocol != PF_UNIX)
1025                 return -EPROTONOSUPPORT;
1026
1027         sock->state = SS_UNCONNECTED;
1028
1029         switch (sock->type) {
1030         case SOCK_STREAM:
1031                 sock->ops = &unix_stream_ops;
1032                 break;
1033                 /*
1034                  *      Believe it or not BSD has AF_UNIX, SOCK_RAW though
1035                  *      nothing uses it.
1036                  */
1037         case SOCK_RAW:
1038                 sock->type = SOCK_DGRAM;
1039                 fallthrough;
1040         case SOCK_DGRAM:
1041                 sock->ops = &unix_dgram_ops;
1042                 break;
1043         case SOCK_SEQPACKET:
1044                 sock->ops = &unix_seqpacket_ops;
1045                 break;
1046         default:
1047                 return -ESOCKTNOSUPPORT;
1048         }
1049
1050         sk = unix_create1(net, sock, kern, sock->type);
1051         if (IS_ERR(sk))
1052                 return PTR_ERR(sk);
1053
1054         return 0;
1055 }
1056
1057 static int unix_release(struct socket *sock)
1058 {
1059         struct sock *sk = sock->sk;
1060
1061         if (!sk)
1062                 return 0;
1063
1064         sk->sk_prot->close(sk, 0);
1065         unix_release_sock(sk, 0);
1066         sock->sk = NULL;
1067
1068         return 0;
1069 }
1070
1071 static struct sock *unix_find_bsd(struct sockaddr_un *sunaddr, int addr_len,
1072                                   int type)
1073 {
1074         struct inode *inode;
1075         struct path path;
1076         struct sock *sk;
1077         int err;
1078
1079         unix_mkname_bsd(sunaddr, addr_len);
1080         err = kern_path(sunaddr->sun_path, LOOKUP_FOLLOW, &path);
1081         if (err)
1082                 goto fail;
1083
1084         err = path_permission(&path, MAY_WRITE);
1085         if (err)
1086                 goto path_put;
1087
1088         err = -ECONNREFUSED;
1089         inode = d_backing_inode(path.dentry);
1090         if (!S_ISSOCK(inode->i_mode))
1091                 goto path_put;
1092
1093         sk = unix_find_socket_byinode(inode);
1094         if (!sk)
1095                 goto path_put;
1096
1097         err = -EPROTOTYPE;
1098         if (sk->sk_type == type)
1099                 touch_atime(&path);
1100         else
1101                 goto sock_put;
1102
1103         path_put(&path);
1104
1105         return sk;
1106
1107 sock_put:
1108         sock_put(sk);
1109 path_put:
1110         path_put(&path);
1111 fail:
1112         return ERR_PTR(err);
1113 }
1114
1115 static struct sock *unix_find_abstract(struct net *net,
1116                                        struct sockaddr_un *sunaddr,
1117                                        int addr_len, int type)
1118 {
1119         unsigned int hash = unix_abstract_hash(sunaddr, addr_len, type);
1120         struct dentry *dentry;
1121         struct sock *sk;
1122
1123         sk = unix_find_socket_byname(net, sunaddr, addr_len, hash);
1124         if (!sk)
1125                 return ERR_PTR(-ECONNREFUSED);
1126
1127         dentry = unix_sk(sk)->path.dentry;
1128         if (dentry)
1129                 touch_atime(&unix_sk(sk)->path);
1130
1131         return sk;
1132 }
1133
1134 static struct sock *unix_find_other(struct net *net,
1135                                     struct sockaddr_un *sunaddr,
1136                                     int addr_len, int type)
1137 {
1138         struct sock *sk;
1139
1140         if (sunaddr->sun_path[0])
1141                 sk = unix_find_bsd(sunaddr, addr_len, type);
1142         else
1143                 sk = unix_find_abstract(net, sunaddr, addr_len, type);
1144
1145         return sk;
1146 }
1147
1148 static int unix_autobind(struct sock *sk)
1149 {
1150         unsigned int new_hash, old_hash = sk->sk_hash;
1151         struct unix_sock *u = unix_sk(sk);
1152         struct net *net = sock_net(sk);
1153         struct unix_address *addr;
1154         u32 lastnum, ordernum;
1155         int err;
1156
1157         err = mutex_lock_interruptible(&u->bindlock);
1158         if (err)
1159                 return err;
1160
1161         if (u->addr)
1162                 goto out;
1163
1164         err = -ENOMEM;
1165         addr = kzalloc(sizeof(*addr) +
1166                        offsetof(struct sockaddr_un, sun_path) + 16, GFP_KERNEL);
1167         if (!addr)
1168                 goto out;
1169
1170         addr->len = offsetof(struct sockaddr_un, sun_path) + 6;
1171         addr->name->sun_family = AF_UNIX;
1172         refcount_set(&addr->refcnt, 1);
1173
1174         ordernum = get_random_u32();
1175         lastnum = ordernum & 0xFFFFF;
1176 retry:
1177         ordernum = (ordernum + 1) & 0xFFFFF;
1178         sprintf(addr->name->sun_path + 1, "%05x", ordernum);
1179
1180         new_hash = unix_abstract_hash(addr->name, addr->len, sk->sk_type);
1181         unix_table_double_lock(net, old_hash, new_hash);
1182
1183         if (__unix_find_socket_byname(net, addr->name, addr->len, new_hash)) {
1184                 unix_table_double_unlock(net, old_hash, new_hash);
1185
1186                 /* __unix_find_socket_byname() may take long time if many names
1187                  * are already in use.
1188                  */
1189                 cond_resched();
1190
1191                 if (ordernum == lastnum) {
1192                         /* Give up if all names seems to be in use. */
1193                         err = -ENOSPC;
1194                         unix_release_addr(addr);
1195                         goto out;
1196                 }
1197
1198                 goto retry;
1199         }
1200
1201         __unix_set_addr_hash(net, sk, addr, new_hash);
1202         unix_table_double_unlock(net, old_hash, new_hash);
1203         err = 0;
1204
1205 out:    mutex_unlock(&u->bindlock);
1206         return err;
1207 }
1208
1209 static int unix_bind_bsd(struct sock *sk, struct sockaddr_un *sunaddr,
1210                          int addr_len)
1211 {
1212         umode_t mode = S_IFSOCK |
1213                (SOCK_INODE(sk->sk_socket)->i_mode & ~current_umask());
1214         unsigned int new_hash, old_hash = sk->sk_hash;
1215         struct unix_sock *u = unix_sk(sk);
1216         struct net *net = sock_net(sk);
1217         struct mnt_idmap *idmap;
1218         struct unix_address *addr;
1219         struct dentry *dentry;
1220         struct path parent;
1221         int err;
1222
1223         addr_len = unix_mkname_bsd(sunaddr, addr_len);
1224         addr = unix_create_addr(sunaddr, addr_len);
1225         if (!addr)
1226                 return -ENOMEM;
1227
1228         /*
1229          * Get the parent directory, calculate the hash for last
1230          * component.
1231          */
1232         dentry = kern_path_create(AT_FDCWD, addr->name->sun_path, &parent, 0);
1233         if (IS_ERR(dentry)) {
1234                 err = PTR_ERR(dentry);
1235                 goto out;
1236         }
1237
1238         /*
1239          * All right, let's create it.
1240          */
1241         idmap = mnt_idmap(parent.mnt);
1242         err = security_path_mknod(&parent, dentry, mode, 0);
1243         if (!err)
1244                 err = vfs_mknod(idmap, d_inode(parent.dentry), dentry, mode, 0);
1245         if (err)
1246                 goto out_path;
1247         err = mutex_lock_interruptible(&u->bindlock);
1248         if (err)
1249                 goto out_unlink;
1250         if (u->addr)
1251                 goto out_unlock;
1252
1253         new_hash = unix_bsd_hash(d_backing_inode(dentry));
1254         unix_table_double_lock(net, old_hash, new_hash);
1255         u->path.mnt = mntget(parent.mnt);
1256         u->path.dentry = dget(dentry);
1257         __unix_set_addr_hash(net, sk, addr, new_hash);
1258         unix_table_double_unlock(net, old_hash, new_hash);
1259         unix_insert_bsd_socket(sk);
1260         mutex_unlock(&u->bindlock);
1261         done_path_create(&parent, dentry);
1262         return 0;
1263
1264 out_unlock:
1265         mutex_unlock(&u->bindlock);
1266         err = -EINVAL;
1267 out_unlink:
1268         /* failed after successful mknod?  unlink what we'd created... */
1269         vfs_unlink(idmap, d_inode(parent.dentry), dentry, NULL);
1270 out_path:
1271         done_path_create(&parent, dentry);
1272 out:
1273         unix_release_addr(addr);
1274         return err == -EEXIST ? -EADDRINUSE : err;
1275 }
1276
1277 static int unix_bind_abstract(struct sock *sk, struct sockaddr_un *sunaddr,
1278                               int addr_len)
1279 {
1280         unsigned int new_hash, old_hash = sk->sk_hash;
1281         struct unix_sock *u = unix_sk(sk);
1282         struct net *net = sock_net(sk);
1283         struct unix_address *addr;
1284         int err;
1285
1286         addr = unix_create_addr(sunaddr, addr_len);
1287         if (!addr)
1288                 return -ENOMEM;
1289
1290         err = mutex_lock_interruptible(&u->bindlock);
1291         if (err)
1292                 goto out;
1293
1294         if (u->addr) {
1295                 err = -EINVAL;
1296                 goto out_mutex;
1297         }
1298
1299         new_hash = unix_abstract_hash(addr->name, addr->len, sk->sk_type);
1300         unix_table_double_lock(net, old_hash, new_hash);
1301
1302         if (__unix_find_socket_byname(net, addr->name, addr->len, new_hash))
1303                 goto out_spin;
1304
1305         __unix_set_addr_hash(net, sk, addr, new_hash);
1306         unix_table_double_unlock(net, old_hash, new_hash);
1307         mutex_unlock(&u->bindlock);
1308         return 0;
1309
1310 out_spin:
1311         unix_table_double_unlock(net, old_hash, new_hash);
1312         err = -EADDRINUSE;
1313 out_mutex:
1314         mutex_unlock(&u->bindlock);
1315 out:
1316         unix_release_addr(addr);
1317         return err;
1318 }
1319
1320 static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1321 {
1322         struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr;
1323         struct sock *sk = sock->sk;
1324         int err;
1325
1326         if (addr_len == offsetof(struct sockaddr_un, sun_path) &&
1327             sunaddr->sun_family == AF_UNIX)
1328                 return unix_autobind(sk);
1329
1330         err = unix_validate_addr(sunaddr, addr_len);
1331         if (err)
1332                 return err;
1333
1334         if (sunaddr->sun_path[0])
1335                 err = unix_bind_bsd(sk, sunaddr, addr_len);
1336         else
1337                 err = unix_bind_abstract(sk, sunaddr, addr_len);
1338
1339         return err;
1340 }
1341
1342 static void unix_state_double_lock(struct sock *sk1, struct sock *sk2)
1343 {
1344         if (unlikely(sk1 == sk2) || !sk2) {
1345                 unix_state_lock(sk1);
1346                 return;
1347         }
1348         if (sk1 < sk2) {
1349                 unix_state_lock(sk1);
1350                 unix_state_lock_nested(sk2);
1351         } else {
1352                 unix_state_lock(sk2);
1353                 unix_state_lock_nested(sk1);
1354         }
1355 }
1356
1357 static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2)
1358 {
1359         if (unlikely(sk1 == sk2) || !sk2) {
1360                 unix_state_unlock(sk1);
1361                 return;
1362         }
1363         unix_state_unlock(sk1);
1364         unix_state_unlock(sk2);
1365 }
1366
1367 static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr,
1368                               int alen, int flags)
1369 {
1370         struct sockaddr_un *sunaddr = (struct sockaddr_un *)addr;
1371         struct sock *sk = sock->sk;
1372         struct sock *other;
1373         int err;
1374
1375         err = -EINVAL;
1376         if (alen < offsetofend(struct sockaddr, sa_family))
1377                 goto out;
1378
1379         if (addr->sa_family != AF_UNSPEC) {
1380                 err = unix_validate_addr(sunaddr, alen);
1381                 if (err)
1382                         goto out;
1383
1384                 if ((test_bit(SOCK_PASSCRED, &sock->flags) ||
1385                      test_bit(SOCK_PASSPIDFD, &sock->flags)) &&
1386                     !unix_sk(sk)->addr) {
1387                         err = unix_autobind(sk);
1388                         if (err)
1389                                 goto out;
1390                 }
1391
1392 restart:
1393                 other = unix_find_other(sock_net(sk), sunaddr, alen, sock->type);
1394                 if (IS_ERR(other)) {
1395                         err = PTR_ERR(other);
1396                         goto out;
1397                 }
1398
1399                 unix_state_double_lock(sk, other);
1400
1401                 /* Apparently VFS overslept socket death. Retry. */
1402                 if (sock_flag(other, SOCK_DEAD)) {
1403                         unix_state_double_unlock(sk, other);
1404                         sock_put(other);
1405                         goto restart;
1406                 }
1407
1408                 err = -EPERM;
1409                 if (!unix_may_send(sk, other))
1410                         goto out_unlock;
1411
1412                 err = security_unix_may_send(sk->sk_socket, other->sk_socket);
1413                 if (err)
1414                         goto out_unlock;
1415
1416                 sk->sk_state = other->sk_state = TCP_ESTABLISHED;
1417         } else {
1418                 /*
1419                  *      1003.1g breaking connected state with AF_UNSPEC
1420                  */
1421                 other = NULL;
1422                 unix_state_double_lock(sk, other);
1423         }
1424
1425         /*
1426          * If it was connected, reconnect.
1427          */
1428         if (unix_peer(sk)) {
1429                 struct sock *old_peer = unix_peer(sk);
1430
1431                 unix_peer(sk) = other;
1432                 if (!other)
1433                         sk->sk_state = TCP_CLOSE;
1434                 unix_dgram_peer_wake_disconnect_wakeup(sk, old_peer);
1435
1436                 unix_state_double_unlock(sk, other);
1437
1438                 if (other != old_peer)
1439                         unix_dgram_disconnected(sk, old_peer);
1440                 sock_put(old_peer);
1441         } else {
1442                 unix_peer(sk) = other;
1443                 unix_state_double_unlock(sk, other);
1444         }
1445
1446         return 0;
1447
1448 out_unlock:
1449         unix_state_double_unlock(sk, other);
1450         sock_put(other);
1451 out:
1452         return err;
1453 }
1454
1455 static long unix_wait_for_peer(struct sock *other, long timeo)
1456         __releases(&unix_sk(other)->lock)
1457 {
1458         struct unix_sock *u = unix_sk(other);
1459         int sched;
1460         DEFINE_WAIT(wait);
1461
1462         prepare_to_wait_exclusive(&u->peer_wait, &wait, TASK_INTERRUPTIBLE);
1463
1464         sched = !sock_flag(other, SOCK_DEAD) &&
1465                 !(other->sk_shutdown & RCV_SHUTDOWN) &&
1466                 unix_recvq_full_lockless(other);
1467
1468         unix_state_unlock(other);
1469
1470         if (sched)
1471                 timeo = schedule_timeout(timeo);
1472
1473         finish_wait(&u->peer_wait, &wait);
1474         return timeo;
1475 }
1476
1477 static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr,
1478                                int addr_len, int flags)
1479 {
1480         struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr;
1481         struct sock *sk = sock->sk, *newsk = NULL, *other = NULL;
1482         struct unix_sock *u = unix_sk(sk), *newu, *otheru;
1483         struct net *net = sock_net(sk);
1484         struct sk_buff *skb = NULL;
1485         long timeo;
1486         int err;
1487         int st;
1488
1489         err = unix_validate_addr(sunaddr, addr_len);
1490         if (err)
1491                 goto out;
1492
1493         if ((test_bit(SOCK_PASSCRED, &sock->flags) ||
1494              test_bit(SOCK_PASSPIDFD, &sock->flags)) && !u->addr) {
1495                 err = unix_autobind(sk);
1496                 if (err)
1497                         goto out;
1498         }
1499
1500         timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
1501
1502         /* First of all allocate resources.
1503            If we will make it after state is locked,
1504            we will have to recheck all again in any case.
1505          */
1506
1507         /* create new sock for complete connection */
1508         newsk = unix_create1(net, NULL, 0, sock->type);
1509         if (IS_ERR(newsk)) {
1510                 err = PTR_ERR(newsk);
1511                 newsk = NULL;
1512                 goto out;
1513         }
1514
1515         err = -ENOMEM;
1516
1517         /* Allocate skb for sending to listening sock */
1518         skb = sock_wmalloc(newsk, 1, 0, GFP_KERNEL);
1519         if (skb == NULL)
1520                 goto out;
1521
1522 restart:
1523         /*  Find listening sock. */
1524         other = unix_find_other(net, sunaddr, addr_len, sk->sk_type);
1525         if (IS_ERR(other)) {
1526                 err = PTR_ERR(other);
1527                 other = NULL;
1528                 goto out;
1529         }
1530
1531         /* Latch state of peer */
1532         unix_state_lock(other);
1533
1534         /* Apparently VFS overslept socket death. Retry. */
1535         if (sock_flag(other, SOCK_DEAD)) {
1536                 unix_state_unlock(other);
1537                 sock_put(other);
1538                 goto restart;
1539         }
1540
1541         err = -ECONNREFUSED;
1542         if (other->sk_state != TCP_LISTEN)
1543                 goto out_unlock;
1544         if (other->sk_shutdown & RCV_SHUTDOWN)
1545                 goto out_unlock;
1546
1547         if (unix_recvq_full(other)) {
1548                 err = -EAGAIN;
1549                 if (!timeo)
1550                         goto out_unlock;
1551
1552                 timeo = unix_wait_for_peer(other, timeo);
1553
1554                 err = sock_intr_errno(timeo);
1555                 if (signal_pending(current))
1556                         goto out;
1557                 sock_put(other);
1558                 goto restart;
1559         }
1560
1561         /* Latch our state.
1562
1563            It is tricky place. We need to grab our state lock and cannot
1564            drop lock on peer. It is dangerous because deadlock is
1565            possible. Connect to self case and simultaneous
1566            attempt to connect are eliminated by checking socket
1567            state. other is TCP_LISTEN, if sk is TCP_LISTEN we
1568            check this before attempt to grab lock.
1569
1570            Well, and we have to recheck the state after socket locked.
1571          */
1572         st = sk->sk_state;
1573
1574         switch (st) {
1575         case TCP_CLOSE:
1576                 /* This is ok... continue with connect */
1577                 break;
1578         case TCP_ESTABLISHED:
1579                 /* Socket is already connected */
1580                 err = -EISCONN;
1581                 goto out_unlock;
1582         default:
1583                 err = -EINVAL;
1584                 goto out_unlock;
1585         }
1586
1587         unix_state_lock_nested(sk);
1588
1589         if (sk->sk_state != st) {
1590                 unix_state_unlock(sk);
1591                 unix_state_unlock(other);
1592                 sock_put(other);
1593                 goto restart;
1594         }
1595
1596         err = security_unix_stream_connect(sk, other, newsk);
1597         if (err) {
1598                 unix_state_unlock(sk);
1599                 goto out_unlock;
1600         }
1601
1602         /* The way is open! Fastly set all the necessary fields... */
1603
1604         sock_hold(sk);
1605         unix_peer(newsk)        = sk;
1606         newsk->sk_state         = TCP_ESTABLISHED;
1607         newsk->sk_type          = sk->sk_type;
1608         init_peercred(newsk);
1609         newu = unix_sk(newsk);
1610         RCU_INIT_POINTER(newsk->sk_wq, &newu->peer_wq);
1611         otheru = unix_sk(other);
1612
1613         /* copy address information from listening to new sock
1614          *
1615          * The contents of *(otheru->addr) and otheru->path
1616          * are seen fully set up here, since we have found
1617          * otheru in hash under its lock.  Insertion into the
1618          * hash chain we'd found it in had been done in an
1619          * earlier critical area protected by the chain's lock,
1620          * the same one where we'd set *(otheru->addr) contents,
1621          * as well as otheru->path and otheru->addr itself.
1622          *
1623          * Using smp_store_release() here to set newu->addr
1624          * is enough to make those stores, as well as stores
1625          * to newu->path visible to anyone who gets newu->addr
1626          * by smp_load_acquire().  IOW, the same warranties
1627          * as for unix_sock instances bound in unix_bind() or
1628          * in unix_autobind().
1629          */
1630         if (otheru->path.dentry) {
1631                 path_get(&otheru->path);
1632                 newu->path = otheru->path;
1633         }
1634         refcount_inc(&otheru->addr->refcnt);
1635         smp_store_release(&newu->addr, otheru->addr);
1636
1637         /* Set credentials */
1638         copy_peercred(sk, other);
1639
1640         sock->state     = SS_CONNECTED;
1641         sk->sk_state    = TCP_ESTABLISHED;
1642         sock_hold(newsk);
1643
1644         smp_mb__after_atomic(); /* sock_hold() does an atomic_inc() */
1645         unix_peer(sk)   = newsk;
1646
1647         unix_state_unlock(sk);
1648
1649         /* take ten and send info to listening sock */
1650         spin_lock(&other->sk_receive_queue.lock);
1651         __skb_queue_tail(&other->sk_receive_queue, skb);
1652         spin_unlock(&other->sk_receive_queue.lock);
1653         unix_state_unlock(other);
1654         other->sk_data_ready(other);
1655         sock_put(other);
1656         return 0;
1657
1658 out_unlock:
1659         if (other)
1660                 unix_state_unlock(other);
1661
1662 out:
1663         kfree_skb(skb);
1664         if (newsk)
1665                 unix_release_sock(newsk, 0);
1666         if (other)
1667                 sock_put(other);
1668         return err;
1669 }
1670
1671 static int unix_socketpair(struct socket *socka, struct socket *sockb)
1672 {
1673         struct sock *ska = socka->sk, *skb = sockb->sk;
1674
1675         /* Join our sockets back to back */
1676         sock_hold(ska);
1677         sock_hold(skb);
1678         unix_peer(ska) = skb;
1679         unix_peer(skb) = ska;
1680         init_peercred(ska);
1681         init_peercred(skb);
1682
1683         ska->sk_state = TCP_ESTABLISHED;
1684         skb->sk_state = TCP_ESTABLISHED;
1685         socka->state  = SS_CONNECTED;
1686         sockb->state  = SS_CONNECTED;
1687         return 0;
1688 }
1689
1690 static void unix_sock_inherit_flags(const struct socket *old,
1691                                     struct socket *new)
1692 {
1693         if (test_bit(SOCK_PASSCRED, &old->flags))
1694                 set_bit(SOCK_PASSCRED, &new->flags);
1695         if (test_bit(SOCK_PASSPIDFD, &old->flags))
1696                 set_bit(SOCK_PASSPIDFD, &new->flags);
1697         if (test_bit(SOCK_PASSSEC, &old->flags))
1698                 set_bit(SOCK_PASSSEC, &new->flags);
1699 }
1700
1701 static int unix_accept(struct socket *sock, struct socket *newsock, int flags,
1702                        bool kern)
1703 {
1704         struct sock *sk = sock->sk;
1705         struct sock *tsk;
1706         struct sk_buff *skb;
1707         int err;
1708
1709         err = -EOPNOTSUPP;
1710         if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET)
1711                 goto out;
1712
1713         err = -EINVAL;
1714         if (sk->sk_state != TCP_LISTEN)
1715                 goto out;
1716
1717         /* If socket state is TCP_LISTEN it cannot change (for now...),
1718          * so that no locks are necessary.
1719          */
1720
1721         skb = skb_recv_datagram(sk, (flags & O_NONBLOCK) ? MSG_DONTWAIT : 0,
1722                                 &err);
1723         if (!skb) {
1724                 /* This means receive shutdown. */
1725                 if (err == 0)
1726                         err = -EINVAL;
1727                 goto out;
1728         }
1729
1730         tsk = skb->sk;
1731         skb_free_datagram(sk, skb);
1732         wake_up_interruptible(&unix_sk(sk)->peer_wait);
1733
1734         /* attach accepted sock to socket */
1735         unix_state_lock(tsk);
1736         newsock->state = SS_CONNECTED;
1737         unix_sock_inherit_flags(sock, newsock);
1738         sock_graft(tsk, newsock);
1739         unix_state_unlock(tsk);
1740         return 0;
1741
1742 out:
1743         return err;
1744 }
1745
1746
1747 static int unix_getname(struct socket *sock, struct sockaddr *uaddr, int peer)
1748 {
1749         struct sock *sk = sock->sk;
1750         struct unix_address *addr;
1751         DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr, uaddr);
1752         int err = 0;
1753
1754         if (peer) {
1755                 sk = unix_peer_get(sk);
1756
1757                 err = -ENOTCONN;
1758                 if (!sk)
1759                         goto out;
1760                 err = 0;
1761         } else {
1762                 sock_hold(sk);
1763         }
1764
1765         addr = smp_load_acquire(&unix_sk(sk)->addr);
1766         if (!addr) {
1767                 sunaddr->sun_family = AF_UNIX;
1768                 sunaddr->sun_path[0] = 0;
1769                 err = offsetof(struct sockaddr_un, sun_path);
1770         } else {
1771                 err = addr->len;
1772                 memcpy(sunaddr, addr->name, addr->len);
1773         }
1774         sock_put(sk);
1775 out:
1776         return err;
1777 }
1778
1779 static void unix_peek_fds(struct scm_cookie *scm, struct sk_buff *skb)
1780 {
1781         scm->fp = scm_fp_dup(UNIXCB(skb).fp);
1782
1783         /*
1784          * Garbage collection of unix sockets starts by selecting a set of
1785          * candidate sockets which have reference only from being in flight
1786          * (total_refs == inflight_refs).  This condition is checked once during
1787          * the candidate collection phase, and candidates are marked as such, so
1788          * that non-candidates can later be ignored.  While inflight_refs is
1789          * protected by unix_gc_lock, total_refs (file count) is not, hence this
1790          * is an instantaneous decision.
1791          *
1792          * Once a candidate, however, the socket must not be reinstalled into a
1793          * file descriptor while the garbage collection is in progress.
1794          *
1795          * If the above conditions are met, then the directed graph of
1796          * candidates (*) does not change while unix_gc_lock is held.
1797          *
1798          * Any operations that changes the file count through file descriptors
1799          * (dup, close, sendmsg) does not change the graph since candidates are
1800          * not installed in fds.
1801          *
1802          * Dequeing a candidate via recvmsg would install it into an fd, but
1803          * that takes unix_gc_lock to decrement the inflight count, so it's
1804          * serialized with garbage collection.
1805          *
1806          * MSG_PEEK is special in that it does not change the inflight count,
1807          * yet does install the socket into an fd.  The following lock/unlock
1808          * pair is to ensure serialization with garbage collection.  It must be
1809          * done between incrementing the file count and installing the file into
1810          * an fd.
1811          *
1812          * If garbage collection starts after the barrier provided by the
1813          * lock/unlock, then it will see the elevated refcount and not mark this
1814          * as a candidate.  If a garbage collection is already in progress
1815          * before the file count was incremented, then the lock/unlock pair will
1816          * ensure that garbage collection is finished before progressing to
1817          * installing the fd.
1818          *
1819          * (*) A -> B where B is on the queue of A or B is on the queue of C
1820          * which is on the queue of listening socket A.
1821          */
1822         spin_lock(&unix_gc_lock);
1823         spin_unlock(&unix_gc_lock);
1824 }
1825
1826 static int unix_scm_to_skb(struct scm_cookie *scm, struct sk_buff *skb, bool send_fds)
1827 {
1828         int err = 0;
1829
1830         UNIXCB(skb).pid  = get_pid(scm->pid);
1831         UNIXCB(skb).uid = scm->creds.uid;
1832         UNIXCB(skb).gid = scm->creds.gid;
1833         UNIXCB(skb).fp = NULL;
1834         unix_get_secdata(scm, skb);
1835         if (scm->fp && send_fds)
1836                 err = unix_attach_fds(scm, skb);
1837
1838         skb->destructor = unix_destruct_scm;
1839         return err;
1840 }
1841
1842 static bool unix_passcred_enabled(const struct socket *sock,
1843                                   const struct sock *other)
1844 {
1845         return test_bit(SOCK_PASSCRED, &sock->flags) ||
1846                test_bit(SOCK_PASSPIDFD, &sock->flags) ||
1847                !other->sk_socket ||
1848                test_bit(SOCK_PASSCRED, &other->sk_socket->flags) ||
1849                test_bit(SOCK_PASSPIDFD, &other->sk_socket->flags);
1850 }
1851
1852 /*
1853  * Some apps rely on write() giving SCM_CREDENTIALS
1854  * We include credentials if source or destination socket
1855  * asserted SOCK_PASSCRED.
1856  */
1857 static void maybe_add_creds(struct sk_buff *skb, const struct socket *sock,
1858                             const struct sock *other)
1859 {
1860         if (UNIXCB(skb).pid)
1861                 return;
1862         if (unix_passcred_enabled(sock, other)) {
1863                 UNIXCB(skb).pid  = get_pid(task_tgid(current));
1864                 current_uid_gid(&UNIXCB(skb).uid, &UNIXCB(skb).gid);
1865         }
1866 }
1867
1868 static bool unix_skb_scm_eq(struct sk_buff *skb,
1869                             struct scm_cookie *scm)
1870 {
1871         return UNIXCB(skb).pid == scm->pid &&
1872                uid_eq(UNIXCB(skb).uid, scm->creds.uid) &&
1873                gid_eq(UNIXCB(skb).gid, scm->creds.gid) &&
1874                unix_secdata_eq(scm, skb);
1875 }
1876
1877 static void scm_stat_add(struct sock *sk, struct sk_buff *skb)
1878 {
1879         struct scm_fp_list *fp = UNIXCB(skb).fp;
1880         struct unix_sock *u = unix_sk(sk);
1881
1882         if (unlikely(fp && fp->count))
1883                 atomic_add(fp->count, &u->scm_stat.nr_fds);
1884 }
1885
1886 static void scm_stat_del(struct sock *sk, struct sk_buff *skb)
1887 {
1888         struct scm_fp_list *fp = UNIXCB(skb).fp;
1889         struct unix_sock *u = unix_sk(sk);
1890
1891         if (unlikely(fp && fp->count))
1892                 atomic_sub(fp->count, &u->scm_stat.nr_fds);
1893 }
1894
1895 /*
1896  *      Send AF_UNIX data.
1897  */
1898
1899 static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
1900                               size_t len)
1901 {
1902         DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr, msg->msg_name);
1903         struct sock *sk = sock->sk, *other = NULL;
1904         struct unix_sock *u = unix_sk(sk);
1905         struct scm_cookie scm;
1906         struct sk_buff *skb;
1907         int data_len = 0;
1908         int sk_locked;
1909         long timeo;
1910         int err;
1911
1912         wait_for_unix_gc();
1913         err = scm_send(sock, msg, &scm, false);
1914         if (err < 0)
1915                 return err;
1916
1917         err = -EOPNOTSUPP;
1918         if (msg->msg_flags&MSG_OOB)
1919                 goto out;
1920
1921         if (msg->msg_namelen) {
1922                 err = unix_validate_addr(sunaddr, msg->msg_namelen);
1923                 if (err)
1924                         goto out;
1925         } else {
1926                 sunaddr = NULL;
1927                 err = -ENOTCONN;
1928                 other = unix_peer_get(sk);
1929                 if (!other)
1930                         goto out;
1931         }
1932
1933         if ((test_bit(SOCK_PASSCRED, &sock->flags) ||
1934              test_bit(SOCK_PASSPIDFD, &sock->flags)) && !u->addr) {
1935                 err = unix_autobind(sk);
1936                 if (err)
1937                         goto out;
1938         }
1939
1940         err = -EMSGSIZE;
1941         if (len > sk->sk_sndbuf - 32)
1942                 goto out;
1943
1944         if (len > SKB_MAX_ALLOC) {
1945                 data_len = min_t(size_t,
1946                                  len - SKB_MAX_ALLOC,
1947                                  MAX_SKB_FRAGS * PAGE_SIZE);
1948                 data_len = PAGE_ALIGN(data_len);
1949
1950                 BUILD_BUG_ON(SKB_MAX_ALLOC < PAGE_SIZE);
1951         }
1952
1953         skb = sock_alloc_send_pskb(sk, len - data_len, data_len,
1954                                    msg->msg_flags & MSG_DONTWAIT, &err,
1955                                    PAGE_ALLOC_COSTLY_ORDER);
1956         if (skb == NULL)
1957                 goto out;
1958
1959         err = unix_scm_to_skb(&scm, skb, true);
1960         if (err < 0)
1961                 goto out_free;
1962
1963         skb_put(skb, len - data_len);
1964         skb->data_len = data_len;
1965         skb->len = len;
1966         err = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, len);
1967         if (err)
1968                 goto out_free;
1969
1970         timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
1971
1972 restart:
1973         if (!other) {
1974                 err = -ECONNRESET;
1975                 if (sunaddr == NULL)
1976                         goto out_free;
1977
1978                 other = unix_find_other(sock_net(sk), sunaddr, msg->msg_namelen,
1979                                         sk->sk_type);
1980                 if (IS_ERR(other)) {
1981                         err = PTR_ERR(other);
1982                         other = NULL;
1983                         goto out_free;
1984                 }
1985         }
1986
1987         if (sk_filter(other, skb) < 0) {
1988                 /* Toss the packet but do not return any error to the sender */
1989                 err = len;
1990                 goto out_free;
1991         }
1992
1993         sk_locked = 0;
1994         unix_state_lock(other);
1995 restart_locked:
1996         err = -EPERM;
1997         if (!unix_may_send(sk, other))
1998                 goto out_unlock;
1999
2000         if (unlikely(sock_flag(other, SOCK_DEAD))) {
2001                 /*
2002                  *      Check with 1003.1g - what should
2003                  *      datagram error
2004                  */
2005                 unix_state_unlock(other);
2006                 sock_put(other);
2007
2008                 if (!sk_locked)
2009                         unix_state_lock(sk);
2010
2011                 err = 0;
2012                 if (sk->sk_type == SOCK_SEQPACKET) {
2013                         /* We are here only when racing with unix_release_sock()
2014                          * is clearing @other. Never change state to TCP_CLOSE
2015                          * unlike SOCK_DGRAM wants.
2016                          */
2017                         unix_state_unlock(sk);
2018                         err = -EPIPE;
2019                 } else if (unix_peer(sk) == other) {
2020                         unix_peer(sk) = NULL;
2021                         unix_dgram_peer_wake_disconnect_wakeup(sk, other);
2022
2023                         sk->sk_state = TCP_CLOSE;
2024                         unix_state_unlock(sk);
2025
2026                         unix_dgram_disconnected(sk, other);
2027                         sock_put(other);
2028                         err = -ECONNREFUSED;
2029                 } else {
2030                         unix_state_unlock(sk);
2031                 }
2032
2033                 other = NULL;
2034                 if (err)
2035                         goto out_free;
2036                 goto restart;
2037         }
2038
2039         err = -EPIPE;
2040         if (other->sk_shutdown & RCV_SHUTDOWN)
2041                 goto out_unlock;
2042
2043         if (sk->sk_type != SOCK_SEQPACKET) {
2044                 err = security_unix_may_send(sk->sk_socket, other->sk_socket);
2045                 if (err)
2046                         goto out_unlock;
2047         }
2048
2049         /* other == sk && unix_peer(other) != sk if
2050          * - unix_peer(sk) == NULL, destination address bound to sk
2051          * - unix_peer(sk) == sk by time of get but disconnected before lock
2052          */
2053         if (other != sk &&
2054             unlikely(unix_peer(other) != sk &&
2055             unix_recvq_full_lockless(other))) {
2056                 if (timeo) {
2057                         timeo = unix_wait_for_peer(other, timeo);
2058
2059                         err = sock_intr_errno(timeo);
2060                         if (signal_pending(current))
2061                                 goto out_free;
2062
2063                         goto restart;
2064                 }
2065
2066                 if (!sk_locked) {
2067                         unix_state_unlock(other);
2068                         unix_state_double_lock(sk, other);
2069                 }
2070
2071                 if (unix_peer(sk) != other ||
2072                     unix_dgram_peer_wake_me(sk, other)) {
2073                         err = -EAGAIN;
2074                         sk_locked = 1;
2075                         goto out_unlock;
2076                 }
2077
2078                 if (!sk_locked) {
2079                         sk_locked = 1;
2080                         goto restart_locked;
2081                 }
2082         }
2083
2084         if (unlikely(sk_locked))
2085                 unix_state_unlock(sk);
2086
2087         if (sock_flag(other, SOCK_RCVTSTAMP))
2088                 __net_timestamp(skb);
2089         maybe_add_creds(skb, sock, other);
2090         scm_stat_add(other, skb);
2091         skb_queue_tail(&other->sk_receive_queue, skb);
2092         unix_state_unlock(other);
2093         other->sk_data_ready(other);
2094         sock_put(other);
2095         scm_destroy(&scm);
2096         return len;
2097
2098 out_unlock:
2099         if (sk_locked)
2100                 unix_state_unlock(sk);
2101         unix_state_unlock(other);
2102 out_free:
2103         kfree_skb(skb);
2104 out:
2105         if (other)
2106                 sock_put(other);
2107         scm_destroy(&scm);
2108         return err;
2109 }
2110
2111 /* We use paged skbs for stream sockets, and limit occupancy to 32768
2112  * bytes, and a minimum of a full page.
2113  */
2114 #define UNIX_SKB_FRAGS_SZ (PAGE_SIZE << get_order(32768))
2115
2116 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
2117 static int queue_oob(struct socket *sock, struct msghdr *msg, struct sock *other,
2118                      struct scm_cookie *scm, bool fds_sent)
2119 {
2120         struct unix_sock *ousk = unix_sk(other);
2121         struct sk_buff *skb;
2122         int err = 0;
2123
2124         skb = sock_alloc_send_skb(sock->sk, 1, msg->msg_flags & MSG_DONTWAIT, &err);
2125
2126         if (!skb)
2127                 return err;
2128
2129         err = unix_scm_to_skb(scm, skb, !fds_sent);
2130         if (err < 0) {
2131                 kfree_skb(skb);
2132                 return err;
2133         }
2134         skb_put(skb, 1);
2135         err = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, 1);
2136
2137         if (err) {
2138                 kfree_skb(skb);
2139                 return err;
2140         }
2141
2142         unix_state_lock(other);
2143
2144         if (sock_flag(other, SOCK_DEAD) ||
2145             (other->sk_shutdown & RCV_SHUTDOWN)) {
2146                 unix_state_unlock(other);
2147                 kfree_skb(skb);
2148                 return -EPIPE;
2149         }
2150
2151         maybe_add_creds(skb, sock, other);
2152         skb_get(skb);
2153
2154         if (ousk->oob_skb)
2155                 consume_skb(ousk->oob_skb);
2156
2157         WRITE_ONCE(ousk->oob_skb, skb);
2158
2159         scm_stat_add(other, skb);
2160         skb_queue_tail(&other->sk_receive_queue, skb);
2161         sk_send_sigurg(other);
2162         unix_state_unlock(other);
2163         other->sk_data_ready(other);
2164
2165         return err;
2166 }
2167 #endif
2168
2169 static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg,
2170                                size_t len)
2171 {
2172         struct sock *sk = sock->sk;
2173         struct sock *other = NULL;
2174         int err, size;
2175         struct sk_buff *skb;
2176         int sent = 0;
2177         struct scm_cookie scm;
2178         bool fds_sent = false;
2179         int data_len;
2180
2181         wait_for_unix_gc();
2182         err = scm_send(sock, msg, &scm, false);
2183         if (err < 0)
2184                 return err;
2185
2186         err = -EOPNOTSUPP;
2187         if (msg->msg_flags & MSG_OOB) {
2188 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
2189                 if (len)
2190                         len--;
2191                 else
2192 #endif
2193                         goto out_err;
2194         }
2195
2196         if (msg->msg_namelen) {
2197                 err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP;
2198                 goto out_err;
2199         } else {
2200                 err = -ENOTCONN;
2201                 other = unix_peer(sk);
2202                 if (!other)
2203                         goto out_err;
2204         }
2205
2206         if (sk->sk_shutdown & SEND_SHUTDOWN)
2207                 goto pipe_err;
2208
2209         while (sent < len) {
2210                 size = len - sent;
2211
2212                 if (unlikely(msg->msg_flags & MSG_SPLICE_PAGES)) {
2213                         skb = sock_alloc_send_pskb(sk, 0, 0,
2214                                                    msg->msg_flags & MSG_DONTWAIT,
2215                                                    &err, 0);
2216                 } else {
2217                         /* Keep two messages in the pipe so it schedules better */
2218                         size = min_t(int, size, (sk->sk_sndbuf >> 1) - 64);
2219
2220                         /* allow fallback to order-0 allocations */
2221                         size = min_t(int, size, SKB_MAX_HEAD(0) + UNIX_SKB_FRAGS_SZ);
2222
2223                         data_len = max_t(int, 0, size - SKB_MAX_HEAD(0));
2224
2225                         data_len = min_t(size_t, size, PAGE_ALIGN(data_len));
2226
2227                         skb = sock_alloc_send_pskb(sk, size - data_len, data_len,
2228                                                    msg->msg_flags & MSG_DONTWAIT, &err,
2229                                                    get_order(UNIX_SKB_FRAGS_SZ));
2230                 }
2231                 if (!skb)
2232                         goto out_err;
2233
2234                 /* Only send the fds in the first buffer */
2235                 err = unix_scm_to_skb(&scm, skb, !fds_sent);
2236                 if (err < 0) {
2237                         kfree_skb(skb);
2238                         goto out_err;
2239                 }
2240                 fds_sent = true;
2241
2242                 if (unlikely(msg->msg_flags & MSG_SPLICE_PAGES)) {
2243                         err = skb_splice_from_iter(skb, &msg->msg_iter, size,
2244                                                    sk->sk_allocation);
2245                         if (err < 0) {
2246                                 kfree_skb(skb);
2247                                 goto out_err;
2248                         }
2249                         size = err;
2250                         refcount_add(size, &sk->sk_wmem_alloc);
2251                 } else {
2252                         skb_put(skb, size - data_len);
2253                         skb->data_len = data_len;
2254                         skb->len = size;
2255                         err = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, size);
2256                         if (err) {
2257                                 kfree_skb(skb);
2258                                 goto out_err;
2259                         }
2260                 }
2261
2262                 unix_state_lock(other);
2263
2264                 if (sock_flag(other, SOCK_DEAD) ||
2265                     (other->sk_shutdown & RCV_SHUTDOWN))
2266                         goto pipe_err_free;
2267
2268                 maybe_add_creds(skb, sock, other);
2269                 scm_stat_add(other, skb);
2270                 skb_queue_tail(&other->sk_receive_queue, skb);
2271                 unix_state_unlock(other);
2272                 other->sk_data_ready(other);
2273                 sent += size;
2274         }
2275
2276 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
2277         if (msg->msg_flags & MSG_OOB) {
2278                 err = queue_oob(sock, msg, other, &scm, fds_sent);
2279                 if (err)
2280                         goto out_err;
2281                 sent++;
2282         }
2283 #endif
2284
2285         scm_destroy(&scm);
2286
2287         return sent;
2288
2289 pipe_err_free:
2290         unix_state_unlock(other);
2291         kfree_skb(skb);
2292 pipe_err:
2293         if (sent == 0 && !(msg->msg_flags&MSG_NOSIGNAL))
2294                 send_sig(SIGPIPE, current, 0);
2295         err = -EPIPE;
2296 out_err:
2297         scm_destroy(&scm);
2298         return sent ? : err;
2299 }
2300
2301 static int unix_seqpacket_sendmsg(struct socket *sock, struct msghdr *msg,
2302                                   size_t len)
2303 {
2304         int err;
2305         struct sock *sk = sock->sk;
2306
2307         err = sock_error(sk);
2308         if (err)
2309                 return err;
2310
2311         if (sk->sk_state != TCP_ESTABLISHED)
2312                 return -ENOTCONN;
2313
2314         if (msg->msg_namelen)
2315                 msg->msg_namelen = 0;
2316
2317         return unix_dgram_sendmsg(sock, msg, len);
2318 }
2319
2320 static int unix_seqpacket_recvmsg(struct socket *sock, struct msghdr *msg,
2321                                   size_t size, int flags)
2322 {
2323         struct sock *sk = sock->sk;
2324
2325         if (sk->sk_state != TCP_ESTABLISHED)
2326                 return -ENOTCONN;
2327
2328         return unix_dgram_recvmsg(sock, msg, size, flags);
2329 }
2330
2331 static void unix_copy_addr(struct msghdr *msg, struct sock *sk)
2332 {
2333         struct unix_address *addr = smp_load_acquire(&unix_sk(sk)->addr);
2334
2335         if (addr) {
2336                 msg->msg_namelen = addr->len;
2337                 memcpy(msg->msg_name, addr->name, addr->len);
2338         }
2339 }
2340
2341 int __unix_dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t size,
2342                          int flags)
2343 {
2344         struct scm_cookie scm;
2345         struct socket *sock = sk->sk_socket;
2346         struct unix_sock *u = unix_sk(sk);
2347         struct sk_buff *skb, *last;
2348         long timeo;
2349         int skip;
2350         int err;
2351
2352         err = -EOPNOTSUPP;
2353         if (flags&MSG_OOB)
2354                 goto out;
2355
2356         timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
2357
2358         do {
2359                 mutex_lock(&u->iolock);
2360
2361                 skip = sk_peek_offset(sk, flags);
2362                 skb = __skb_try_recv_datagram(sk, &sk->sk_receive_queue, flags,
2363                                               &skip, &err, &last);
2364                 if (skb) {
2365                         if (!(flags & MSG_PEEK))
2366                                 scm_stat_del(sk, skb);
2367                         break;
2368                 }
2369
2370                 mutex_unlock(&u->iolock);
2371
2372                 if (err != -EAGAIN)
2373                         break;
2374         } while (timeo &&
2375                  !__skb_wait_for_more_packets(sk, &sk->sk_receive_queue,
2376                                               &err, &timeo, last));
2377
2378         if (!skb) { /* implies iolock unlocked */
2379                 unix_state_lock(sk);
2380                 /* Signal EOF on disconnected non-blocking SEQPACKET socket. */
2381                 if (sk->sk_type == SOCK_SEQPACKET && err == -EAGAIN &&
2382                     (sk->sk_shutdown & RCV_SHUTDOWN))
2383                         err = 0;
2384                 unix_state_unlock(sk);
2385                 goto out;
2386         }
2387
2388         if (wq_has_sleeper(&u->peer_wait))
2389                 wake_up_interruptible_sync_poll(&u->peer_wait,
2390                                                 EPOLLOUT | EPOLLWRNORM |
2391                                                 EPOLLWRBAND);
2392
2393         if (msg->msg_name)
2394                 unix_copy_addr(msg, skb->sk);
2395
2396         if (size > skb->len - skip)
2397                 size = skb->len - skip;
2398         else if (size < skb->len - skip)
2399                 msg->msg_flags |= MSG_TRUNC;
2400
2401         err = skb_copy_datagram_msg(skb, skip, msg, size);
2402         if (err)
2403                 goto out_free;
2404
2405         if (sock_flag(sk, SOCK_RCVTSTAMP))
2406                 __sock_recv_timestamp(msg, sk, skb);
2407
2408         memset(&scm, 0, sizeof(scm));
2409
2410         scm_set_cred(&scm, UNIXCB(skb).pid, UNIXCB(skb).uid, UNIXCB(skb).gid);
2411         unix_set_secdata(&scm, skb);
2412
2413         if (!(flags & MSG_PEEK)) {
2414                 if (UNIXCB(skb).fp)
2415                         unix_detach_fds(&scm, skb);
2416
2417                 sk_peek_offset_bwd(sk, skb->len);
2418         } else {
2419                 /* It is questionable: on PEEK we could:
2420                    - do not return fds - good, but too simple 8)
2421                    - return fds, and do not return them on read (old strategy,
2422                      apparently wrong)
2423                    - clone fds (I chose it for now, it is the most universal
2424                      solution)
2425
2426                    POSIX 1003.1g does not actually define this clearly
2427                    at all. POSIX 1003.1g doesn't define a lot of things
2428                    clearly however!
2429
2430                 */
2431
2432                 sk_peek_offset_fwd(sk, size);
2433
2434                 if (UNIXCB(skb).fp)
2435                         unix_peek_fds(&scm, skb);
2436         }
2437         err = (flags & MSG_TRUNC) ? skb->len - skip : size;
2438
2439         scm_recv_unix(sock, msg, &scm, flags);
2440
2441 out_free:
2442         skb_free_datagram(sk, skb);
2443         mutex_unlock(&u->iolock);
2444 out:
2445         return err;
2446 }
2447
2448 static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
2449                               int flags)
2450 {
2451         struct sock *sk = sock->sk;
2452
2453 #ifdef CONFIG_BPF_SYSCALL
2454         const struct proto *prot = READ_ONCE(sk->sk_prot);
2455
2456         if (prot != &unix_dgram_proto)
2457                 return prot->recvmsg(sk, msg, size, flags, NULL);
2458 #endif
2459         return __unix_dgram_recvmsg(sk, msg, size, flags);
2460 }
2461
2462 static int unix_read_skb(struct sock *sk, skb_read_actor_t recv_actor)
2463 {
2464         struct unix_sock *u = unix_sk(sk);
2465         struct sk_buff *skb;
2466         int err;
2467
2468         mutex_lock(&u->iolock);
2469         skb = skb_recv_datagram(sk, MSG_DONTWAIT, &err);
2470         mutex_unlock(&u->iolock);
2471         if (!skb)
2472                 return err;
2473
2474         return recv_actor(sk, skb);
2475 }
2476
2477 /*
2478  *      Sleep until more data has arrived. But check for races..
2479  */
2480 static long unix_stream_data_wait(struct sock *sk, long timeo,
2481                                   struct sk_buff *last, unsigned int last_len,
2482                                   bool freezable)
2483 {
2484         unsigned int state = TASK_INTERRUPTIBLE | freezable * TASK_FREEZABLE;
2485         struct sk_buff *tail;
2486         DEFINE_WAIT(wait);
2487
2488         unix_state_lock(sk);
2489
2490         for (;;) {
2491                 prepare_to_wait(sk_sleep(sk), &wait, state);
2492
2493                 tail = skb_peek_tail(&sk->sk_receive_queue);
2494                 if (tail != last ||
2495                     (tail && tail->len != last_len) ||
2496                     sk->sk_err ||
2497                     (sk->sk_shutdown & RCV_SHUTDOWN) ||
2498                     signal_pending(current) ||
2499                     !timeo)
2500                         break;
2501
2502                 sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
2503                 unix_state_unlock(sk);
2504                 timeo = schedule_timeout(timeo);
2505                 unix_state_lock(sk);
2506
2507                 if (sock_flag(sk, SOCK_DEAD))
2508                         break;
2509
2510                 sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
2511         }
2512
2513         finish_wait(sk_sleep(sk), &wait);
2514         unix_state_unlock(sk);
2515         return timeo;
2516 }
2517
2518 static unsigned int unix_skb_len(const struct sk_buff *skb)
2519 {
2520         return skb->len - UNIXCB(skb).consumed;
2521 }
2522
2523 struct unix_stream_read_state {
2524         int (*recv_actor)(struct sk_buff *, int, int,
2525                           struct unix_stream_read_state *);
2526         struct socket *socket;
2527         struct msghdr *msg;
2528         struct pipe_inode_info *pipe;
2529         size_t size;
2530         int flags;
2531         unsigned int splice_flags;
2532 };
2533
2534 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
2535 static int unix_stream_recv_urg(struct unix_stream_read_state *state)
2536 {
2537         struct socket *sock = state->socket;
2538         struct sock *sk = sock->sk;
2539         struct unix_sock *u = unix_sk(sk);
2540         int chunk = 1;
2541         struct sk_buff *oob_skb;
2542
2543         mutex_lock(&u->iolock);
2544         unix_state_lock(sk);
2545
2546         if (sock_flag(sk, SOCK_URGINLINE) || !u->oob_skb) {
2547                 unix_state_unlock(sk);
2548                 mutex_unlock(&u->iolock);
2549                 return -EINVAL;
2550         }
2551
2552         oob_skb = u->oob_skb;
2553
2554         if (!(state->flags & MSG_PEEK))
2555                 WRITE_ONCE(u->oob_skb, NULL);
2556         else
2557                 skb_get(oob_skb);
2558         unix_state_unlock(sk);
2559
2560         chunk = state->recv_actor(oob_skb, 0, chunk, state);
2561
2562         if (!(state->flags & MSG_PEEK))
2563                 UNIXCB(oob_skb).consumed += 1;
2564
2565         consume_skb(oob_skb);
2566
2567         mutex_unlock(&u->iolock);
2568
2569         if (chunk < 0)
2570                 return -EFAULT;
2571
2572         state->msg->msg_flags |= MSG_OOB;
2573         return 1;
2574 }
2575
2576 static struct sk_buff *manage_oob(struct sk_buff *skb, struct sock *sk,
2577                                   int flags, int copied)
2578 {
2579         struct unix_sock *u = unix_sk(sk);
2580
2581         if (!unix_skb_len(skb) && !(flags & MSG_PEEK)) {
2582                 skb_unlink(skb, &sk->sk_receive_queue);
2583                 consume_skb(skb);
2584                 skb = NULL;
2585         } else {
2586                 if (skb == u->oob_skb) {
2587                         if (copied) {
2588                                 skb = NULL;
2589                         } else if (sock_flag(sk, SOCK_URGINLINE)) {
2590                                 if (!(flags & MSG_PEEK)) {
2591                                         WRITE_ONCE(u->oob_skb, NULL);
2592                                         consume_skb(skb);
2593                                 }
2594                         } else if (!(flags & MSG_PEEK)) {
2595                                 skb_unlink(skb, &sk->sk_receive_queue);
2596                                 consume_skb(skb);
2597                                 skb = skb_peek(&sk->sk_receive_queue);
2598                         }
2599                 }
2600         }
2601         return skb;
2602 }
2603 #endif
2604
2605 static int unix_stream_read_skb(struct sock *sk, skb_read_actor_t recv_actor)
2606 {
2607         if (unlikely(sk->sk_state != TCP_ESTABLISHED))
2608                 return -ENOTCONN;
2609
2610         return unix_read_skb(sk, recv_actor);
2611 }
2612
2613 static int unix_stream_read_generic(struct unix_stream_read_state *state,
2614                                     bool freezable)
2615 {
2616         struct scm_cookie scm;
2617         struct socket *sock = state->socket;
2618         struct sock *sk = sock->sk;
2619         struct unix_sock *u = unix_sk(sk);
2620         int copied = 0;
2621         int flags = state->flags;
2622         int noblock = flags & MSG_DONTWAIT;
2623         bool check_creds = false;
2624         int target;
2625         int err = 0;
2626         long timeo;
2627         int skip;
2628         size_t size = state->size;
2629         unsigned int last_len;
2630
2631         if (unlikely(sk->sk_state != TCP_ESTABLISHED)) {
2632                 err = -EINVAL;
2633                 goto out;
2634         }
2635
2636         if (unlikely(flags & MSG_OOB)) {
2637                 err = -EOPNOTSUPP;
2638 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
2639                 err = unix_stream_recv_urg(state);
2640 #endif
2641                 goto out;
2642         }
2643
2644         target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
2645         timeo = sock_rcvtimeo(sk, noblock);
2646
2647         memset(&scm, 0, sizeof(scm));
2648
2649         /* Lock the socket to prevent queue disordering
2650          * while sleeps in memcpy_tomsg
2651          */
2652         mutex_lock(&u->iolock);
2653
2654         skip = max(sk_peek_offset(sk, flags), 0);
2655
2656         do {
2657                 int chunk;
2658                 bool drop_skb;
2659                 struct sk_buff *skb, *last;
2660
2661 redo:
2662                 unix_state_lock(sk);
2663                 if (sock_flag(sk, SOCK_DEAD)) {
2664                         err = -ECONNRESET;
2665                         goto unlock;
2666                 }
2667                 last = skb = skb_peek(&sk->sk_receive_queue);
2668                 last_len = last ? last->len : 0;
2669
2670 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
2671                 if (skb) {
2672                         skb = manage_oob(skb, sk, flags, copied);
2673                         if (!skb) {
2674                                 unix_state_unlock(sk);
2675                                 if (copied)
2676                                         break;
2677                                 goto redo;
2678                         }
2679                 }
2680 #endif
2681 again:
2682                 if (skb == NULL) {
2683                         if (copied >= target)
2684                                 goto unlock;
2685
2686                         /*
2687                          *      POSIX 1003.1g mandates this order.
2688                          */
2689
2690                         err = sock_error(sk);
2691                         if (err)
2692                                 goto unlock;
2693                         if (sk->sk_shutdown & RCV_SHUTDOWN)
2694                                 goto unlock;
2695
2696                         unix_state_unlock(sk);
2697                         if (!timeo) {
2698                                 err = -EAGAIN;
2699                                 break;
2700                         }
2701
2702                         mutex_unlock(&u->iolock);
2703
2704                         timeo = unix_stream_data_wait(sk, timeo, last,
2705                                                       last_len, freezable);
2706
2707                         if (signal_pending(current)) {
2708                                 err = sock_intr_errno(timeo);
2709                                 scm_destroy(&scm);
2710                                 goto out;
2711                         }
2712
2713                         mutex_lock(&u->iolock);
2714                         goto redo;
2715 unlock:
2716                         unix_state_unlock(sk);
2717                         break;
2718                 }
2719
2720                 while (skip >= unix_skb_len(skb)) {
2721                         skip -= unix_skb_len(skb);
2722                         last = skb;
2723                         last_len = skb->len;
2724                         skb = skb_peek_next(skb, &sk->sk_receive_queue);
2725                         if (!skb)
2726                                 goto again;
2727                 }
2728
2729                 unix_state_unlock(sk);
2730
2731                 if (check_creds) {
2732                         /* Never glue messages from different writers */
2733                         if (!unix_skb_scm_eq(skb, &scm))
2734                                 break;
2735                 } else if (test_bit(SOCK_PASSCRED, &sock->flags) ||
2736                            test_bit(SOCK_PASSPIDFD, &sock->flags)) {
2737                         /* Copy credentials */
2738                         scm_set_cred(&scm, UNIXCB(skb).pid, UNIXCB(skb).uid, UNIXCB(skb).gid);
2739                         unix_set_secdata(&scm, skb);
2740                         check_creds = true;
2741                 }
2742
2743                 /* Copy address just once */
2744                 if (state->msg && state->msg->msg_name) {
2745                         DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr,
2746                                          state->msg->msg_name);
2747                         unix_copy_addr(state->msg, skb->sk);
2748                         sunaddr = NULL;
2749                 }
2750
2751                 chunk = min_t(unsigned int, unix_skb_len(skb) - skip, size);
2752                 skb_get(skb);
2753                 chunk = state->recv_actor(skb, skip, chunk, state);
2754                 drop_skb = !unix_skb_len(skb);
2755                 /* skb is only safe to use if !drop_skb */
2756                 consume_skb(skb);
2757                 if (chunk < 0) {
2758                         if (copied == 0)
2759                                 copied = -EFAULT;
2760                         break;
2761                 }
2762                 copied += chunk;
2763                 size -= chunk;
2764
2765                 if (drop_skb) {
2766                         /* the skb was touched by a concurrent reader;
2767                          * we should not expect anything from this skb
2768                          * anymore and assume it invalid - we can be
2769                          * sure it was dropped from the socket queue
2770                          *
2771                          * let's report a short read
2772                          */
2773                         err = 0;
2774                         break;
2775                 }
2776
2777                 /* Mark read part of skb as used */
2778                 if (!(flags & MSG_PEEK)) {
2779                         UNIXCB(skb).consumed += chunk;
2780
2781                         sk_peek_offset_bwd(sk, chunk);
2782
2783                         if (UNIXCB(skb).fp) {
2784                                 scm_stat_del(sk, skb);
2785                                 unix_detach_fds(&scm, skb);
2786                         }
2787
2788                         if (unix_skb_len(skb))
2789                                 break;
2790
2791                         skb_unlink(skb, &sk->sk_receive_queue);
2792                         consume_skb(skb);
2793
2794                         if (scm.fp)
2795                                 break;
2796                 } else {
2797                         /* It is questionable, see note in unix_dgram_recvmsg.
2798                          */
2799                         if (UNIXCB(skb).fp)
2800                                 unix_peek_fds(&scm, skb);
2801
2802                         sk_peek_offset_fwd(sk, chunk);
2803
2804                         if (UNIXCB(skb).fp)
2805                                 break;
2806
2807                         skip = 0;
2808                         last = skb;
2809                         last_len = skb->len;
2810                         unix_state_lock(sk);
2811                         skb = skb_peek_next(skb, &sk->sk_receive_queue);
2812                         if (skb)
2813                                 goto again;
2814                         unix_state_unlock(sk);
2815                         break;
2816                 }
2817         } while (size);
2818
2819         mutex_unlock(&u->iolock);
2820         if (state->msg)
2821                 scm_recv_unix(sock, state->msg, &scm, flags);
2822         else
2823                 scm_destroy(&scm);
2824 out:
2825         return copied ? : err;
2826 }
2827
2828 static int unix_stream_read_actor(struct sk_buff *skb,
2829                                   int skip, int chunk,
2830                                   struct unix_stream_read_state *state)
2831 {
2832         int ret;
2833
2834         ret = skb_copy_datagram_msg(skb, UNIXCB(skb).consumed + skip,
2835                                     state->msg, chunk);
2836         return ret ?: chunk;
2837 }
2838
2839 int __unix_stream_recvmsg(struct sock *sk, struct msghdr *msg,
2840                           size_t size, int flags)
2841 {
2842         struct unix_stream_read_state state = {
2843                 .recv_actor = unix_stream_read_actor,
2844                 .socket = sk->sk_socket,
2845                 .msg = msg,
2846                 .size = size,
2847                 .flags = flags
2848         };
2849
2850         return unix_stream_read_generic(&state, true);
2851 }
2852
2853 static int unix_stream_recvmsg(struct socket *sock, struct msghdr *msg,
2854                                size_t size, int flags)
2855 {
2856         struct unix_stream_read_state state = {
2857                 .recv_actor = unix_stream_read_actor,
2858                 .socket = sock,
2859                 .msg = msg,
2860                 .size = size,
2861                 .flags = flags
2862         };
2863
2864 #ifdef CONFIG_BPF_SYSCALL
2865         struct sock *sk = sock->sk;
2866         const struct proto *prot = READ_ONCE(sk->sk_prot);
2867
2868         if (prot != &unix_stream_proto)
2869                 return prot->recvmsg(sk, msg, size, flags, NULL);
2870 #endif
2871         return unix_stream_read_generic(&state, true);
2872 }
2873
2874 static int unix_stream_splice_actor(struct sk_buff *skb,
2875                                     int skip, int chunk,
2876                                     struct unix_stream_read_state *state)
2877 {
2878         return skb_splice_bits(skb, state->socket->sk,
2879                                UNIXCB(skb).consumed + skip,
2880                                state->pipe, chunk, state->splice_flags);
2881 }
2882
2883 static ssize_t unix_stream_splice_read(struct socket *sock,  loff_t *ppos,
2884                                        struct pipe_inode_info *pipe,
2885                                        size_t size, unsigned int flags)
2886 {
2887         struct unix_stream_read_state state = {
2888                 .recv_actor = unix_stream_splice_actor,
2889                 .socket = sock,
2890                 .pipe = pipe,
2891                 .size = size,
2892                 .splice_flags = flags,
2893         };
2894
2895         if (unlikely(*ppos))
2896                 return -ESPIPE;
2897
2898         if (sock->file->f_flags & O_NONBLOCK ||
2899             flags & SPLICE_F_NONBLOCK)
2900                 state.flags = MSG_DONTWAIT;
2901
2902         return unix_stream_read_generic(&state, false);
2903 }
2904
2905 static int unix_shutdown(struct socket *sock, int mode)
2906 {
2907         struct sock *sk = sock->sk;
2908         struct sock *other;
2909
2910         if (mode < SHUT_RD || mode > SHUT_RDWR)
2911                 return -EINVAL;
2912         /* This maps:
2913          * SHUT_RD   (0) -> RCV_SHUTDOWN  (1)
2914          * SHUT_WR   (1) -> SEND_SHUTDOWN (2)
2915          * SHUT_RDWR (2) -> SHUTDOWN_MASK (3)
2916          */
2917         ++mode;
2918
2919         unix_state_lock(sk);
2920         WRITE_ONCE(sk->sk_shutdown, sk->sk_shutdown | mode);
2921         other = unix_peer(sk);
2922         if (other)
2923                 sock_hold(other);
2924         unix_state_unlock(sk);
2925         sk->sk_state_change(sk);
2926
2927         if (other &&
2928                 (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET)) {
2929
2930                 int peer_mode = 0;
2931                 const struct proto *prot = READ_ONCE(other->sk_prot);
2932
2933                 if (prot->unhash)
2934                         prot->unhash(other);
2935                 if (mode&RCV_SHUTDOWN)
2936                         peer_mode |= SEND_SHUTDOWN;
2937                 if (mode&SEND_SHUTDOWN)
2938                         peer_mode |= RCV_SHUTDOWN;
2939                 unix_state_lock(other);
2940                 WRITE_ONCE(other->sk_shutdown, other->sk_shutdown | peer_mode);
2941                 unix_state_unlock(other);
2942                 other->sk_state_change(other);
2943                 if (peer_mode == SHUTDOWN_MASK)
2944                         sk_wake_async(other, SOCK_WAKE_WAITD, POLL_HUP);
2945                 else if (peer_mode & RCV_SHUTDOWN)
2946                         sk_wake_async(other, SOCK_WAKE_WAITD, POLL_IN);
2947         }
2948         if (other)
2949                 sock_put(other);
2950
2951         return 0;
2952 }
2953
2954 long unix_inq_len(struct sock *sk)
2955 {
2956         struct sk_buff *skb;
2957         long amount = 0;
2958
2959         if (sk->sk_state == TCP_LISTEN)
2960                 return -EINVAL;
2961
2962         spin_lock(&sk->sk_receive_queue.lock);
2963         if (sk->sk_type == SOCK_STREAM ||
2964             sk->sk_type == SOCK_SEQPACKET) {
2965                 skb_queue_walk(&sk->sk_receive_queue, skb)
2966                         amount += unix_skb_len(skb);
2967         } else {
2968                 skb = skb_peek(&sk->sk_receive_queue);
2969                 if (skb)
2970                         amount = skb->len;
2971         }
2972         spin_unlock(&sk->sk_receive_queue.lock);
2973
2974         return amount;
2975 }
2976 EXPORT_SYMBOL_GPL(unix_inq_len);
2977
2978 long unix_outq_len(struct sock *sk)
2979 {
2980         return sk_wmem_alloc_get(sk);
2981 }
2982 EXPORT_SYMBOL_GPL(unix_outq_len);
2983
2984 static int unix_open_file(struct sock *sk)
2985 {
2986         struct path path;
2987         struct file *f;
2988         int fd;
2989
2990         if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
2991                 return -EPERM;
2992
2993         if (!smp_load_acquire(&unix_sk(sk)->addr))
2994                 return -ENOENT;
2995
2996         path = unix_sk(sk)->path;
2997         if (!path.dentry)
2998                 return -ENOENT;
2999
3000         path_get(&path);
3001
3002         fd = get_unused_fd_flags(O_CLOEXEC);
3003         if (fd < 0)
3004                 goto out;
3005
3006         f = dentry_open(&path, O_PATH, current_cred());
3007         if (IS_ERR(f)) {
3008                 put_unused_fd(fd);
3009                 fd = PTR_ERR(f);
3010                 goto out;
3011         }
3012
3013         fd_install(fd, f);
3014 out:
3015         path_put(&path);
3016
3017         return fd;
3018 }
3019
3020 static int unix_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
3021 {
3022         struct sock *sk = sock->sk;
3023         long amount = 0;
3024         int err;
3025
3026         switch (cmd) {
3027         case SIOCOUTQ:
3028                 amount = unix_outq_len(sk);
3029                 err = put_user(amount, (int __user *)arg);
3030                 break;
3031         case SIOCINQ:
3032                 amount = unix_inq_len(sk);
3033                 if (amount < 0)
3034                         err = amount;
3035                 else
3036                         err = put_user(amount, (int __user *)arg);
3037                 break;
3038         case SIOCUNIXFILE:
3039                 err = unix_open_file(sk);
3040                 break;
3041 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
3042         case SIOCATMARK:
3043                 {
3044                         struct sk_buff *skb;
3045                         int answ = 0;
3046
3047                         skb = skb_peek(&sk->sk_receive_queue);
3048                         if (skb && skb == READ_ONCE(unix_sk(sk)->oob_skb))
3049                                 answ = 1;
3050                         err = put_user(answ, (int __user *)arg);
3051                 }
3052                 break;
3053 #endif
3054         default:
3055                 err = -ENOIOCTLCMD;
3056                 break;
3057         }
3058         return err;
3059 }
3060
3061 #ifdef CONFIG_COMPAT
3062 static int unix_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
3063 {
3064         return unix_ioctl(sock, cmd, (unsigned long)compat_ptr(arg));
3065 }
3066 #endif
3067
3068 static __poll_t unix_poll(struct file *file, struct socket *sock, poll_table *wait)
3069 {
3070         struct sock *sk = sock->sk;
3071         __poll_t mask;
3072         u8 shutdown;
3073
3074         sock_poll_wait(file, sock, wait);
3075         mask = 0;
3076         shutdown = READ_ONCE(sk->sk_shutdown);
3077
3078         /* exceptional events? */
3079         if (READ_ONCE(sk->sk_err))
3080                 mask |= EPOLLERR;
3081         if (shutdown == SHUTDOWN_MASK)
3082                 mask |= EPOLLHUP;
3083         if (shutdown & RCV_SHUTDOWN)
3084                 mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
3085
3086         /* readable? */
3087         if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
3088                 mask |= EPOLLIN | EPOLLRDNORM;
3089         if (sk_is_readable(sk))
3090                 mask |= EPOLLIN | EPOLLRDNORM;
3091 #if IS_ENABLED(CONFIG_AF_UNIX_OOB)
3092         if (READ_ONCE(unix_sk(sk)->oob_skb))
3093                 mask |= EPOLLPRI;
3094 #endif
3095
3096         /* Connection-based need to check for termination and startup */
3097         if ((sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) &&
3098             sk->sk_state == TCP_CLOSE)
3099                 mask |= EPOLLHUP;
3100
3101         /*
3102          * we set writable also when the other side has shut down the
3103          * connection. This prevents stuck sockets.
3104          */
3105         if (unix_writable(sk))
3106                 mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
3107
3108         return mask;
3109 }
3110
3111 static __poll_t unix_dgram_poll(struct file *file, struct socket *sock,
3112                                     poll_table *wait)
3113 {
3114         struct sock *sk = sock->sk, *other;
3115         unsigned int writable;
3116         __poll_t mask;
3117         u8 shutdown;
3118
3119         sock_poll_wait(file, sock, wait);
3120         mask = 0;
3121         shutdown = READ_ONCE(sk->sk_shutdown);
3122
3123         /* exceptional events? */
3124         if (READ_ONCE(sk->sk_err) ||
3125             !skb_queue_empty_lockless(&sk->sk_error_queue))
3126                 mask |= EPOLLERR |
3127                         (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
3128
3129         if (shutdown & RCV_SHUTDOWN)
3130                 mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
3131         if (shutdown == SHUTDOWN_MASK)
3132                 mask |= EPOLLHUP;
3133
3134         /* readable? */
3135         if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
3136                 mask |= EPOLLIN | EPOLLRDNORM;
3137         if (sk_is_readable(sk))
3138                 mask |= EPOLLIN | EPOLLRDNORM;
3139
3140         /* Connection-based need to check for termination and startup */
3141         if (sk->sk_type == SOCK_SEQPACKET) {
3142                 if (sk->sk_state == TCP_CLOSE)
3143                         mask |= EPOLLHUP;
3144                 /* connection hasn't started yet? */
3145                 if (sk->sk_state == TCP_SYN_SENT)
3146                         return mask;
3147         }
3148
3149         /* No write status requested, avoid expensive OUT tests. */
3150         if (!(poll_requested_events(wait) & (EPOLLWRBAND|EPOLLWRNORM|EPOLLOUT)))
3151                 return mask;
3152
3153         writable = unix_writable(sk);
3154         if (writable) {
3155                 unix_state_lock(sk);
3156
3157                 other = unix_peer(sk);
3158                 if (other && unix_peer(other) != sk &&
3159                     unix_recvq_full_lockless(other) &&
3160                     unix_dgram_peer_wake_me(sk, other))
3161                         writable = 0;
3162
3163                 unix_state_unlock(sk);
3164         }
3165
3166         if (writable)
3167                 mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
3168         else
3169                 sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
3170
3171         return mask;
3172 }
3173
3174 #ifdef CONFIG_PROC_FS
3175
3176 #define BUCKET_SPACE (BITS_PER_LONG - (UNIX_HASH_BITS + 1) - 1)
3177
3178 #define get_bucket(x) ((x) >> BUCKET_SPACE)
3179 #define get_offset(x) ((x) & ((1UL << BUCKET_SPACE) - 1))
3180 #define set_bucket_offset(b, o) ((b) << BUCKET_SPACE | (o))
3181
3182 static struct sock *unix_from_bucket(struct seq_file *seq, loff_t *pos)
3183 {
3184         unsigned long offset = get_offset(*pos);
3185         unsigned long bucket = get_bucket(*pos);
3186         unsigned long count = 0;
3187         struct sock *sk;
3188
3189         for (sk = sk_head(&seq_file_net(seq)->unx.table.buckets[bucket]);
3190              sk; sk = sk_next(sk)) {
3191                 if (++count == offset)
3192                         break;
3193         }
3194
3195         return sk;
3196 }
3197
3198 static struct sock *unix_get_first(struct seq_file *seq, loff_t *pos)
3199 {
3200         unsigned long bucket = get_bucket(*pos);
3201         struct net *net = seq_file_net(seq);
3202         struct sock *sk;
3203
3204         while (bucket < UNIX_HASH_SIZE) {
3205                 spin_lock(&net->unx.table.locks[bucket]);
3206
3207                 sk = unix_from_bucket(seq, pos);
3208                 if (sk)
3209                         return sk;
3210
3211                 spin_unlock(&net->unx.table.locks[bucket]);
3212
3213                 *pos = set_bucket_offset(++bucket, 1);
3214         }
3215
3216         return NULL;
3217 }
3218
3219 static struct sock *unix_get_next(struct seq_file *seq, struct sock *sk,
3220                                   loff_t *pos)
3221 {
3222         unsigned long bucket = get_bucket(*pos);
3223
3224         sk = sk_next(sk);
3225         if (sk)
3226                 return sk;
3227
3228
3229         spin_unlock(&seq_file_net(seq)->unx.table.locks[bucket]);
3230
3231         *pos = set_bucket_offset(++bucket, 1);
3232
3233         return unix_get_first(seq, pos);
3234 }
3235
3236 static void *unix_seq_start(struct seq_file *seq, loff_t *pos)
3237 {
3238         if (!*pos)
3239                 return SEQ_START_TOKEN;
3240
3241         return unix_get_first(seq, pos);
3242 }
3243
3244 static void *unix_seq_next(struct seq_file *seq, void *v, loff_t *pos)
3245 {
3246         ++*pos;
3247
3248         if (v == SEQ_START_TOKEN)
3249                 return unix_get_first(seq, pos);
3250
3251         return unix_get_next(seq, v, pos);
3252 }
3253
3254 static void unix_seq_stop(struct seq_file *seq, void *v)
3255 {
3256         struct sock *sk = v;
3257
3258         if (sk)
3259                 spin_unlock(&seq_file_net(seq)->unx.table.locks[sk->sk_hash]);
3260 }
3261
3262 static int unix_seq_show(struct seq_file *seq, void *v)
3263 {
3264
3265         if (v == SEQ_START_TOKEN)
3266                 seq_puts(seq, "Num       RefCount Protocol Flags    Type St "
3267                          "Inode Path\n");
3268         else {
3269                 struct sock *s = v;
3270                 struct unix_sock *u = unix_sk(s);
3271                 unix_state_lock(s);
3272
3273                 seq_printf(seq, "%pK: %08X %08X %08X %04X %02X %5lu",
3274                         s,
3275                         refcount_read(&s->sk_refcnt),
3276                         0,
3277                         s->sk_state == TCP_LISTEN ? __SO_ACCEPTCON : 0,
3278                         s->sk_type,
3279                         s->sk_socket ?
3280                         (s->sk_state == TCP_ESTABLISHED ? SS_CONNECTED : SS_UNCONNECTED) :
3281                         (s->sk_state == TCP_ESTABLISHED ? SS_CONNECTING : SS_DISCONNECTING),
3282                         sock_i_ino(s));
3283
3284                 if (u->addr) {  // under a hash table lock here
3285                         int i, len;
3286                         seq_putc(seq, ' ');
3287
3288                         i = 0;
3289                         len = u->addr->len -
3290                                 offsetof(struct sockaddr_un, sun_path);
3291                         if (u->addr->name->sun_path[0]) {
3292                                 len--;
3293                         } else {
3294                                 seq_putc(seq, '@');
3295                                 i++;
3296                         }
3297                         for ( ; i < len; i++)
3298                                 seq_putc(seq, u->addr->name->sun_path[i] ?:
3299                                          '@');
3300                 }
3301                 unix_state_unlock(s);
3302                 seq_putc(seq, '\n');
3303         }
3304
3305         return 0;
3306 }
3307
3308 static const struct seq_operations unix_seq_ops = {
3309         .start  = unix_seq_start,
3310         .next   = unix_seq_next,
3311         .stop   = unix_seq_stop,
3312         .show   = unix_seq_show,
3313 };
3314
3315 #if IS_BUILTIN(CONFIG_UNIX) && defined(CONFIG_BPF_SYSCALL)
3316 struct bpf_unix_iter_state {
3317         struct seq_net_private p;
3318         unsigned int cur_sk;
3319         unsigned int end_sk;
3320         unsigned int max_sk;
3321         struct sock **batch;
3322         bool st_bucket_done;
3323 };
3324
3325 struct bpf_iter__unix {
3326         __bpf_md_ptr(struct bpf_iter_meta *, meta);
3327         __bpf_md_ptr(struct unix_sock *, unix_sk);
3328         uid_t uid __aligned(8);
3329 };
3330
3331 static int unix_prog_seq_show(struct bpf_prog *prog, struct bpf_iter_meta *meta,
3332                               struct unix_sock *unix_sk, uid_t uid)
3333 {
3334         struct bpf_iter__unix ctx;
3335
3336         meta->seq_num--;  /* skip SEQ_START_TOKEN */
3337         ctx.meta = meta;
3338         ctx.unix_sk = unix_sk;
3339         ctx.uid = uid;
3340         return bpf_iter_run_prog(prog, &ctx);
3341 }
3342
3343 static int bpf_iter_unix_hold_batch(struct seq_file *seq, struct sock *start_sk)
3344
3345 {
3346         struct bpf_unix_iter_state *iter = seq->private;
3347         unsigned int expected = 1;
3348         struct sock *sk;
3349
3350         sock_hold(start_sk);
3351         iter->batch[iter->end_sk++] = start_sk;
3352
3353         for (sk = sk_next(start_sk); sk; sk = sk_next(sk)) {
3354                 if (iter->end_sk < iter->max_sk) {
3355                         sock_hold(sk);
3356                         iter->batch[iter->end_sk++] = sk;
3357                 }
3358
3359                 expected++;
3360         }
3361
3362         spin_unlock(&seq_file_net(seq)->unx.table.locks[start_sk->sk_hash]);
3363
3364         return expected;
3365 }
3366
3367 static void bpf_iter_unix_put_batch(struct bpf_unix_iter_state *iter)
3368 {
3369         while (iter->cur_sk < iter->end_sk)
3370                 sock_put(iter->batch[iter->cur_sk++]);
3371 }
3372
3373 static int bpf_iter_unix_realloc_batch(struct bpf_unix_iter_state *iter,
3374                                        unsigned int new_batch_sz)
3375 {
3376         struct sock **new_batch;
3377
3378         new_batch = kvmalloc(sizeof(*new_batch) * new_batch_sz,
3379                              GFP_USER | __GFP_NOWARN);
3380         if (!new_batch)
3381                 return -ENOMEM;
3382
3383         bpf_iter_unix_put_batch(iter);
3384         kvfree(iter->batch);
3385         iter->batch = new_batch;
3386         iter->max_sk = new_batch_sz;
3387
3388         return 0;
3389 }
3390
3391 static struct sock *bpf_iter_unix_batch(struct seq_file *seq,
3392                                         loff_t *pos)
3393 {
3394         struct bpf_unix_iter_state *iter = seq->private;
3395         unsigned int expected;
3396         bool resized = false;
3397         struct sock *sk;
3398
3399         if (iter->st_bucket_done)
3400                 *pos = set_bucket_offset(get_bucket(*pos) + 1, 1);
3401
3402 again:
3403         /* Get a new batch */
3404         iter->cur_sk = 0;
3405         iter->end_sk = 0;
3406
3407         sk = unix_get_first(seq, pos);
3408         if (!sk)
3409                 return NULL; /* Done */
3410
3411         expected = bpf_iter_unix_hold_batch(seq, sk);
3412
3413         if (iter->end_sk == expected) {
3414                 iter->st_bucket_done = true;
3415                 return sk;
3416         }
3417
3418         if (!resized && !bpf_iter_unix_realloc_batch(iter, expected * 3 / 2)) {
3419                 resized = true;
3420                 goto again;
3421         }
3422
3423         return sk;
3424 }
3425
3426 static void *bpf_iter_unix_seq_start(struct seq_file *seq, loff_t *pos)
3427 {
3428         if (!*pos)
3429                 return SEQ_START_TOKEN;
3430
3431         /* bpf iter does not support lseek, so it always
3432          * continue from where it was stop()-ped.
3433          */
3434         return bpf_iter_unix_batch(seq, pos);
3435 }
3436
3437 static void *bpf_iter_unix_seq_next(struct seq_file *seq, void *v, loff_t *pos)
3438 {
3439         struct bpf_unix_iter_state *iter = seq->private;
3440         struct sock *sk;
3441
3442         /* Whenever seq_next() is called, the iter->cur_sk is
3443          * done with seq_show(), so advance to the next sk in
3444          * the batch.
3445          */
3446         if (iter->cur_sk < iter->end_sk)
3447                 sock_put(iter->batch[iter->cur_sk++]);
3448
3449         ++*pos;
3450
3451         if (iter->cur_sk < iter->end_sk)
3452                 sk = iter->batch[iter->cur_sk];
3453         else
3454                 sk = bpf_iter_unix_batch(seq, pos);
3455
3456         return sk;
3457 }
3458
3459 static int bpf_iter_unix_seq_show(struct seq_file *seq, void *v)
3460 {
3461         struct bpf_iter_meta meta;
3462         struct bpf_prog *prog;
3463         struct sock *sk = v;
3464         uid_t uid;
3465         bool slow;
3466         int ret;
3467
3468         if (v == SEQ_START_TOKEN)
3469                 return 0;
3470
3471         slow = lock_sock_fast(sk);
3472
3473         if (unlikely(sk_unhashed(sk))) {
3474                 ret = SEQ_SKIP;
3475                 goto unlock;
3476         }
3477
3478         uid = from_kuid_munged(seq_user_ns(seq), sock_i_uid(sk));
3479         meta.seq = seq;
3480         prog = bpf_iter_get_info(&meta, false);
3481         ret = unix_prog_seq_show(prog, &meta, v, uid);
3482 unlock:
3483         unlock_sock_fast(sk, slow);
3484         return ret;
3485 }
3486
3487 static void bpf_iter_unix_seq_stop(struct seq_file *seq, void *v)
3488 {
3489         struct bpf_unix_iter_state *iter = seq->private;
3490         struct bpf_iter_meta meta;
3491         struct bpf_prog *prog;
3492
3493         if (!v) {
3494                 meta.seq = seq;
3495                 prog = bpf_iter_get_info(&meta, true);
3496                 if (prog)
3497                         (void)unix_prog_seq_show(prog, &meta, v, 0);
3498         }
3499
3500         if (iter->cur_sk < iter->end_sk)
3501                 bpf_iter_unix_put_batch(iter);
3502 }
3503
3504 static const struct seq_operations bpf_iter_unix_seq_ops = {
3505         .start  = bpf_iter_unix_seq_start,
3506         .next   = bpf_iter_unix_seq_next,
3507         .stop   = bpf_iter_unix_seq_stop,
3508         .show   = bpf_iter_unix_seq_show,
3509 };
3510 #endif
3511 #endif
3512
3513 static const struct net_proto_family unix_family_ops = {
3514         .family = PF_UNIX,
3515         .create = unix_create,
3516         .owner  = THIS_MODULE,
3517 };
3518
3519
3520 static int __net_init unix_net_init(struct net *net)
3521 {
3522         int i;
3523
3524         net->unx.sysctl_max_dgram_qlen = 10;
3525         if (unix_sysctl_register(net))
3526                 goto out;
3527
3528 #ifdef CONFIG_PROC_FS
3529         if (!proc_create_net("unix", 0, net->proc_net, &unix_seq_ops,
3530                              sizeof(struct seq_net_private)))
3531                 goto err_sysctl;
3532 #endif
3533
3534         net->unx.table.locks = kvmalloc_array(UNIX_HASH_SIZE,
3535                                               sizeof(spinlock_t), GFP_KERNEL);
3536         if (!net->unx.table.locks)
3537                 goto err_proc;
3538
3539         net->unx.table.buckets = kvmalloc_array(UNIX_HASH_SIZE,
3540                                                 sizeof(struct hlist_head),
3541                                                 GFP_KERNEL);
3542         if (!net->unx.table.buckets)
3543                 goto free_locks;
3544
3545         for (i = 0; i < UNIX_HASH_SIZE; i++) {
3546                 spin_lock_init(&net->unx.table.locks[i]);
3547                 INIT_HLIST_HEAD(&net->unx.table.buckets[i]);
3548         }
3549
3550         return 0;
3551
3552 free_locks:
3553         kvfree(net->unx.table.locks);
3554 err_proc:
3555 #ifdef CONFIG_PROC_FS
3556         remove_proc_entry("unix", net->proc_net);
3557 err_sysctl:
3558 #endif
3559         unix_sysctl_unregister(net);
3560 out:
3561         return -ENOMEM;
3562 }
3563
3564 static void __net_exit unix_net_exit(struct net *net)
3565 {
3566         kvfree(net->unx.table.buckets);
3567         kvfree(net->unx.table.locks);
3568         unix_sysctl_unregister(net);
3569         remove_proc_entry("unix", net->proc_net);
3570 }
3571
3572 static struct pernet_operations unix_net_ops = {
3573         .init = unix_net_init,
3574         .exit = unix_net_exit,
3575 };
3576
3577 #if IS_BUILTIN(CONFIG_UNIX) && defined(CONFIG_BPF_SYSCALL) && defined(CONFIG_PROC_FS)
3578 DEFINE_BPF_ITER_FUNC(unix, struct bpf_iter_meta *meta,
3579                      struct unix_sock *unix_sk, uid_t uid)
3580
3581 #define INIT_BATCH_SZ 16
3582
3583 static int bpf_iter_init_unix(void *priv_data, struct bpf_iter_aux_info *aux)
3584 {
3585         struct bpf_unix_iter_state *iter = priv_data;
3586         int err;
3587
3588         err = bpf_iter_init_seq_net(priv_data, aux);
3589         if (err)
3590                 return err;
3591
3592         err = bpf_iter_unix_realloc_batch(iter, INIT_BATCH_SZ);
3593         if (err) {
3594                 bpf_iter_fini_seq_net(priv_data);
3595                 return err;
3596         }
3597
3598         return 0;
3599 }
3600
3601 static void bpf_iter_fini_unix(void *priv_data)
3602 {
3603         struct bpf_unix_iter_state *iter = priv_data;
3604
3605         bpf_iter_fini_seq_net(priv_data);
3606         kvfree(iter->batch);
3607 }
3608
3609 static const struct bpf_iter_seq_info unix_seq_info = {
3610         .seq_ops                = &bpf_iter_unix_seq_ops,
3611         .init_seq_private       = bpf_iter_init_unix,
3612         .fini_seq_private       = bpf_iter_fini_unix,
3613         .seq_priv_size          = sizeof(struct bpf_unix_iter_state),
3614 };
3615
3616 static const struct bpf_func_proto *
3617 bpf_iter_unix_get_func_proto(enum bpf_func_id func_id,
3618                              const struct bpf_prog *prog)
3619 {
3620         switch (func_id) {
3621         case BPF_FUNC_setsockopt:
3622                 return &bpf_sk_setsockopt_proto;
3623         case BPF_FUNC_getsockopt:
3624                 return &bpf_sk_getsockopt_proto;
3625         default:
3626                 return NULL;
3627         }
3628 }
3629
3630 static struct bpf_iter_reg unix_reg_info = {
3631         .target                 = "unix",
3632         .ctx_arg_info_size      = 1,
3633         .ctx_arg_info           = {
3634                 { offsetof(struct bpf_iter__unix, unix_sk),
3635                   PTR_TO_BTF_ID_OR_NULL },
3636         },
3637         .get_func_proto         = bpf_iter_unix_get_func_proto,
3638         .seq_info               = &unix_seq_info,
3639 };
3640
3641 static void __init bpf_iter_register(void)
3642 {
3643         unix_reg_info.ctx_arg_info[0].btf_id = btf_sock_ids[BTF_SOCK_TYPE_UNIX];
3644         if (bpf_iter_reg_target(&unix_reg_info))
3645                 pr_warn("Warning: could not register bpf iterator unix\n");
3646 }
3647 #endif
3648
3649 static int __init af_unix_init(void)
3650 {
3651         int i, rc = -1;
3652
3653         BUILD_BUG_ON(sizeof(struct unix_skb_parms) > sizeof_field(struct sk_buff, cb));
3654
3655         for (i = 0; i < UNIX_HASH_SIZE / 2; i++) {
3656                 spin_lock_init(&bsd_socket_locks[i]);
3657                 INIT_HLIST_HEAD(&bsd_socket_buckets[i]);
3658         }
3659
3660         rc = proto_register(&unix_dgram_proto, 1);
3661         if (rc != 0) {
3662                 pr_crit("%s: Cannot create unix_sock SLAB cache!\n", __func__);
3663                 goto out;
3664         }
3665
3666         rc = proto_register(&unix_stream_proto, 1);
3667         if (rc != 0) {
3668                 pr_crit("%s: Cannot create unix_sock SLAB cache!\n", __func__);
3669                 proto_unregister(&unix_dgram_proto);
3670                 goto out;
3671         }
3672
3673         sock_register(&unix_family_ops);
3674         register_pernet_subsys(&unix_net_ops);
3675         unix_bpf_build_proto();
3676
3677 #if IS_BUILTIN(CONFIG_UNIX) && defined(CONFIG_BPF_SYSCALL) && defined(CONFIG_PROC_FS)
3678         bpf_iter_register();
3679 #endif
3680
3681 out:
3682         return rc;
3683 }
3684
3685 static void __exit af_unix_exit(void)
3686 {
3687         sock_unregister(PF_UNIX);
3688         proto_unregister(&unix_dgram_proto);
3689         proto_unregister(&unix_stream_proto);
3690         unregister_pernet_subsys(&unix_net_ops);
3691 }
3692
3693 /* Earlier than device_initcall() so that other drivers invoking
3694    request_module() don't end up in a loop when modprobe tries
3695    to use a UNIX socket. But later than subsys_initcall() because
3696    we depend on stuff initialised there */
3697 fs_initcall(af_unix_init);
3698 module_exit(af_unix_exit);
3699
3700 MODULE_LICENSE("GPL");
3701 MODULE_ALIAS_NETPROTO(PF_UNIX);