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