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