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