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