• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/termios.h>
93 #include <linux/sockios.h>
94 #include <linux/net.h>
95 #include <linux/in.h>
96 #include <linux/fs.h>
97 #include <linux/slab.h>
98 #include <linux/uaccess.h>
99 #include <linux/skbuff.h>
100 #include <linux/netdevice.h>
101 #include <net/net_namespace.h>
102 #include <net/sock.h>
103 #include <net/tcp_states.h>
104 #include <net/af_unix.h>
105 #include <linux/proc_fs.h>
106 #include <linux/seq_file.h>
107 #include <net/scm.h>
108 #include <linux/init.h>
109 #include <linux/poll.h>
110 #include <linux/rtnetlink.h>
111 #include <linux/mount.h>
112 #include <net/checksum.h>
113 #include <linux/security.h>
114 #include <linux/freezer.h>
115 #include <linux/file.h>
116 
117 #include "scm.h"
118 
119 struct hlist_head unix_socket_table[2 * UNIX_HASH_SIZE];
120 EXPORT_SYMBOL_GPL(unix_socket_table);
121 DEFINE_SPINLOCK(unix_table_lock);
122 EXPORT_SYMBOL_GPL(unix_table_lock);
123 static atomic_long_t unix_nr_socks;
124 
125 
unix_sockets_unbound(void * addr)126 static struct hlist_head *unix_sockets_unbound(void *addr)
127 {
128 	unsigned long hash = (unsigned long)addr;
129 
130 	hash ^= hash >> 16;
131 	hash ^= hash >> 8;
132 	hash %= UNIX_HASH_SIZE;
133 	return &unix_socket_table[UNIX_HASH_SIZE + hash];
134 }
135 
136 #define UNIX_ABSTRACT(sk)	(unix_sk(sk)->addr->hash < UNIX_HASH_SIZE)
137 
138 #ifdef CONFIG_SECURITY_NETWORK
unix_get_secdata(struct scm_cookie * scm,struct sk_buff * skb)139 static void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb)
140 {
141 	UNIXCB(skb).secid = scm->secid;
142 }
143 
unix_set_secdata(struct scm_cookie * scm,struct sk_buff * skb)144 static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb)
145 {
146 	scm->secid = UNIXCB(skb).secid;
147 }
148 
unix_secdata_eq(struct scm_cookie * scm,struct sk_buff * skb)149 static inline bool unix_secdata_eq(struct scm_cookie *scm, struct sk_buff *skb)
150 {
151 	return (scm->secid == UNIXCB(skb).secid);
152 }
153 #else
unix_get_secdata(struct scm_cookie * scm,struct sk_buff * skb)154 static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb)
155 { }
156 
unix_set_secdata(struct scm_cookie * scm,struct sk_buff * skb)157 static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb)
158 { }
159 
unix_secdata_eq(struct scm_cookie * scm,struct sk_buff * skb)160 static inline bool unix_secdata_eq(struct scm_cookie *scm, struct sk_buff *skb)
161 {
162 	return true;
163 }
164 #endif /* CONFIG_SECURITY_NETWORK */
165 
166 /*
167  *  SMP locking strategy:
168  *    hash table is protected with spinlock unix_table_lock
169  *    each socket state is protected by separate spin lock.
170  */
171 
unix_hash_fold(__wsum n)172 static inline unsigned int unix_hash_fold(__wsum n)
173 {
174 	unsigned int hash = (__force unsigned int)csum_fold(n);
175 
176 	hash ^= hash>>8;
177 	return hash&(UNIX_HASH_SIZE-1);
178 }
179 
180 #define unix_peer(sk) (unix_sk(sk)->peer)
181 
unix_our_peer(struct sock * sk,struct sock * osk)182 static inline int unix_our_peer(struct sock *sk, struct sock *osk)
183 {
184 	return unix_peer(osk) == sk;
185 }
186 
unix_may_send(struct sock * sk,struct sock * osk)187 static inline int unix_may_send(struct sock *sk, struct sock *osk)
188 {
189 	return unix_peer(osk) == NULL || unix_our_peer(sk, osk);
190 }
191 
unix_recvq_full(const struct sock * sk)192 static inline int unix_recvq_full(const struct sock *sk)
193 {
194 	return skb_queue_len(&sk->sk_receive_queue) > sk->sk_max_ack_backlog;
195 }
196 
unix_recvq_full_lockless(const struct sock * sk)197 static inline int unix_recvq_full_lockless(const struct sock *sk)
198 {
199 	return skb_queue_len_lockless(&sk->sk_receive_queue) >
200 		READ_ONCE(sk->sk_max_ack_backlog);
201 }
202 
unix_peer_get(struct sock * s)203 struct sock *unix_peer_get(struct sock *s)
204 {
205 	struct sock *peer;
206 
207 	unix_state_lock(s);
208 	peer = unix_peer(s);
209 	if (peer)
210 		sock_hold(peer);
211 	unix_state_unlock(s);
212 	return peer;
213 }
214 EXPORT_SYMBOL_GPL(unix_peer_get);
215 
unix_release_addr(struct unix_address * addr)216 static inline void unix_release_addr(struct unix_address *addr)
217 {
218 	if (refcount_dec_and_test(&addr->refcnt))
219 		kfree(addr);
220 }
221 
222 /*
223  *	Check unix socket name:
224  *		- should be not zero length.
225  *	        - if started by not zero, should be NULL terminated (FS object)
226  *		- if started by zero, it is abstract name.
227  */
228 
unix_mkname(struct sockaddr_un * sunaddr,int len,unsigned int * hashp)229 static int unix_mkname(struct sockaddr_un *sunaddr, int len, unsigned int *hashp)
230 {
231 	*hashp = 0;
232 
233 	if (len <= sizeof(short) || len > sizeof(*sunaddr))
234 		return -EINVAL;
235 	if (!sunaddr || sunaddr->sun_family != AF_UNIX)
236 		return -EINVAL;
237 	if (sunaddr->sun_path[0]) {
238 		/*
239 		 * This may look like an off by one error but it is a bit more
240 		 * subtle. 108 is the longest valid AF_UNIX path for a binding.
241 		 * sun_path[108] doesn't as such exist.  However in kernel space
242 		 * we are guaranteed that it is a valid memory location in our
243 		 * kernel address buffer.
244 		 */
245 		((char *)sunaddr)[len] = 0;
246 		len = strlen(sunaddr->sun_path)+1+sizeof(short);
247 		return len;
248 	}
249 
250 	*hashp = unix_hash_fold(csum_partial(sunaddr, len, 0));
251 	return len;
252 }
253 
__unix_remove_socket(struct sock * sk)254 static void __unix_remove_socket(struct sock *sk)
255 {
256 	sk_del_node_init(sk);
257 }
258 
__unix_insert_socket(struct hlist_head * list,struct sock * sk)259 static void __unix_insert_socket(struct hlist_head *list, struct sock *sk)
260 {
261 	WARN_ON(!sk_unhashed(sk));
262 	sk_add_node(sk, list);
263 }
264 
unix_remove_socket(struct sock * sk)265 static inline void unix_remove_socket(struct sock *sk)
266 {
267 	spin_lock(&unix_table_lock);
268 	__unix_remove_socket(sk);
269 	spin_unlock(&unix_table_lock);
270 }
271 
unix_insert_socket(struct hlist_head * list,struct sock * sk)272 static inline void unix_insert_socket(struct hlist_head *list, struct sock *sk)
273 {
274 	spin_lock(&unix_table_lock);
275 	__unix_insert_socket(list, sk);
276 	spin_unlock(&unix_table_lock);
277 }
278 
__unix_find_socket_byname(struct net * net,struct sockaddr_un * sunname,int len,int type,unsigned int hash)279 static struct sock *__unix_find_socket_byname(struct net *net,
280 					      struct sockaddr_un *sunname,
281 					      int len, int type, unsigned int hash)
282 {
283 	struct sock *s;
284 
285 	sk_for_each(s, &unix_socket_table[hash ^ type]) {
286 		struct unix_sock *u = unix_sk(s);
287 
288 		if (!net_eq(sock_net(s), net))
289 			continue;
290 
291 		if (u->addr->len == len &&
292 		    !memcmp(u->addr->name, sunname, len))
293 			return s;
294 	}
295 	return NULL;
296 }
297 
unix_find_socket_byname(struct net * net,struct sockaddr_un * sunname,int len,int type,unsigned int hash)298 static inline struct sock *unix_find_socket_byname(struct net *net,
299 						   struct sockaddr_un *sunname,
300 						   int len, int type,
301 						   unsigned int hash)
302 {
303 	struct sock *s;
304 
305 	spin_lock(&unix_table_lock);
306 	s = __unix_find_socket_byname(net, sunname, len, type, hash);
307 	if (s)
308 		sock_hold(s);
309 	spin_unlock(&unix_table_lock);
310 	return s;
311 }
312 
unix_find_socket_byinode(struct inode * i)313 static struct sock *unix_find_socket_byinode(struct inode *i)
314 {
315 	struct sock *s;
316 
317 	spin_lock(&unix_table_lock);
318 	sk_for_each(s,
319 		    &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) {
320 		struct dentry *dentry = unix_sk(s)->path.dentry;
321 
322 		if (dentry && d_backing_inode(dentry) == i) {
323 			sock_hold(s);
324 			goto found;
325 		}
326 	}
327 	s = NULL;
328 found:
329 	spin_unlock(&unix_table_lock);
330 	return s;
331 }
332 
333 /* Support code for asymmetrically connected dgram sockets
334  *
335  * If a datagram socket is connected to a socket not itself connected
336  * to the first socket (eg, /dev/log), clients may only enqueue more
337  * messages if the present receive queue of the server socket is not
338  * "too large". This means there's a second writeability condition
339  * poll and sendmsg need to test. The dgram recv code will do a wake
340  * up on the peer_wait wait queue of a socket upon reception of a
341  * datagram which needs to be propagated to sleeping would-be writers
342  * since these might not have sent anything so far. This can't be
343  * accomplished via poll_wait because the lifetime of the server
344  * socket might be less than that of its clients if these break their
345  * association with it or if the server socket is closed while clients
346  * are still connected to it and there's no way to inform "a polling
347  * implementation" that it should let go of a certain wait queue
348  *
349  * In order to propagate a wake up, a wait_queue_entry_t of the client
350  * socket is enqueued on the peer_wait queue of the server socket
351  * whose wake function does a wake_up on the ordinary client socket
352  * wait queue. This connection is established whenever a write (or
353  * poll for write) hit the flow control condition and broken when the
354  * association to the server socket is dissolved or after a wake up
355  * was relayed.
356  */
357 
unix_dgram_peer_wake_relay(wait_queue_entry_t * q,unsigned mode,int flags,void * key)358 static int unix_dgram_peer_wake_relay(wait_queue_entry_t *q, unsigned mode, int flags,
359 				      void *key)
360 {
361 	struct unix_sock *u;
362 	wait_queue_head_t *u_sleep;
363 
364 	u = container_of(q, struct unix_sock, peer_wake);
365 
366 	__remove_wait_queue(&unix_sk(u->peer_wake.private)->peer_wait,
367 			    q);
368 	u->peer_wake.private = NULL;
369 
370 	/* relaying can only happen while the wq still exists */
371 	u_sleep = sk_sleep(&u->sk);
372 	if (u_sleep)
373 		wake_up_interruptible_poll(u_sleep, key_to_poll(key));
374 
375 	return 0;
376 }
377 
unix_dgram_peer_wake_connect(struct sock * sk,struct sock * other)378 static int unix_dgram_peer_wake_connect(struct sock *sk, struct sock *other)
379 {
380 	struct unix_sock *u, *u_other;
381 	int rc;
382 
383 	u = unix_sk(sk);
384 	u_other = unix_sk(other);
385 	rc = 0;
386 	spin_lock(&u_other->peer_wait.lock);
387 
388 	if (!u->peer_wake.private) {
389 		u->peer_wake.private = other;
390 		__add_wait_queue(&u_other->peer_wait, &u->peer_wake);
391 
392 		rc = 1;
393 	}
394 
395 	spin_unlock(&u_other->peer_wait.lock);
396 	return rc;
397 }
398 
unix_dgram_peer_wake_disconnect(struct sock * sk,struct sock * other)399 static void unix_dgram_peer_wake_disconnect(struct sock *sk,
400 					    struct sock *other)
401 {
402 	struct unix_sock *u, *u_other;
403 
404 	u = unix_sk(sk);
405 	u_other = unix_sk(other);
406 	spin_lock(&u_other->peer_wait.lock);
407 
408 	if (u->peer_wake.private == other) {
409 		__remove_wait_queue(&u_other->peer_wait, &u->peer_wake);
410 		u->peer_wake.private = NULL;
411 	}
412 
413 	spin_unlock(&u_other->peer_wait.lock);
414 }
415 
unix_dgram_peer_wake_disconnect_wakeup(struct sock * sk,struct sock * other)416 static void unix_dgram_peer_wake_disconnect_wakeup(struct sock *sk,
417 						   struct sock *other)
418 {
419 	unix_dgram_peer_wake_disconnect(sk, other);
420 	wake_up_interruptible_poll(sk_sleep(sk),
421 				   EPOLLOUT |
422 				   EPOLLWRNORM |
423 				   EPOLLWRBAND);
424 }
425 
426 /* preconditions:
427  *	- unix_peer(sk) == other
428  *	- association is stable
429  */
unix_dgram_peer_wake_me(struct sock * sk,struct sock * other)430 static int unix_dgram_peer_wake_me(struct sock *sk, struct sock *other)
431 {
432 	int connected;
433 
434 	connected = unix_dgram_peer_wake_connect(sk, other);
435 
436 	/* If other is SOCK_DEAD, we want to make sure we signal
437 	 * POLLOUT, such that a subsequent write() can get a
438 	 * -ECONNREFUSED. Otherwise, if we haven't queued any skbs
439 	 * to other and its full, we will hang waiting for POLLOUT.
440 	 */
441 	if (unix_recvq_full_lockless(other) && !sock_flag(other, SOCK_DEAD))
442 		return 1;
443 
444 	if (connected)
445 		unix_dgram_peer_wake_disconnect(sk, other);
446 
447 	return 0;
448 }
449 
unix_writable(const struct sock * sk)450 static int unix_writable(const struct sock *sk)
451 {
452 	return sk->sk_state != TCP_LISTEN &&
453 	       (refcount_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf;
454 }
455 
unix_write_space(struct sock * sk)456 static void unix_write_space(struct sock *sk)
457 {
458 	struct socket_wq *wq;
459 
460 	rcu_read_lock();
461 	if (unix_writable(sk)) {
462 		wq = rcu_dereference(sk->sk_wq);
463 		if (skwq_has_sleeper(wq))
464 			wake_up_interruptible_sync_poll(&wq->wait,
465 				EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND);
466 		sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
467 	}
468 	rcu_read_unlock();
469 }
470 
471 /* When dgram socket disconnects (or changes its peer), we clear its receive
472  * queue of packets arrived from previous peer. First, it allows to do
473  * flow control based only on wmem_alloc; second, sk connected to peer
474  * may receive messages only from that peer. */
unix_dgram_disconnected(struct sock * sk,struct sock * other)475 static void unix_dgram_disconnected(struct sock *sk, struct sock *other)
476 {
477 	if (!skb_queue_empty(&sk->sk_receive_queue)) {
478 		skb_queue_purge(&sk->sk_receive_queue);
479 		wake_up_interruptible_all(&unix_sk(sk)->peer_wait);
480 
481 		/* If one link of bidirectional dgram pipe is disconnected,
482 		 * we signal error. Messages are lost. Do not make this,
483 		 * when peer was not connected to us.
484 		 */
485 		if (!sock_flag(other, SOCK_DEAD) && unix_peer(other) == sk) {
486 			other->sk_err = ECONNRESET;
487 			other->sk_error_report(other);
488 		}
489 	}
490 }
491 
unix_sock_destructor(struct sock * sk)492 static void unix_sock_destructor(struct sock *sk)
493 {
494 	struct unix_sock *u = unix_sk(sk);
495 
496 	skb_queue_purge(&sk->sk_receive_queue);
497 
498 	WARN_ON(refcount_read(&sk->sk_wmem_alloc));
499 	WARN_ON(!sk_unhashed(sk));
500 	WARN_ON(sk->sk_socket);
501 	if (!sock_flag(sk, SOCK_DEAD)) {
502 		pr_info("Attempt to release alive unix socket: %p\n", sk);
503 		return;
504 	}
505 
506 	if (u->addr)
507 		unix_release_addr(u->addr);
508 
509 	atomic_long_dec(&unix_nr_socks);
510 	local_bh_disable();
511 	sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
512 	local_bh_enable();
513 #ifdef UNIX_REFCNT_DEBUG
514 	pr_debug("UNIX %p is destroyed, %ld are still alive.\n", sk,
515 		atomic_long_read(&unix_nr_socks));
516 #endif
517 }
518 
unix_release_sock(struct sock * sk,int embrion)519 static void unix_release_sock(struct sock *sk, int embrion)
520 {
521 	struct unix_sock *u = unix_sk(sk);
522 	struct path path;
523 	struct sock *skpair;
524 	struct sk_buff *skb;
525 	int state;
526 
527 	unix_remove_socket(sk);
528 
529 	/* Clear state */
530 	unix_state_lock(sk);
531 	sock_orphan(sk);
532 	WRITE_ONCE(sk->sk_shutdown, SHUTDOWN_MASK);
533 	path	     = u->path;
534 	u->path.dentry = NULL;
535 	u->path.mnt = NULL;
536 	state = sk->sk_state;
537 	sk->sk_state = TCP_CLOSE;
538 
539 	skpair = unix_peer(sk);
540 	unix_peer(sk) = NULL;
541 
542 	unix_state_unlock(sk);
543 
544 	wake_up_interruptible_all(&u->peer_wait);
545 
546 	if (skpair != NULL) {
547 		if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) {
548 			unix_state_lock(skpair);
549 			/* No more writes */
550 			WRITE_ONCE(skpair->sk_shutdown, SHUTDOWN_MASK);
551 			if (!skb_queue_empty(&sk->sk_receive_queue) || embrion)
552 				skpair->sk_err = ECONNRESET;
553 			unix_state_unlock(skpair);
554 			skpair->sk_state_change(skpair);
555 			sk_wake_async(skpair, SOCK_WAKE_WAITD, POLL_HUP);
556 		}
557 
558 		unix_dgram_peer_wake_disconnect(sk, skpair);
559 		sock_put(skpair); /* It may now die */
560 	}
561 
562 	/* Try to flush out this socket. Throw out buffers at least */
563 
564 	while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
565 		if (state == TCP_LISTEN)
566 			unix_release_sock(skb->sk, 1);
567 		/* passed fds are erased in the kfree_skb hook	      */
568 		UNIXCB(skb).consumed = skb->len;
569 		kfree_skb(skb);
570 	}
571 
572 	if (path.dentry)
573 		path_put(&path);
574 
575 	sock_put(sk);
576 
577 	/* ---- Socket is dead now and most probably destroyed ---- */
578 
579 	/*
580 	 * Fixme: BSD difference: In BSD all sockets connected to us get
581 	 *	  ECONNRESET and we die on the spot. In Linux we behave
582 	 *	  like files and pipes do and wait for the last
583 	 *	  dereference.
584 	 *
585 	 * Can't we simply set sock->err?
586 	 *
587 	 *	  What the above comment does talk about? --ANK(980817)
588 	 */
589 
590 	if (READ_ONCE(unix_tot_inflight))
591 		unix_gc();		/* Garbage collect fds */
592 }
593 
init_peercred(struct sock * sk)594 static void init_peercred(struct sock *sk)
595 {
596 	const struct cred *old_cred;
597 	struct pid *old_pid;
598 
599 	spin_lock(&sk->sk_peer_lock);
600 	old_pid = sk->sk_peer_pid;
601 	old_cred = sk->sk_peer_cred;
602 	sk->sk_peer_pid  = get_pid(task_tgid(current));
603 	sk->sk_peer_cred = get_current_cred();
604 	spin_unlock(&sk->sk_peer_lock);
605 
606 	put_pid(old_pid);
607 	put_cred(old_cred);
608 }
609 
copy_peercred(struct sock * sk,struct sock * peersk)610 static void copy_peercred(struct sock *sk, struct sock *peersk)
611 {
612 	const struct cred *old_cred;
613 	struct pid *old_pid;
614 
615 	if (sk < peersk) {
616 		spin_lock(&sk->sk_peer_lock);
617 		spin_lock_nested(&peersk->sk_peer_lock, SINGLE_DEPTH_NESTING);
618 	} else {
619 		spin_lock(&peersk->sk_peer_lock);
620 		spin_lock_nested(&sk->sk_peer_lock, SINGLE_DEPTH_NESTING);
621 	}
622 	old_pid = sk->sk_peer_pid;
623 	old_cred = sk->sk_peer_cred;
624 	sk->sk_peer_pid  = get_pid(peersk->sk_peer_pid);
625 	sk->sk_peer_cred = get_cred(peersk->sk_peer_cred);
626 
627 	spin_unlock(&sk->sk_peer_lock);
628 	spin_unlock(&peersk->sk_peer_lock);
629 
630 	put_pid(old_pid);
631 	put_cred(old_cred);
632 }
633 
unix_listen(struct socket * sock,int backlog)634 static int unix_listen(struct socket *sock, int backlog)
635 {
636 	int err;
637 	struct sock *sk = sock->sk;
638 	struct unix_sock *u = unix_sk(sk);
639 
640 	err = -EOPNOTSUPP;
641 	if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET)
642 		goto out;	/* Only stream/seqpacket sockets accept */
643 	err = -EINVAL;
644 	if (!u->addr)
645 		goto out;	/* No listens on an unbound socket */
646 	unix_state_lock(sk);
647 	if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN)
648 		goto out_unlock;
649 	if (backlog > sk->sk_max_ack_backlog)
650 		wake_up_interruptible_all(&u->peer_wait);
651 	sk->sk_max_ack_backlog	= backlog;
652 	sk->sk_state		= TCP_LISTEN;
653 	/* set credentials so connect can copy them */
654 	init_peercred(sk);
655 	err = 0;
656 
657 out_unlock:
658 	unix_state_unlock(sk);
659 out:
660 	return err;
661 }
662 
663 static int unix_release(struct socket *);
664 static int unix_bind(struct socket *, struct sockaddr *, int);
665 static int unix_stream_connect(struct socket *, struct sockaddr *,
666 			       int addr_len, int flags);
667 static int unix_socketpair(struct socket *, struct socket *);
668 static int unix_accept(struct socket *, struct socket *, int, bool);
669 static int unix_getname(struct socket *, struct sockaddr *, int);
670 static __poll_t unix_poll(struct file *, struct socket *, poll_table *);
671 static __poll_t unix_dgram_poll(struct file *, struct socket *,
672 				    poll_table *);
673 static int unix_ioctl(struct socket *, unsigned int, unsigned long);
674 #ifdef CONFIG_COMPAT
675 static int unix_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
676 #endif
677 static int unix_shutdown(struct socket *, int);
678 static int unix_stream_sendmsg(struct socket *, struct msghdr *, size_t);
679 static int unix_stream_recvmsg(struct socket *, struct msghdr *, size_t, int);
680 static ssize_t unix_stream_sendpage(struct socket *, struct page *, int offset,
681 				    size_t size, int flags);
682 static ssize_t unix_stream_splice_read(struct socket *,  loff_t *ppos,
683 				       struct pipe_inode_info *, size_t size,
684 				       unsigned int flags);
685 static int unix_dgram_sendmsg(struct socket *, struct msghdr *, size_t);
686 static int unix_dgram_recvmsg(struct socket *, struct msghdr *, size_t, int);
687 static int unix_dgram_connect(struct socket *, struct sockaddr *,
688 			      int, int);
689 static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t);
690 static int unix_seqpacket_recvmsg(struct socket *, struct msghdr *, size_t,
691 				  int);
692 
unix_set_peek_off(struct sock * sk,int val)693 static int unix_set_peek_off(struct sock *sk, int val)
694 {
695 	struct unix_sock *u = unix_sk(sk);
696 
697 	if (mutex_lock_interruptible(&u->iolock))
698 		return -EINTR;
699 
700 	WRITE_ONCE(sk->sk_peek_off, val);
701 	mutex_unlock(&u->iolock);
702 
703 	return 0;
704 }
705 
706 #ifdef CONFIG_PROC_FS
unix_show_fdinfo(struct seq_file * m,struct socket * sock)707 static void unix_show_fdinfo(struct seq_file *m, struct socket *sock)
708 {
709 	struct sock *sk = sock->sk;
710 	struct unix_sock *u;
711 
712 	if (sk) {
713 		u = unix_sk(sock->sk);
714 		seq_printf(m, "scm_fds: %u\n",
715 			   atomic_read(&u->scm_stat.nr_fds));
716 	}
717 }
718 #else
719 #define unix_show_fdinfo NULL
720 #endif
721 
722 static const struct proto_ops unix_stream_ops = {
723 	.family =	PF_UNIX,
724 	.owner =	THIS_MODULE,
725 	.release =	unix_release,
726 	.bind =		unix_bind,
727 	.connect =	unix_stream_connect,
728 	.socketpair =	unix_socketpair,
729 	.accept =	unix_accept,
730 	.getname =	unix_getname,
731 	.poll =		unix_poll,
732 	.ioctl =	unix_ioctl,
733 #ifdef CONFIG_COMPAT
734 	.compat_ioctl =	unix_compat_ioctl,
735 #endif
736 	.listen =	unix_listen,
737 	.shutdown =	unix_shutdown,
738 	.sendmsg =	unix_stream_sendmsg,
739 	.recvmsg =	unix_stream_recvmsg,
740 	.mmap =		sock_no_mmap,
741 	.sendpage =	unix_stream_sendpage,
742 	.splice_read =	unix_stream_splice_read,
743 	.set_peek_off =	unix_set_peek_off,
744 	.show_fdinfo =	unix_show_fdinfo,
745 };
746 
747 static const struct proto_ops unix_dgram_ops = {
748 	.family =	PF_UNIX,
749 	.owner =	THIS_MODULE,
750 	.release =	unix_release,
751 	.bind =		unix_bind,
752 	.connect =	unix_dgram_connect,
753 	.socketpair =	unix_socketpair,
754 	.accept =	sock_no_accept,
755 	.getname =	unix_getname,
756 	.poll =		unix_dgram_poll,
757 	.ioctl =	unix_ioctl,
758 #ifdef CONFIG_COMPAT
759 	.compat_ioctl =	unix_compat_ioctl,
760 #endif
761 	.listen =	sock_no_listen,
762 	.shutdown =	unix_shutdown,
763 	.sendmsg =	unix_dgram_sendmsg,
764 	.recvmsg =	unix_dgram_recvmsg,
765 	.mmap =		sock_no_mmap,
766 	.sendpage =	sock_no_sendpage,
767 	.set_peek_off =	unix_set_peek_off,
768 	.show_fdinfo =	unix_show_fdinfo,
769 };
770 
771 static const struct proto_ops unix_seqpacket_ops = {
772 	.family =	PF_UNIX,
773 	.owner =	THIS_MODULE,
774 	.release =	unix_release,
775 	.bind =		unix_bind,
776 	.connect =	unix_stream_connect,
777 	.socketpair =	unix_socketpair,
778 	.accept =	unix_accept,
779 	.getname =	unix_getname,
780 	.poll =		unix_dgram_poll,
781 	.ioctl =	unix_ioctl,
782 #ifdef CONFIG_COMPAT
783 	.compat_ioctl =	unix_compat_ioctl,
784 #endif
785 	.listen =	unix_listen,
786 	.shutdown =	unix_shutdown,
787 	.sendmsg =	unix_seqpacket_sendmsg,
788 	.recvmsg =	unix_seqpacket_recvmsg,
789 	.mmap =		sock_no_mmap,
790 	.sendpage =	sock_no_sendpage,
791 	.set_peek_off =	unix_set_peek_off,
792 	.show_fdinfo =	unix_show_fdinfo,
793 };
794 
795 static struct proto unix_proto = {
796 	.name			= "UNIX",
797 	.owner			= THIS_MODULE,
798 	.obj_size		= sizeof(struct unix_sock),
799 };
800 
unix_create1(struct net * net,struct socket * sock,int kern)801 static struct sock *unix_create1(struct net *net, struct socket *sock, int kern)
802 {
803 	struct sock *sk = NULL;
804 	struct unix_sock *u;
805 
806 	atomic_long_inc(&unix_nr_socks);
807 	if (atomic_long_read(&unix_nr_socks) > 2 * get_max_files())
808 		goto out;
809 
810 	sk = sk_alloc(net, PF_UNIX, GFP_KERNEL, &unix_proto, kern);
811 	if (!sk)
812 		goto out;
813 
814 	sock_init_data(sock, sk);
815 
816 	sk->sk_allocation	= GFP_KERNEL_ACCOUNT;
817 	sk->sk_write_space	= unix_write_space;
818 	sk->sk_max_ack_backlog	= net->unx.sysctl_max_dgram_qlen;
819 	sk->sk_destruct		= unix_sock_destructor;
820 	u	  = unix_sk(sk);
821 	u->path.dentry = NULL;
822 	u->path.mnt = NULL;
823 	spin_lock_init(&u->lock);
824 	atomic_long_set(&u->inflight, 0);
825 	INIT_LIST_HEAD(&u->link);
826 	mutex_init(&u->iolock); /* single task reading lock */
827 	mutex_init(&u->bindlock); /* single task binding lock */
828 	init_waitqueue_head(&u->peer_wait);
829 	init_waitqueue_func_entry(&u->peer_wake, unix_dgram_peer_wake_relay);
830 	memset(&u->scm_stat, 0, sizeof(struct scm_stat));
831 	unix_insert_socket(unix_sockets_unbound(sk), sk);
832 out:
833 	if (sk == NULL)
834 		atomic_long_dec(&unix_nr_socks);
835 	else {
836 		local_bh_disable();
837 		sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
838 		local_bh_enable();
839 	}
840 	return sk;
841 }
842 
unix_create(struct net * net,struct socket * sock,int protocol,int kern)843 static int unix_create(struct net *net, struct socket *sock, int protocol,
844 		       int kern)
845 {
846 	if (protocol && protocol != PF_UNIX)
847 		return -EPROTONOSUPPORT;
848 
849 	sock->state = SS_UNCONNECTED;
850 
851 	switch (sock->type) {
852 	case SOCK_STREAM:
853 		sock->ops = &unix_stream_ops;
854 		break;
855 		/*
856 		 *	Believe it or not BSD has AF_UNIX, SOCK_RAW though
857 		 *	nothing uses it.
858 		 */
859 	case SOCK_RAW:
860 		sock->type = SOCK_DGRAM;
861 		fallthrough;
862 	case SOCK_DGRAM:
863 		sock->ops = &unix_dgram_ops;
864 		break;
865 	case SOCK_SEQPACKET:
866 		sock->ops = &unix_seqpacket_ops;
867 		break;
868 	default:
869 		return -ESOCKTNOSUPPORT;
870 	}
871 
872 	return unix_create1(net, sock, kern) ? 0 : -ENOMEM;
873 }
874 
unix_release(struct socket * sock)875 static int unix_release(struct socket *sock)
876 {
877 	struct sock *sk = sock->sk;
878 
879 	if (!sk)
880 		return 0;
881 
882 	unix_release_sock(sk, 0);
883 	sock->sk = NULL;
884 
885 	return 0;
886 }
887 
unix_autobind(struct socket * sock)888 static int unix_autobind(struct socket *sock)
889 {
890 	struct sock *sk = sock->sk;
891 	struct net *net = sock_net(sk);
892 	struct unix_sock *u = unix_sk(sk);
893 	static u32 ordernum = 1;
894 	struct unix_address *addr;
895 	int err;
896 	unsigned int retries = 0;
897 
898 	err = mutex_lock_interruptible(&u->bindlock);
899 	if (err)
900 		return err;
901 
902 	if (u->addr)
903 		goto out;
904 
905 	err = -ENOMEM;
906 	addr = kzalloc(sizeof(*addr) + sizeof(short) + 16, GFP_KERNEL);
907 	if (!addr)
908 		goto out;
909 
910 	addr->name->sun_family = AF_UNIX;
911 	refcount_set(&addr->refcnt, 1);
912 
913 retry:
914 	addr->len = sprintf(addr->name->sun_path+1, "%05x", ordernum) + 1 + sizeof(short);
915 	addr->hash = unix_hash_fold(csum_partial(addr->name, addr->len, 0));
916 
917 	spin_lock(&unix_table_lock);
918 	ordernum = (ordernum+1)&0xFFFFF;
919 
920 	if (__unix_find_socket_byname(net, addr->name, addr->len, sock->type,
921 				      addr->hash)) {
922 		spin_unlock(&unix_table_lock);
923 		/*
924 		 * __unix_find_socket_byname() may take long time if many names
925 		 * are already in use.
926 		 */
927 		cond_resched();
928 		/* Give up if all names seems to be in use. */
929 		if (retries++ == 0xFFFFF) {
930 			err = -ENOSPC;
931 			kfree(addr);
932 			goto out;
933 		}
934 		goto retry;
935 	}
936 	addr->hash ^= sk->sk_type;
937 
938 	__unix_remove_socket(sk);
939 	smp_store_release(&u->addr, addr);
940 	__unix_insert_socket(&unix_socket_table[addr->hash], sk);
941 	spin_unlock(&unix_table_lock);
942 	err = 0;
943 
944 out:	mutex_unlock(&u->bindlock);
945 	return err;
946 }
947 
unix_find_other(struct net * net,struct sockaddr_un * sunname,int len,int type,unsigned int hash,int * error)948 static struct sock *unix_find_other(struct net *net,
949 				    struct sockaddr_un *sunname, int len,
950 				    int type, unsigned int hash, int *error)
951 {
952 	struct sock *u;
953 	struct path path;
954 	int err = 0;
955 
956 	if (sunname->sun_path[0]) {
957 		struct inode *inode;
958 		err = kern_path(sunname->sun_path, LOOKUP_FOLLOW, &path);
959 		if (err)
960 			goto fail;
961 		inode = d_backing_inode(path.dentry);
962 		err = inode_permission(inode, MAY_WRITE);
963 		if (err)
964 			goto put_fail;
965 
966 		err = -ECONNREFUSED;
967 		if (!S_ISSOCK(inode->i_mode))
968 			goto put_fail;
969 		u = unix_find_socket_byinode(inode);
970 		if (!u)
971 			goto put_fail;
972 
973 		if (u->sk_type == type)
974 			touch_atime(&path);
975 
976 		path_put(&path);
977 
978 		err = -EPROTOTYPE;
979 		if (u->sk_type != type) {
980 			sock_put(u);
981 			goto fail;
982 		}
983 	} else {
984 		err = -ECONNREFUSED;
985 		u = unix_find_socket_byname(net, sunname, len, type, hash);
986 		if (u) {
987 			struct dentry *dentry;
988 			dentry = unix_sk(u)->path.dentry;
989 			if (dentry)
990 				touch_atime(&unix_sk(u)->path);
991 		} else
992 			goto fail;
993 	}
994 	return u;
995 
996 put_fail:
997 	path_put(&path);
998 fail:
999 	*error = err;
1000 	return NULL;
1001 }
1002 
unix_mknod(const char * sun_path,umode_t mode,struct path * res)1003 static int unix_mknod(const char *sun_path, umode_t mode, struct path *res)
1004 {
1005 	struct dentry *dentry;
1006 	struct path path;
1007 	int err = 0;
1008 	/*
1009 	 * Get the parent directory, calculate the hash for last
1010 	 * component.
1011 	 */
1012 	dentry = kern_path_create(AT_FDCWD, sun_path, &path, 0);
1013 	err = PTR_ERR(dentry);
1014 	if (IS_ERR(dentry))
1015 		return err;
1016 
1017 	/*
1018 	 * All right, let's create it.
1019 	 */
1020 	err = security_path_mknod(&path, dentry, mode, 0);
1021 	if (!err) {
1022 		err = vfs_mknod(d_inode(path.dentry), dentry, mode, 0);
1023 		if (!err) {
1024 			res->mnt = mntget(path.mnt);
1025 			res->dentry = dget(dentry);
1026 		}
1027 	}
1028 	done_path_create(&path, dentry);
1029 	return err;
1030 }
1031 
unix_bind(struct socket * sock,struct sockaddr * uaddr,int addr_len)1032 static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1033 {
1034 	struct sock *sk = sock->sk;
1035 	struct net *net = sock_net(sk);
1036 	struct unix_sock *u = unix_sk(sk);
1037 	struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr;
1038 	char *sun_path = sunaddr->sun_path;
1039 	int err;
1040 	unsigned int hash;
1041 	struct unix_address *addr;
1042 	struct hlist_head *list;
1043 	struct path path = { };
1044 
1045 	err = -EINVAL;
1046 	if (addr_len < offsetofend(struct sockaddr_un, sun_family) ||
1047 	    sunaddr->sun_family != AF_UNIX)
1048 		goto out;
1049 
1050 	if (addr_len == sizeof(short)) {
1051 		err = unix_autobind(sock);
1052 		goto out;
1053 	}
1054 
1055 	err = unix_mkname(sunaddr, addr_len, &hash);
1056 	if (err < 0)
1057 		goto out;
1058 	addr_len = err;
1059 
1060 	if (sun_path[0]) {
1061 		umode_t mode = S_IFSOCK |
1062 		       (SOCK_INODE(sock)->i_mode & ~current_umask());
1063 		err = unix_mknod(sun_path, mode, &path);
1064 		if (err) {
1065 			if (err == -EEXIST)
1066 				err = -EADDRINUSE;
1067 			goto out;
1068 		}
1069 	}
1070 
1071 	err = mutex_lock_interruptible(&u->bindlock);
1072 	if (err)
1073 		goto out_put;
1074 
1075 	err = -EINVAL;
1076 	if (u->addr)
1077 		goto out_up;
1078 
1079 	err = -ENOMEM;
1080 	addr = kmalloc(sizeof(*addr)+addr_len, GFP_KERNEL);
1081 	if (!addr)
1082 		goto out_up;
1083 
1084 	memcpy(addr->name, sunaddr, addr_len);
1085 	addr->len = addr_len;
1086 	addr->hash = hash ^ sk->sk_type;
1087 	refcount_set(&addr->refcnt, 1);
1088 
1089 	if (sun_path[0]) {
1090 		addr->hash = UNIX_HASH_SIZE;
1091 		hash = d_backing_inode(path.dentry)->i_ino & (UNIX_HASH_SIZE - 1);
1092 		spin_lock(&unix_table_lock);
1093 		u->path = path;
1094 		list = &unix_socket_table[hash];
1095 	} else {
1096 		spin_lock(&unix_table_lock);
1097 		err = -EADDRINUSE;
1098 		if (__unix_find_socket_byname(net, sunaddr, addr_len,
1099 					      sk->sk_type, hash)) {
1100 			unix_release_addr(addr);
1101 			goto out_unlock;
1102 		}
1103 
1104 		list = &unix_socket_table[addr->hash];
1105 	}
1106 
1107 	err = 0;
1108 	__unix_remove_socket(sk);
1109 	smp_store_release(&u->addr, addr);
1110 	__unix_insert_socket(list, sk);
1111 
1112 out_unlock:
1113 	spin_unlock(&unix_table_lock);
1114 out_up:
1115 	mutex_unlock(&u->bindlock);
1116 out_put:
1117 	if (err)
1118 		path_put(&path);
1119 out:
1120 	return err;
1121 }
1122 
unix_state_double_lock(struct sock * sk1,struct sock * sk2)1123 static void unix_state_double_lock(struct sock *sk1, struct sock *sk2)
1124 {
1125 	if (unlikely(sk1 == sk2) || !sk2) {
1126 		unix_state_lock(sk1);
1127 		return;
1128 	}
1129 	if (sk1 > sk2)
1130 		swap(sk1, sk2);
1131 
1132 	unix_state_lock(sk1);
1133 	unix_state_lock_nested(sk2, U_LOCK_SECOND);
1134 }
1135 
unix_state_double_unlock(struct sock * sk1,struct sock * sk2)1136 static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2)
1137 {
1138 	if (unlikely(sk1 == sk2) || !sk2) {
1139 		unix_state_unlock(sk1);
1140 		return;
1141 	}
1142 	unix_state_unlock(sk1);
1143 	unix_state_unlock(sk2);
1144 }
1145 
unix_dgram_connect(struct socket * sock,struct sockaddr * addr,int alen,int flags)1146 static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr,
1147 			      int alen, int flags)
1148 {
1149 	struct sock *sk = sock->sk;
1150 	struct net *net = sock_net(sk);
1151 	struct sockaddr_un *sunaddr = (struct sockaddr_un *)addr;
1152 	struct sock *other;
1153 	unsigned int hash;
1154 	int err;
1155 
1156 	err = -EINVAL;
1157 	if (alen < offsetofend(struct sockaddr, sa_family))
1158 		goto out;
1159 
1160 	if (addr->sa_family != AF_UNSPEC) {
1161 		err = unix_mkname(sunaddr, alen, &hash);
1162 		if (err < 0)
1163 			goto out;
1164 		alen = err;
1165 
1166 		if (test_bit(SOCK_PASSCRED, &sock->flags) &&
1167 		    !unix_sk(sk)->addr && (err = unix_autobind(sock)) != 0)
1168 			goto out;
1169 
1170 restart:
1171 		other = unix_find_other(net, sunaddr, alen, sock->type, hash, &err);
1172 		if (!other)
1173 			goto out;
1174 
1175 		unix_state_double_lock(sk, other);
1176 
1177 		/* Apparently VFS overslept socket death. Retry. */
1178 		if (sock_flag(other, SOCK_DEAD)) {
1179 			unix_state_double_unlock(sk, other);
1180 			sock_put(other);
1181 			goto restart;
1182 		}
1183 
1184 		err = -EPERM;
1185 		if (!unix_may_send(sk, other))
1186 			goto out_unlock;
1187 
1188 		err = security_unix_may_send(sk->sk_socket, other->sk_socket);
1189 		if (err)
1190 			goto out_unlock;
1191 
1192 	} else {
1193 		/*
1194 		 *	1003.1g breaking connected state with AF_UNSPEC
1195 		 */
1196 		other = NULL;
1197 		unix_state_double_lock(sk, other);
1198 	}
1199 
1200 	/*
1201 	 * If it was connected, reconnect.
1202 	 */
1203 	if (unix_peer(sk)) {
1204 		struct sock *old_peer = unix_peer(sk);
1205 		unix_peer(sk) = other;
1206 		unix_dgram_peer_wake_disconnect_wakeup(sk, old_peer);
1207 
1208 		unix_state_double_unlock(sk, other);
1209 
1210 		if (other != old_peer)
1211 			unix_dgram_disconnected(sk, old_peer);
1212 		sock_put(old_peer);
1213 	} else {
1214 		unix_peer(sk) = other;
1215 		unix_state_double_unlock(sk, other);
1216 	}
1217 	return 0;
1218 
1219 out_unlock:
1220 	unix_state_double_unlock(sk, other);
1221 	sock_put(other);
1222 out:
1223 	return err;
1224 }
1225 
unix_wait_for_peer(struct sock * other,long timeo)1226 static long unix_wait_for_peer(struct sock *other, long timeo)
1227 	__releases(&unix_sk(other)->lock)
1228 {
1229 	struct unix_sock *u = unix_sk(other);
1230 	int sched;
1231 	DEFINE_WAIT(wait);
1232 
1233 	prepare_to_wait_exclusive(&u->peer_wait, &wait, TASK_INTERRUPTIBLE);
1234 
1235 	sched = !sock_flag(other, SOCK_DEAD) &&
1236 		!(other->sk_shutdown & RCV_SHUTDOWN) &&
1237 		unix_recvq_full_lockless(other);
1238 
1239 	unix_state_unlock(other);
1240 
1241 	if (sched)
1242 		timeo = schedule_timeout(timeo);
1243 
1244 	finish_wait(&u->peer_wait, &wait);
1245 	return timeo;
1246 }
1247 
unix_stream_connect(struct socket * sock,struct sockaddr * uaddr,int addr_len,int flags)1248 static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr,
1249 			       int addr_len, int flags)
1250 {
1251 	struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr;
1252 	struct sock *sk = sock->sk;
1253 	struct net *net = sock_net(sk);
1254 	struct unix_sock *u = unix_sk(sk), *newu, *otheru;
1255 	struct sock *newsk = NULL;
1256 	struct sock *other = NULL;
1257 	struct sk_buff *skb = NULL;
1258 	unsigned int hash;
1259 	int st;
1260 	int err;
1261 	long timeo;
1262 
1263 	err = unix_mkname(sunaddr, addr_len, &hash);
1264 	if (err < 0)
1265 		goto out;
1266 	addr_len = err;
1267 
1268 	if (test_bit(SOCK_PASSCRED, &sock->flags) && !u->addr &&
1269 	    (err = unix_autobind(sock)) != 0)
1270 		goto out;
1271 
1272 	timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
1273 
1274 	/* First of all allocate resources.
1275 	   If we will make it after state is locked,
1276 	   we will have to recheck all again in any case.
1277 	 */
1278 
1279 	err = -ENOMEM;
1280 
1281 	/* create new sock for complete connection */
1282 	newsk = unix_create1(sock_net(sk), NULL, 0);
1283 	if (newsk == NULL)
1284 		goto out;
1285 
1286 	/* Allocate skb for sending to listening sock */
1287 	skb = sock_wmalloc(newsk, 1, 0, GFP_KERNEL);
1288 	if (skb == NULL)
1289 		goto out;
1290 
1291 restart:
1292 	/*  Find listening sock. */
1293 	other = unix_find_other(net, sunaddr, addr_len, sk->sk_type, hash, &err);
1294 	if (!other)
1295 		goto out;
1296 
1297 	/* Latch state of peer */
1298 	unix_state_lock(other);
1299 
1300 	/* Apparently VFS overslept socket death. Retry. */
1301 	if (sock_flag(other, SOCK_DEAD)) {
1302 		unix_state_unlock(other);
1303 		sock_put(other);
1304 		goto restart;
1305 	}
1306 
1307 	err = -ECONNREFUSED;
1308 	if (other->sk_state != TCP_LISTEN)
1309 		goto out_unlock;
1310 	if (other->sk_shutdown & RCV_SHUTDOWN)
1311 		goto out_unlock;
1312 
1313 	if (unix_recvq_full(other)) {
1314 		err = -EAGAIN;
1315 		if (!timeo)
1316 			goto out_unlock;
1317 
1318 		timeo = unix_wait_for_peer(other, timeo);
1319 
1320 		err = sock_intr_errno(timeo);
1321 		if (signal_pending(current))
1322 			goto out;
1323 		sock_put(other);
1324 		goto restart;
1325 	}
1326 
1327 	/* Latch our state.
1328 
1329 	   It is tricky place. We need to grab our state lock and cannot
1330 	   drop lock on peer. It is dangerous because deadlock is
1331 	   possible. Connect to self case and simultaneous
1332 	   attempt to connect are eliminated by checking socket
1333 	   state. other is TCP_LISTEN, if sk is TCP_LISTEN we
1334 	   check this before attempt to grab lock.
1335 
1336 	   Well, and we have to recheck the state after socket locked.
1337 	 */
1338 	st = sk->sk_state;
1339 
1340 	switch (st) {
1341 	case TCP_CLOSE:
1342 		/* This is ok... continue with connect */
1343 		break;
1344 	case TCP_ESTABLISHED:
1345 		/* Socket is already connected */
1346 		err = -EISCONN;
1347 		goto out_unlock;
1348 	default:
1349 		err = -EINVAL;
1350 		goto out_unlock;
1351 	}
1352 
1353 	unix_state_lock_nested(sk, U_LOCK_SECOND);
1354 
1355 	if (sk->sk_state != st) {
1356 		unix_state_unlock(sk);
1357 		unix_state_unlock(other);
1358 		sock_put(other);
1359 		goto restart;
1360 	}
1361 
1362 	err = security_unix_stream_connect(sk, other, newsk);
1363 	if (err) {
1364 		unix_state_unlock(sk);
1365 		goto out_unlock;
1366 	}
1367 
1368 	/* The way is open! Fastly set all the necessary fields... */
1369 
1370 	sock_hold(sk);
1371 	unix_peer(newsk)	= sk;
1372 	newsk->sk_state		= TCP_ESTABLISHED;
1373 	newsk->sk_type		= sk->sk_type;
1374 	init_peercred(newsk);
1375 	newu = unix_sk(newsk);
1376 	RCU_INIT_POINTER(newsk->sk_wq, &newu->peer_wq);
1377 	otheru = unix_sk(other);
1378 
1379 	/* copy address information from listening to new sock
1380 	 *
1381 	 * The contents of *(otheru->addr) and otheru->path
1382 	 * are seen fully set up here, since we have found
1383 	 * otheru in hash under unix_table_lock.  Insertion
1384 	 * into the hash chain we'd found it in had been done
1385 	 * in an earlier critical area protected by unix_table_lock,
1386 	 * the same one where we'd set *(otheru->addr) contents,
1387 	 * as well as otheru->path and otheru->addr itself.
1388 	 *
1389 	 * Using smp_store_release() here to set newu->addr
1390 	 * is enough to make those stores, as well as stores
1391 	 * to newu->path visible to anyone who gets newu->addr
1392 	 * by smp_load_acquire().  IOW, the same warranties
1393 	 * as for unix_sock instances bound in unix_bind() or
1394 	 * in unix_autobind().
1395 	 */
1396 	if (otheru->path.dentry) {
1397 		path_get(&otheru->path);
1398 		newu->path = otheru->path;
1399 	}
1400 	refcount_inc(&otheru->addr->refcnt);
1401 	smp_store_release(&newu->addr, otheru->addr);
1402 
1403 	/* Set credentials */
1404 	copy_peercred(sk, other);
1405 
1406 	sock->state	= SS_CONNECTED;
1407 	sk->sk_state	= TCP_ESTABLISHED;
1408 	sock_hold(newsk);
1409 
1410 	smp_mb__after_atomic();	/* sock_hold() does an atomic_inc() */
1411 	unix_peer(sk)	= newsk;
1412 
1413 	unix_state_unlock(sk);
1414 
1415 	/* take ten and and send info to listening sock */
1416 	spin_lock(&other->sk_receive_queue.lock);
1417 	__skb_queue_tail(&other->sk_receive_queue, skb);
1418 	spin_unlock(&other->sk_receive_queue.lock);
1419 	unix_state_unlock(other);
1420 	other->sk_data_ready(other);
1421 	sock_put(other);
1422 	return 0;
1423 
1424 out_unlock:
1425 	if (other)
1426 		unix_state_unlock(other);
1427 
1428 out:
1429 	kfree_skb(skb);
1430 	if (newsk)
1431 		unix_release_sock(newsk, 0);
1432 	if (other)
1433 		sock_put(other);
1434 	return err;
1435 }
1436 
unix_socketpair(struct socket * socka,struct socket * sockb)1437 static int unix_socketpair(struct socket *socka, struct socket *sockb)
1438 {
1439 	struct sock *ska = socka->sk, *skb = sockb->sk;
1440 
1441 	/* Join our sockets back to back */
1442 	sock_hold(ska);
1443 	sock_hold(skb);
1444 	unix_peer(ska) = skb;
1445 	unix_peer(skb) = ska;
1446 	init_peercred(ska);
1447 	init_peercred(skb);
1448 
1449 	if (ska->sk_type != SOCK_DGRAM) {
1450 		ska->sk_state = TCP_ESTABLISHED;
1451 		skb->sk_state = TCP_ESTABLISHED;
1452 		socka->state  = SS_CONNECTED;
1453 		sockb->state  = SS_CONNECTED;
1454 	}
1455 	return 0;
1456 }
1457 
unix_sock_inherit_flags(const struct socket * old,struct socket * new)1458 static void unix_sock_inherit_flags(const struct socket *old,
1459 				    struct socket *new)
1460 {
1461 	if (test_bit(SOCK_PASSCRED, &old->flags))
1462 		set_bit(SOCK_PASSCRED, &new->flags);
1463 	if (test_bit(SOCK_PASSSEC, &old->flags))
1464 		set_bit(SOCK_PASSSEC, &new->flags);
1465 }
1466 
unix_accept(struct socket * sock,struct socket * newsock,int flags,bool kern)1467 static int unix_accept(struct socket *sock, struct socket *newsock, int flags,
1468 		       bool kern)
1469 {
1470 	struct sock *sk = sock->sk;
1471 	struct sock *tsk;
1472 	struct sk_buff *skb;
1473 	int err;
1474 
1475 	err = -EOPNOTSUPP;
1476 	if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET)
1477 		goto out;
1478 
1479 	err = -EINVAL;
1480 	if (sk->sk_state != TCP_LISTEN)
1481 		goto out;
1482 
1483 	/* If socket state is TCP_LISTEN it cannot change (for now...),
1484 	 * so that no locks are necessary.
1485 	 */
1486 
1487 	skb = skb_recv_datagram(sk, 0, flags&O_NONBLOCK, &err);
1488 	if (!skb) {
1489 		/* This means receive shutdown. */
1490 		if (err == 0)
1491 			err = -EINVAL;
1492 		goto out;
1493 	}
1494 
1495 	tsk = skb->sk;
1496 	skb_free_datagram(sk, skb);
1497 	wake_up_interruptible(&unix_sk(sk)->peer_wait);
1498 
1499 	/* attach accepted sock to socket */
1500 	unix_state_lock(tsk);
1501 	newsock->state = SS_CONNECTED;
1502 	unix_sock_inherit_flags(sock, newsock);
1503 	sock_graft(tsk, newsock);
1504 	unix_state_unlock(tsk);
1505 	return 0;
1506 
1507 out:
1508 	return err;
1509 }
1510 
1511 
unix_getname(struct socket * sock,struct sockaddr * uaddr,int peer)1512 static int unix_getname(struct socket *sock, struct sockaddr *uaddr, int peer)
1513 {
1514 	struct sock *sk = sock->sk;
1515 	struct unix_address *addr;
1516 	DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr, uaddr);
1517 	int err = 0;
1518 
1519 	if (peer) {
1520 		sk = unix_peer_get(sk);
1521 
1522 		err = -ENOTCONN;
1523 		if (!sk)
1524 			goto out;
1525 		err = 0;
1526 	} else {
1527 		sock_hold(sk);
1528 	}
1529 
1530 	addr = smp_load_acquire(&unix_sk(sk)->addr);
1531 	if (!addr) {
1532 		sunaddr->sun_family = AF_UNIX;
1533 		sunaddr->sun_path[0] = 0;
1534 		err = sizeof(short);
1535 	} else {
1536 		err = addr->len;
1537 		memcpy(sunaddr, addr->name, addr->len);
1538 	}
1539 	sock_put(sk);
1540 out:
1541 	return err;
1542 }
1543 
unix_peek_fds(struct scm_cookie * scm,struct sk_buff * skb)1544 static void unix_peek_fds(struct scm_cookie *scm, struct sk_buff *skb)
1545 {
1546 	scm->fp = scm_fp_dup(UNIXCB(skb).fp);
1547 
1548 	/*
1549 	 * Garbage collection of unix sockets starts by selecting a set of
1550 	 * candidate sockets which have reference only from being in flight
1551 	 * (total_refs == inflight_refs).  This condition is checked once during
1552 	 * the candidate collection phase, and candidates are marked as such, so
1553 	 * that non-candidates can later be ignored.  While inflight_refs is
1554 	 * protected by unix_gc_lock, total_refs (file count) is not, hence this
1555 	 * is an instantaneous decision.
1556 	 *
1557 	 * Once a candidate, however, the socket must not be reinstalled into a
1558 	 * file descriptor while the garbage collection is in progress.
1559 	 *
1560 	 * If the above conditions are met, then the directed graph of
1561 	 * candidates (*) does not change while unix_gc_lock is held.
1562 	 *
1563 	 * Any operations that changes the file count through file descriptors
1564 	 * (dup, close, sendmsg) does not change the graph since candidates are
1565 	 * not installed in fds.
1566 	 *
1567 	 * Dequeing a candidate via recvmsg would install it into an fd, but
1568 	 * that takes unix_gc_lock to decrement the inflight count, so it's
1569 	 * serialized with garbage collection.
1570 	 *
1571 	 * MSG_PEEK is special in that it does not change the inflight count,
1572 	 * yet does install the socket into an fd.  The following lock/unlock
1573 	 * pair is to ensure serialization with garbage collection.  It must be
1574 	 * done between incrementing the file count and installing the file into
1575 	 * an fd.
1576 	 *
1577 	 * If garbage collection starts after the barrier provided by the
1578 	 * lock/unlock, then it will see the elevated refcount and not mark this
1579 	 * as a candidate.  If a garbage collection is already in progress
1580 	 * before the file count was incremented, then the lock/unlock pair will
1581 	 * ensure that garbage collection is finished before progressing to
1582 	 * installing the fd.
1583 	 *
1584 	 * (*) A -> B where B is on the queue of A or B is on the queue of C
1585 	 * which is on the queue of listening socket A.
1586 	 */
1587 	spin_lock(&unix_gc_lock);
1588 	spin_unlock(&unix_gc_lock);
1589 }
1590 
unix_scm_to_skb(struct scm_cookie * scm,struct sk_buff * skb,bool send_fds)1591 static int unix_scm_to_skb(struct scm_cookie *scm, struct sk_buff *skb, bool send_fds)
1592 {
1593 	int err = 0;
1594 
1595 	UNIXCB(skb).pid  = get_pid(scm->pid);
1596 	UNIXCB(skb).uid = scm->creds.uid;
1597 	UNIXCB(skb).gid = scm->creds.gid;
1598 	UNIXCB(skb).fp = NULL;
1599 	unix_get_secdata(scm, skb);
1600 	if (scm->fp && send_fds)
1601 		err = unix_attach_fds(scm, skb);
1602 
1603 	skb->destructor = unix_destruct_scm;
1604 	return err;
1605 }
1606 
unix_passcred_enabled(const struct socket * sock,const struct sock * other)1607 static bool unix_passcred_enabled(const struct socket *sock,
1608 				  const struct sock *other)
1609 {
1610 	return test_bit(SOCK_PASSCRED, &sock->flags) ||
1611 	       !other->sk_socket ||
1612 	       test_bit(SOCK_PASSCRED, &other->sk_socket->flags);
1613 }
1614 
1615 /*
1616  * Some apps rely on write() giving SCM_CREDENTIALS
1617  * We include credentials if source or destination socket
1618  * asserted SOCK_PASSCRED.
1619  */
maybe_add_creds(struct sk_buff * skb,const struct socket * sock,const struct sock * other)1620 static void maybe_add_creds(struct sk_buff *skb, const struct socket *sock,
1621 			    const struct sock *other)
1622 {
1623 	if (UNIXCB(skb).pid)
1624 		return;
1625 	if (unix_passcred_enabled(sock, other)) {
1626 		UNIXCB(skb).pid  = get_pid(task_tgid(current));
1627 		current_uid_gid(&UNIXCB(skb).uid, &UNIXCB(skb).gid);
1628 	}
1629 }
1630 
maybe_init_creds(struct scm_cookie * scm,struct socket * socket,const struct sock * other)1631 static int maybe_init_creds(struct scm_cookie *scm,
1632 			    struct socket *socket,
1633 			    const struct sock *other)
1634 {
1635 	int err;
1636 	struct msghdr msg = { .msg_controllen = 0 };
1637 
1638 	err = scm_send(socket, &msg, scm, false);
1639 	if (err)
1640 		return err;
1641 
1642 	if (unix_passcred_enabled(socket, other)) {
1643 		scm->pid = get_pid(task_tgid(current));
1644 		current_uid_gid(&scm->creds.uid, &scm->creds.gid);
1645 	}
1646 	return err;
1647 }
1648 
unix_skb_scm_eq(struct sk_buff * skb,struct scm_cookie * scm)1649 static bool unix_skb_scm_eq(struct sk_buff *skb,
1650 			    struct scm_cookie *scm)
1651 {
1652 	const struct unix_skb_parms *u = &UNIXCB(skb);
1653 
1654 	return u->pid == scm->pid &&
1655 	       uid_eq(u->uid, scm->creds.uid) &&
1656 	       gid_eq(u->gid, scm->creds.gid) &&
1657 	       unix_secdata_eq(scm, skb);
1658 }
1659 
scm_stat_add(struct sock * sk,struct sk_buff * skb)1660 static void scm_stat_add(struct sock *sk, struct sk_buff *skb)
1661 {
1662 	struct scm_fp_list *fp = UNIXCB(skb).fp;
1663 	struct unix_sock *u = unix_sk(sk);
1664 
1665 	if (unlikely(fp && fp->count))
1666 		atomic_add(fp->count, &u->scm_stat.nr_fds);
1667 }
1668 
scm_stat_del(struct sock * sk,struct sk_buff * skb)1669 static void scm_stat_del(struct sock *sk, struct sk_buff *skb)
1670 {
1671 	struct scm_fp_list *fp = UNIXCB(skb).fp;
1672 	struct unix_sock *u = unix_sk(sk);
1673 
1674 	if (unlikely(fp && fp->count))
1675 		atomic_sub(fp->count, &u->scm_stat.nr_fds);
1676 }
1677 
1678 /*
1679  *	Send AF_UNIX data.
1680  */
1681 
unix_dgram_sendmsg(struct socket * sock,struct msghdr * msg,size_t len)1682 static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
1683 			      size_t len)
1684 {
1685 	struct sock *sk = sock->sk;
1686 	struct net *net = sock_net(sk);
1687 	struct unix_sock *u = unix_sk(sk);
1688 	DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr, msg->msg_name);
1689 	struct sock *other = NULL;
1690 	int namelen = 0; /* fake GCC */
1691 	int err;
1692 	unsigned int hash;
1693 	struct sk_buff *skb;
1694 	long timeo;
1695 	struct scm_cookie scm;
1696 	int data_len = 0;
1697 	int sk_locked;
1698 
1699 	wait_for_unix_gc();
1700 	err = scm_send(sock, msg, &scm, false);
1701 	if (err < 0)
1702 		return err;
1703 
1704 	err = -EOPNOTSUPP;
1705 	if (msg->msg_flags&MSG_OOB)
1706 		goto out;
1707 
1708 	if (msg->msg_namelen) {
1709 		err = unix_mkname(sunaddr, msg->msg_namelen, &hash);
1710 		if (err < 0)
1711 			goto out;
1712 		namelen = err;
1713 	} else {
1714 		sunaddr = NULL;
1715 		err = -ENOTCONN;
1716 		other = unix_peer_get(sk);
1717 		if (!other)
1718 			goto out;
1719 	}
1720 
1721 	if (test_bit(SOCK_PASSCRED, &sock->flags) && !u->addr
1722 	    && (err = unix_autobind(sock)) != 0)
1723 		goto out;
1724 
1725 	err = -EMSGSIZE;
1726 	if (len > sk->sk_sndbuf - 32)
1727 		goto out;
1728 
1729 	if (len > SKB_MAX_ALLOC) {
1730 		data_len = min_t(size_t,
1731 				 len - SKB_MAX_ALLOC,
1732 				 MAX_SKB_FRAGS * PAGE_SIZE);
1733 		data_len = PAGE_ALIGN(data_len);
1734 
1735 		BUILD_BUG_ON(SKB_MAX_ALLOC < PAGE_SIZE);
1736 	}
1737 
1738 	skb = sock_alloc_send_pskb(sk, len - data_len, data_len,
1739 				   msg->msg_flags & MSG_DONTWAIT, &err,
1740 				   PAGE_ALLOC_COSTLY_ORDER);
1741 	if (skb == NULL)
1742 		goto out;
1743 
1744 	err = unix_scm_to_skb(&scm, skb, true);
1745 	if (err < 0)
1746 		goto out_free;
1747 
1748 	skb_put(skb, len - data_len);
1749 	skb->data_len = data_len;
1750 	skb->len = len;
1751 	err = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, len);
1752 	if (err)
1753 		goto out_free;
1754 
1755 	timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
1756 
1757 restart:
1758 	if (!other) {
1759 		err = -ECONNRESET;
1760 		if (sunaddr == NULL)
1761 			goto out_free;
1762 
1763 		other = unix_find_other(net, sunaddr, namelen, sk->sk_type,
1764 					hash, &err);
1765 		if (other == NULL)
1766 			goto out_free;
1767 	}
1768 
1769 	if (sk_filter(other, skb) < 0) {
1770 		/* Toss the packet but do not return any error to the sender */
1771 		err = len;
1772 		goto out_free;
1773 	}
1774 
1775 	sk_locked = 0;
1776 	unix_state_lock(other);
1777 restart_locked:
1778 	err = -EPERM;
1779 	if (!unix_may_send(sk, other))
1780 		goto out_unlock;
1781 
1782 	if (unlikely(sock_flag(other, SOCK_DEAD))) {
1783 		/*
1784 		 *	Check with 1003.1g - what should
1785 		 *	datagram error
1786 		 */
1787 		unix_state_unlock(other);
1788 		sock_put(other);
1789 
1790 		if (!sk_locked)
1791 			unix_state_lock(sk);
1792 
1793 		err = 0;
1794 		if (unix_peer(sk) == other) {
1795 			unix_peer(sk) = NULL;
1796 			unix_dgram_peer_wake_disconnect_wakeup(sk, other);
1797 
1798 			unix_state_unlock(sk);
1799 
1800 			unix_dgram_disconnected(sk, other);
1801 			sock_put(other);
1802 			err = -ECONNREFUSED;
1803 		} else {
1804 			unix_state_unlock(sk);
1805 		}
1806 
1807 		other = NULL;
1808 		if (err)
1809 			goto out_free;
1810 		goto restart;
1811 	}
1812 
1813 	err = -EPIPE;
1814 	if (other->sk_shutdown & RCV_SHUTDOWN)
1815 		goto out_unlock;
1816 
1817 	if (sk->sk_type != SOCK_SEQPACKET) {
1818 		err = security_unix_may_send(sk->sk_socket, other->sk_socket);
1819 		if (err)
1820 			goto out_unlock;
1821 	}
1822 
1823 	/* other == sk && unix_peer(other) != sk if
1824 	 * - unix_peer(sk) == NULL, destination address bound to sk
1825 	 * - unix_peer(sk) == sk by time of get but disconnected before lock
1826 	 */
1827 	if (other != sk &&
1828 	    unlikely(unix_peer(other) != sk &&
1829 	    unix_recvq_full_lockless(other))) {
1830 		if (timeo) {
1831 			timeo = unix_wait_for_peer(other, timeo);
1832 
1833 			err = sock_intr_errno(timeo);
1834 			if (signal_pending(current))
1835 				goto out_free;
1836 
1837 			goto restart;
1838 		}
1839 
1840 		if (!sk_locked) {
1841 			unix_state_unlock(other);
1842 			unix_state_double_lock(sk, other);
1843 		}
1844 
1845 		if (unix_peer(sk) != other ||
1846 		    unix_dgram_peer_wake_me(sk, other)) {
1847 			err = -EAGAIN;
1848 			sk_locked = 1;
1849 			goto out_unlock;
1850 		}
1851 
1852 		if (!sk_locked) {
1853 			sk_locked = 1;
1854 			goto restart_locked;
1855 		}
1856 	}
1857 
1858 	if (unlikely(sk_locked))
1859 		unix_state_unlock(sk);
1860 
1861 	if (sock_flag(other, SOCK_RCVTSTAMP))
1862 		__net_timestamp(skb);
1863 	maybe_add_creds(skb, sock, other);
1864 	scm_stat_add(other, skb);
1865 	skb_queue_tail(&other->sk_receive_queue, skb);
1866 	unix_state_unlock(other);
1867 	other->sk_data_ready(other);
1868 	sock_put(other);
1869 	scm_destroy(&scm);
1870 	return len;
1871 
1872 out_unlock:
1873 	if (sk_locked)
1874 		unix_state_unlock(sk);
1875 	unix_state_unlock(other);
1876 out_free:
1877 	kfree_skb(skb);
1878 out:
1879 	if (other)
1880 		sock_put(other);
1881 	scm_destroy(&scm);
1882 	return err;
1883 }
1884 
1885 /* We use paged skbs for stream sockets, and limit occupancy to 32768
1886  * bytes, and a minimum of a full page.
1887  */
1888 #define UNIX_SKB_FRAGS_SZ (PAGE_SIZE << get_order(32768))
1889 
unix_stream_sendmsg(struct socket * sock,struct msghdr * msg,size_t len)1890 static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg,
1891 			       size_t len)
1892 {
1893 	struct sock *sk = sock->sk;
1894 	struct sock *other = NULL;
1895 	int err, size;
1896 	struct sk_buff *skb;
1897 	int sent = 0;
1898 	struct scm_cookie scm;
1899 	bool fds_sent = false;
1900 	int data_len;
1901 
1902 	wait_for_unix_gc();
1903 	err = scm_send(sock, msg, &scm, false);
1904 	if (err < 0)
1905 		return err;
1906 
1907 	err = -EOPNOTSUPP;
1908 	if (msg->msg_flags&MSG_OOB)
1909 		goto out_err;
1910 
1911 	if (msg->msg_namelen) {
1912 		err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP;
1913 		goto out_err;
1914 	} else {
1915 		err = -ENOTCONN;
1916 		other = unix_peer(sk);
1917 		if (!other)
1918 			goto out_err;
1919 	}
1920 
1921 	if (sk->sk_shutdown & SEND_SHUTDOWN)
1922 		goto pipe_err;
1923 
1924 	while (sent < len) {
1925 		size = len - sent;
1926 
1927 		/* Keep two messages in the pipe so it schedules better */
1928 		size = min_t(int, size, (sk->sk_sndbuf >> 1) - 64);
1929 
1930 		/* allow fallback to order-0 allocations */
1931 		size = min_t(int, size, SKB_MAX_HEAD(0) + UNIX_SKB_FRAGS_SZ);
1932 
1933 		data_len = max_t(int, 0, size - SKB_MAX_HEAD(0));
1934 
1935 		data_len = min_t(size_t, size, PAGE_ALIGN(data_len));
1936 
1937 		skb = sock_alloc_send_pskb(sk, size - data_len, data_len,
1938 					   msg->msg_flags & MSG_DONTWAIT, &err,
1939 					   get_order(UNIX_SKB_FRAGS_SZ));
1940 		if (!skb)
1941 			goto out_err;
1942 
1943 		/* Only send the fds in the first buffer */
1944 		err = unix_scm_to_skb(&scm, skb, !fds_sent);
1945 		if (err < 0) {
1946 			kfree_skb(skb);
1947 			goto out_err;
1948 		}
1949 		fds_sent = true;
1950 
1951 		skb_put(skb, size - data_len);
1952 		skb->data_len = data_len;
1953 		skb->len = size;
1954 		err = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, size);
1955 		if (err) {
1956 			kfree_skb(skb);
1957 			goto out_err;
1958 		}
1959 
1960 		unix_state_lock(other);
1961 
1962 		if (sock_flag(other, SOCK_DEAD) ||
1963 		    (other->sk_shutdown & RCV_SHUTDOWN))
1964 			goto pipe_err_free;
1965 
1966 		maybe_add_creds(skb, sock, other);
1967 		scm_stat_add(other, skb);
1968 		skb_queue_tail(&other->sk_receive_queue, skb);
1969 		unix_state_unlock(other);
1970 		other->sk_data_ready(other);
1971 		sent += size;
1972 	}
1973 
1974 	scm_destroy(&scm);
1975 
1976 	return sent;
1977 
1978 pipe_err_free:
1979 	unix_state_unlock(other);
1980 	kfree_skb(skb);
1981 pipe_err:
1982 	if (sent == 0 && !(msg->msg_flags&MSG_NOSIGNAL))
1983 		send_sig(SIGPIPE, current, 0);
1984 	err = -EPIPE;
1985 out_err:
1986 	scm_destroy(&scm);
1987 	return sent ? : err;
1988 }
1989 
unix_stream_sendpage(struct socket * socket,struct page * page,int offset,size_t size,int flags)1990 static ssize_t unix_stream_sendpage(struct socket *socket, struct page *page,
1991 				    int offset, size_t size, int flags)
1992 {
1993 	int err;
1994 	bool send_sigpipe = false;
1995 	bool init_scm = true;
1996 	struct scm_cookie scm;
1997 	struct sock *other, *sk = socket->sk;
1998 	struct sk_buff *skb, *newskb = NULL, *tail = NULL;
1999 
2000 	if (flags & MSG_OOB)
2001 		return -EOPNOTSUPP;
2002 
2003 	other = unix_peer(sk);
2004 	if (!other || sk->sk_state != TCP_ESTABLISHED)
2005 		return -ENOTCONN;
2006 
2007 	if (false) {
2008 alloc_skb:
2009 		spin_unlock(&other->sk_receive_queue.lock);
2010 		unix_state_unlock(other);
2011 		mutex_unlock(&unix_sk(other)->iolock);
2012 		newskb = sock_alloc_send_pskb(sk, 0, 0, flags & MSG_DONTWAIT,
2013 					      &err, 0);
2014 		if (!newskb)
2015 			goto err;
2016 	}
2017 
2018 	/* we must acquire iolock as we modify already present
2019 	 * skbs in the sk_receive_queue and mess with skb->len
2020 	 */
2021 	err = mutex_lock_interruptible(&unix_sk(other)->iolock);
2022 	if (err) {
2023 		err = flags & MSG_DONTWAIT ? -EAGAIN : -ERESTARTSYS;
2024 		goto err;
2025 	}
2026 
2027 	if (sk->sk_shutdown & SEND_SHUTDOWN) {
2028 		err = -EPIPE;
2029 		send_sigpipe = true;
2030 		goto err_unlock;
2031 	}
2032 
2033 	unix_state_lock(other);
2034 
2035 	if (sock_flag(other, SOCK_DEAD) ||
2036 	    other->sk_shutdown & RCV_SHUTDOWN) {
2037 		err = -EPIPE;
2038 		send_sigpipe = true;
2039 		goto err_state_unlock;
2040 	}
2041 
2042 	if (init_scm) {
2043 		err = maybe_init_creds(&scm, socket, other);
2044 		if (err)
2045 			goto err_state_unlock;
2046 		init_scm = false;
2047 	}
2048 
2049 	spin_lock(&other->sk_receive_queue.lock);
2050 	skb = skb_peek_tail(&other->sk_receive_queue);
2051 	if (tail && tail == skb) {
2052 		skb = newskb;
2053 	} else if (!skb || !unix_skb_scm_eq(skb, &scm)) {
2054 		if (newskb) {
2055 			skb = newskb;
2056 		} else {
2057 			tail = skb;
2058 			goto alloc_skb;
2059 		}
2060 	} else if (newskb) {
2061 		/* this is fast path, we don't necessarily need to
2062 		 * call to kfree_skb even though with newskb == NULL
2063 		 * this - does no harm
2064 		 */
2065 		consume_skb(newskb);
2066 		newskb = NULL;
2067 	}
2068 
2069 	if (skb_append_pagefrags(skb, page, offset, size)) {
2070 		tail = skb;
2071 		goto alloc_skb;
2072 	}
2073 
2074 	skb->len += size;
2075 	skb->data_len += size;
2076 	skb->truesize += size;
2077 	refcount_add(size, &sk->sk_wmem_alloc);
2078 
2079 	if (newskb) {
2080 		unix_scm_to_skb(&scm, skb, false);
2081 		__skb_queue_tail(&other->sk_receive_queue, newskb);
2082 	}
2083 
2084 	spin_unlock(&other->sk_receive_queue.lock);
2085 	unix_state_unlock(other);
2086 	mutex_unlock(&unix_sk(other)->iolock);
2087 
2088 	other->sk_data_ready(other);
2089 	scm_destroy(&scm);
2090 	return size;
2091 
2092 err_state_unlock:
2093 	unix_state_unlock(other);
2094 err_unlock:
2095 	mutex_unlock(&unix_sk(other)->iolock);
2096 err:
2097 	kfree_skb(newskb);
2098 	if (send_sigpipe && !(flags & MSG_NOSIGNAL))
2099 		send_sig(SIGPIPE, current, 0);
2100 	if (!init_scm)
2101 		scm_destroy(&scm);
2102 	return err;
2103 }
2104 
unix_seqpacket_sendmsg(struct socket * sock,struct msghdr * msg,size_t len)2105 static int unix_seqpacket_sendmsg(struct socket *sock, struct msghdr *msg,
2106 				  size_t len)
2107 {
2108 	int err;
2109 	struct sock *sk = sock->sk;
2110 
2111 	err = sock_error(sk);
2112 	if (err)
2113 		return err;
2114 
2115 	if (sk->sk_state != TCP_ESTABLISHED)
2116 		return -ENOTCONN;
2117 
2118 	if (msg->msg_namelen)
2119 		msg->msg_namelen = 0;
2120 
2121 	return unix_dgram_sendmsg(sock, msg, len);
2122 }
2123 
unix_seqpacket_recvmsg(struct socket * sock,struct msghdr * msg,size_t size,int flags)2124 static int unix_seqpacket_recvmsg(struct socket *sock, struct msghdr *msg,
2125 				  size_t size, int flags)
2126 {
2127 	struct sock *sk = sock->sk;
2128 
2129 	if (sk->sk_state != TCP_ESTABLISHED)
2130 		return -ENOTCONN;
2131 
2132 	return unix_dgram_recvmsg(sock, msg, size, flags);
2133 }
2134 
unix_copy_addr(struct msghdr * msg,struct sock * sk)2135 static void unix_copy_addr(struct msghdr *msg, struct sock *sk)
2136 {
2137 	struct unix_address *addr = smp_load_acquire(&unix_sk(sk)->addr);
2138 
2139 	if (addr) {
2140 		msg->msg_namelen = addr->len;
2141 		memcpy(msg->msg_name, addr->name, addr->len);
2142 	}
2143 }
2144 
unix_dgram_recvmsg(struct socket * sock,struct msghdr * msg,size_t size,int flags)2145 static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg,
2146 			      size_t size, int flags)
2147 {
2148 	struct scm_cookie scm;
2149 	struct sock *sk = sock->sk;
2150 	struct unix_sock *u = unix_sk(sk);
2151 	struct sk_buff *skb, *last;
2152 	long timeo;
2153 	int skip;
2154 	int err;
2155 
2156 	err = -EOPNOTSUPP;
2157 	if (flags&MSG_OOB)
2158 		goto out;
2159 
2160 	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
2161 
2162 	do {
2163 		mutex_lock(&u->iolock);
2164 
2165 		skip = sk_peek_offset(sk, flags);
2166 		skb = __skb_try_recv_datagram(sk, &sk->sk_receive_queue, flags,
2167 					      &skip, &err, &last);
2168 		if (skb) {
2169 			if (!(flags & MSG_PEEK))
2170 				scm_stat_del(sk, skb);
2171 			break;
2172 		}
2173 
2174 		mutex_unlock(&u->iolock);
2175 
2176 		if (err != -EAGAIN)
2177 			break;
2178 	} while (timeo &&
2179 		 !__skb_wait_for_more_packets(sk, &sk->sk_receive_queue,
2180 					      &err, &timeo, last));
2181 
2182 	if (!skb) { /* implies iolock unlocked */
2183 		unix_state_lock(sk);
2184 		/* Signal EOF on disconnected non-blocking SEQPACKET socket. */
2185 		if (sk->sk_type == SOCK_SEQPACKET && err == -EAGAIN &&
2186 		    (sk->sk_shutdown & RCV_SHUTDOWN))
2187 			err = 0;
2188 		unix_state_unlock(sk);
2189 		goto out;
2190 	}
2191 
2192 	if (wq_has_sleeper(&u->peer_wait))
2193 		wake_up_interruptible_sync_poll(&u->peer_wait,
2194 						EPOLLOUT | EPOLLWRNORM |
2195 						EPOLLWRBAND);
2196 
2197 	if (msg->msg_name)
2198 		unix_copy_addr(msg, skb->sk);
2199 
2200 	if (size > skb->len - skip)
2201 		size = skb->len - skip;
2202 	else if (size < skb->len - skip)
2203 		msg->msg_flags |= MSG_TRUNC;
2204 
2205 	err = skb_copy_datagram_msg(skb, skip, msg, size);
2206 	if (err)
2207 		goto out_free;
2208 
2209 	if (sock_flag(sk, SOCK_RCVTSTAMP))
2210 		__sock_recv_timestamp(msg, sk, skb);
2211 
2212 	memset(&scm, 0, sizeof(scm));
2213 
2214 	scm_set_cred(&scm, UNIXCB(skb).pid, UNIXCB(skb).uid, UNIXCB(skb).gid);
2215 	unix_set_secdata(&scm, skb);
2216 
2217 	if (!(flags & MSG_PEEK)) {
2218 		if (UNIXCB(skb).fp)
2219 			unix_detach_fds(&scm, skb);
2220 
2221 		sk_peek_offset_bwd(sk, skb->len);
2222 	} else {
2223 		/* It is questionable: on PEEK we could:
2224 		   - do not return fds - good, but too simple 8)
2225 		   - return fds, and do not return them on read (old strategy,
2226 		     apparently wrong)
2227 		   - clone fds (I chose it for now, it is the most universal
2228 		     solution)
2229 
2230 		   POSIX 1003.1g does not actually define this clearly
2231 		   at all. POSIX 1003.1g doesn't define a lot of things
2232 		   clearly however!
2233 
2234 		*/
2235 
2236 		sk_peek_offset_fwd(sk, size);
2237 
2238 		if (UNIXCB(skb).fp)
2239 			unix_peek_fds(&scm, skb);
2240 	}
2241 	err = (flags & MSG_TRUNC) ? skb->len - skip : size;
2242 
2243 	scm_recv(sock, msg, &scm, flags);
2244 
2245 out_free:
2246 	skb_free_datagram(sk, skb);
2247 	mutex_unlock(&u->iolock);
2248 out:
2249 	return err;
2250 }
2251 
2252 /*
2253  *	Sleep until more data has arrived. But check for races..
2254  */
unix_stream_data_wait(struct sock * sk,long timeo,struct sk_buff * last,unsigned int last_len,bool freezable)2255 static long unix_stream_data_wait(struct sock *sk, long timeo,
2256 				  struct sk_buff *last, unsigned int last_len,
2257 				  bool freezable)
2258 {
2259 	struct sk_buff *tail;
2260 	DEFINE_WAIT(wait);
2261 
2262 	unix_state_lock(sk);
2263 
2264 	for (;;) {
2265 		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
2266 
2267 		tail = skb_peek_tail(&sk->sk_receive_queue);
2268 		if (tail != last ||
2269 		    (tail && tail->len != last_len) ||
2270 		    sk->sk_err ||
2271 		    (sk->sk_shutdown & RCV_SHUTDOWN) ||
2272 		    signal_pending(current) ||
2273 		    !timeo)
2274 			break;
2275 
2276 		sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
2277 		unix_state_unlock(sk);
2278 		if (freezable)
2279 			timeo = freezable_schedule_timeout(timeo);
2280 		else
2281 			timeo = schedule_timeout(timeo);
2282 		unix_state_lock(sk);
2283 
2284 		if (sock_flag(sk, SOCK_DEAD))
2285 			break;
2286 
2287 		sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
2288 	}
2289 
2290 	finish_wait(sk_sleep(sk), &wait);
2291 	unix_state_unlock(sk);
2292 	return timeo;
2293 }
2294 
unix_skb_len(const struct sk_buff * skb)2295 static unsigned int unix_skb_len(const struct sk_buff *skb)
2296 {
2297 	return skb->len - UNIXCB(skb).consumed;
2298 }
2299 
2300 struct unix_stream_read_state {
2301 	int (*recv_actor)(struct sk_buff *, int, int,
2302 			  struct unix_stream_read_state *);
2303 	struct socket *socket;
2304 	struct msghdr *msg;
2305 	struct pipe_inode_info *pipe;
2306 	size_t size;
2307 	int flags;
2308 	unsigned int splice_flags;
2309 };
2310 
unix_stream_read_generic(struct unix_stream_read_state * state,bool freezable)2311 static int unix_stream_read_generic(struct unix_stream_read_state *state,
2312 				    bool freezable)
2313 {
2314 	struct scm_cookie scm;
2315 	struct socket *sock = state->socket;
2316 	struct sock *sk = sock->sk;
2317 	struct unix_sock *u = unix_sk(sk);
2318 	int copied = 0;
2319 	int flags = state->flags;
2320 	int noblock = flags & MSG_DONTWAIT;
2321 	bool check_creds = false;
2322 	int target;
2323 	int err = 0;
2324 	long timeo;
2325 	int skip;
2326 	size_t size = state->size;
2327 	unsigned int last_len;
2328 
2329 	if (unlikely(sk->sk_state != TCP_ESTABLISHED)) {
2330 		err = -EINVAL;
2331 		goto out;
2332 	}
2333 
2334 	if (unlikely(flags & MSG_OOB)) {
2335 		err = -EOPNOTSUPP;
2336 		goto out;
2337 	}
2338 
2339 	target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
2340 	timeo = sock_rcvtimeo(sk, noblock);
2341 
2342 	memset(&scm, 0, sizeof(scm));
2343 
2344 	/* Lock the socket to prevent queue disordering
2345 	 * while sleeps in memcpy_tomsg
2346 	 */
2347 	mutex_lock(&u->iolock);
2348 
2349 	skip = max(sk_peek_offset(sk, flags), 0);
2350 
2351 	do {
2352 		int chunk;
2353 		bool drop_skb;
2354 		struct sk_buff *skb, *last;
2355 
2356 redo:
2357 		unix_state_lock(sk);
2358 		if (sock_flag(sk, SOCK_DEAD)) {
2359 			err = -ECONNRESET;
2360 			goto unlock;
2361 		}
2362 		last = skb = skb_peek(&sk->sk_receive_queue);
2363 		last_len = last ? last->len : 0;
2364 again:
2365 		if (skb == NULL) {
2366 			if (copied >= target)
2367 				goto unlock;
2368 
2369 			/*
2370 			 *	POSIX 1003.1g mandates this order.
2371 			 */
2372 
2373 			err = sock_error(sk);
2374 			if (err)
2375 				goto unlock;
2376 			if (sk->sk_shutdown & RCV_SHUTDOWN)
2377 				goto unlock;
2378 
2379 			unix_state_unlock(sk);
2380 			if (!timeo) {
2381 				err = -EAGAIN;
2382 				break;
2383 			}
2384 
2385 			mutex_unlock(&u->iolock);
2386 
2387 			timeo = unix_stream_data_wait(sk, timeo, last,
2388 						      last_len, freezable);
2389 
2390 			if (signal_pending(current)) {
2391 				err = sock_intr_errno(timeo);
2392 				scm_destroy(&scm);
2393 				goto out;
2394 			}
2395 
2396 			mutex_lock(&u->iolock);
2397 			goto redo;
2398 unlock:
2399 			unix_state_unlock(sk);
2400 			break;
2401 		}
2402 
2403 		while (skip >= unix_skb_len(skb)) {
2404 			skip -= unix_skb_len(skb);
2405 			last = skb;
2406 			last_len = skb->len;
2407 			skb = skb_peek_next(skb, &sk->sk_receive_queue);
2408 			if (!skb)
2409 				goto again;
2410 		}
2411 
2412 		unix_state_unlock(sk);
2413 
2414 		if (check_creds) {
2415 			/* Never glue messages from different writers */
2416 			if (!unix_skb_scm_eq(skb, &scm))
2417 				break;
2418 		} else if (test_bit(SOCK_PASSCRED, &sock->flags)) {
2419 			/* Copy credentials */
2420 			scm_set_cred(&scm, UNIXCB(skb).pid, UNIXCB(skb).uid, UNIXCB(skb).gid);
2421 			unix_set_secdata(&scm, skb);
2422 			check_creds = true;
2423 		}
2424 
2425 		/* Copy address just once */
2426 		if (state->msg && state->msg->msg_name) {
2427 			DECLARE_SOCKADDR(struct sockaddr_un *, sunaddr,
2428 					 state->msg->msg_name);
2429 			unix_copy_addr(state->msg, skb->sk);
2430 			sunaddr = NULL;
2431 		}
2432 
2433 		chunk = min_t(unsigned int, unix_skb_len(skb) - skip, size);
2434 		skb_get(skb);
2435 		chunk = state->recv_actor(skb, skip, chunk, state);
2436 		drop_skb = !unix_skb_len(skb);
2437 		/* skb is only safe to use if !drop_skb */
2438 		consume_skb(skb);
2439 		if (chunk < 0) {
2440 			if (copied == 0)
2441 				copied = -EFAULT;
2442 			break;
2443 		}
2444 		copied += chunk;
2445 		size -= chunk;
2446 
2447 		if (drop_skb) {
2448 			/* the skb was touched by a concurrent reader;
2449 			 * we should not expect anything from this skb
2450 			 * anymore and assume it invalid - we can be
2451 			 * sure it was dropped from the socket queue
2452 			 *
2453 			 * let's report a short read
2454 			 */
2455 			err = 0;
2456 			break;
2457 		}
2458 
2459 		/* Mark read part of skb as used */
2460 		if (!(flags & MSG_PEEK)) {
2461 			UNIXCB(skb).consumed += chunk;
2462 
2463 			sk_peek_offset_bwd(sk, chunk);
2464 
2465 			if (UNIXCB(skb).fp) {
2466 				scm_stat_del(sk, skb);
2467 				unix_detach_fds(&scm, skb);
2468 			}
2469 
2470 			if (unix_skb_len(skb))
2471 				break;
2472 
2473 			skb_unlink(skb, &sk->sk_receive_queue);
2474 			consume_skb(skb);
2475 
2476 			if (scm.fp)
2477 				break;
2478 		} else {
2479 			/* It is questionable, see note in unix_dgram_recvmsg.
2480 			 */
2481 			if (UNIXCB(skb).fp)
2482 				unix_peek_fds(&scm, skb);
2483 
2484 			sk_peek_offset_fwd(sk, chunk);
2485 
2486 			if (UNIXCB(skb).fp)
2487 				break;
2488 
2489 			skip = 0;
2490 			last = skb;
2491 			last_len = skb->len;
2492 			unix_state_lock(sk);
2493 			skb = skb_peek_next(skb, &sk->sk_receive_queue);
2494 			if (skb)
2495 				goto again;
2496 			unix_state_unlock(sk);
2497 			break;
2498 		}
2499 	} while (size);
2500 
2501 	mutex_unlock(&u->iolock);
2502 	if (state->msg)
2503 		scm_recv(sock, state->msg, &scm, flags);
2504 	else
2505 		scm_destroy(&scm);
2506 out:
2507 	return copied ? : err;
2508 }
2509 
unix_stream_read_actor(struct sk_buff * skb,int skip,int chunk,struct unix_stream_read_state * state)2510 static int unix_stream_read_actor(struct sk_buff *skb,
2511 				  int skip, int chunk,
2512 				  struct unix_stream_read_state *state)
2513 {
2514 	int ret;
2515 
2516 	ret = skb_copy_datagram_msg(skb, UNIXCB(skb).consumed + skip,
2517 				    state->msg, chunk);
2518 	return ret ?: chunk;
2519 }
2520 
unix_stream_recvmsg(struct socket * sock,struct msghdr * msg,size_t size,int flags)2521 static int unix_stream_recvmsg(struct socket *sock, struct msghdr *msg,
2522 			       size_t size, int flags)
2523 {
2524 	struct unix_stream_read_state state = {
2525 		.recv_actor = unix_stream_read_actor,
2526 		.socket = sock,
2527 		.msg = msg,
2528 		.size = size,
2529 		.flags = flags
2530 	};
2531 
2532 	return unix_stream_read_generic(&state, true);
2533 }
2534 
unix_stream_splice_actor(struct sk_buff * skb,int skip,int chunk,struct unix_stream_read_state * state)2535 static int unix_stream_splice_actor(struct sk_buff *skb,
2536 				    int skip, int chunk,
2537 				    struct unix_stream_read_state *state)
2538 {
2539 	return skb_splice_bits(skb, state->socket->sk,
2540 			       UNIXCB(skb).consumed + skip,
2541 			       state->pipe, chunk, state->splice_flags);
2542 }
2543 
unix_stream_splice_read(struct socket * sock,loff_t * ppos,struct pipe_inode_info * pipe,size_t size,unsigned int flags)2544 static ssize_t unix_stream_splice_read(struct socket *sock,  loff_t *ppos,
2545 				       struct pipe_inode_info *pipe,
2546 				       size_t size, unsigned int flags)
2547 {
2548 	struct unix_stream_read_state state = {
2549 		.recv_actor = unix_stream_splice_actor,
2550 		.socket = sock,
2551 		.pipe = pipe,
2552 		.size = size,
2553 		.splice_flags = flags,
2554 	};
2555 
2556 	if (unlikely(*ppos))
2557 		return -ESPIPE;
2558 
2559 	if (sock->file->f_flags & O_NONBLOCK ||
2560 	    flags & SPLICE_F_NONBLOCK)
2561 		state.flags = MSG_DONTWAIT;
2562 
2563 	return unix_stream_read_generic(&state, false);
2564 }
2565 
unix_shutdown(struct socket * sock,int mode)2566 static int unix_shutdown(struct socket *sock, int mode)
2567 {
2568 	struct sock *sk = sock->sk;
2569 	struct sock *other;
2570 
2571 	if (mode < SHUT_RD || mode > SHUT_RDWR)
2572 		return -EINVAL;
2573 	/* This maps:
2574 	 * SHUT_RD   (0) -> RCV_SHUTDOWN  (1)
2575 	 * SHUT_WR   (1) -> SEND_SHUTDOWN (2)
2576 	 * SHUT_RDWR (2) -> SHUTDOWN_MASK (3)
2577 	 */
2578 	++mode;
2579 
2580 	unix_state_lock(sk);
2581 	WRITE_ONCE(sk->sk_shutdown, sk->sk_shutdown | mode);
2582 	other = unix_peer(sk);
2583 	if (other)
2584 		sock_hold(other);
2585 	unix_state_unlock(sk);
2586 	sk->sk_state_change(sk);
2587 
2588 	if (other &&
2589 		(sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET)) {
2590 
2591 		int peer_mode = 0;
2592 
2593 		if (mode&RCV_SHUTDOWN)
2594 			peer_mode |= SEND_SHUTDOWN;
2595 		if (mode&SEND_SHUTDOWN)
2596 			peer_mode |= RCV_SHUTDOWN;
2597 		unix_state_lock(other);
2598 		WRITE_ONCE(other->sk_shutdown, other->sk_shutdown | peer_mode);
2599 		unix_state_unlock(other);
2600 		other->sk_state_change(other);
2601 		if (peer_mode == SHUTDOWN_MASK)
2602 			sk_wake_async(other, SOCK_WAKE_WAITD, POLL_HUP);
2603 		else if (peer_mode & RCV_SHUTDOWN)
2604 			sk_wake_async(other, SOCK_WAKE_WAITD, POLL_IN);
2605 	}
2606 	if (other)
2607 		sock_put(other);
2608 
2609 	return 0;
2610 }
2611 
unix_inq_len(struct sock * sk)2612 long unix_inq_len(struct sock *sk)
2613 {
2614 	struct sk_buff *skb;
2615 	long amount = 0;
2616 
2617 	if (sk->sk_state == TCP_LISTEN)
2618 		return -EINVAL;
2619 
2620 	spin_lock(&sk->sk_receive_queue.lock);
2621 	if (sk->sk_type == SOCK_STREAM ||
2622 	    sk->sk_type == SOCK_SEQPACKET) {
2623 		skb_queue_walk(&sk->sk_receive_queue, skb)
2624 			amount += unix_skb_len(skb);
2625 	} else {
2626 		skb = skb_peek(&sk->sk_receive_queue);
2627 		if (skb)
2628 			amount = skb->len;
2629 	}
2630 	spin_unlock(&sk->sk_receive_queue.lock);
2631 
2632 	return amount;
2633 }
2634 EXPORT_SYMBOL_GPL(unix_inq_len);
2635 
unix_outq_len(struct sock * sk)2636 long unix_outq_len(struct sock *sk)
2637 {
2638 	return sk_wmem_alloc_get(sk);
2639 }
2640 EXPORT_SYMBOL_GPL(unix_outq_len);
2641 
unix_open_file(struct sock * sk)2642 static int unix_open_file(struct sock *sk)
2643 {
2644 	struct path path;
2645 	struct file *f;
2646 	int fd;
2647 
2648 	if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
2649 		return -EPERM;
2650 
2651 	if (!smp_load_acquire(&unix_sk(sk)->addr))
2652 		return -ENOENT;
2653 
2654 	path = unix_sk(sk)->path;
2655 	if (!path.dentry)
2656 		return -ENOENT;
2657 
2658 	path_get(&path);
2659 
2660 	fd = get_unused_fd_flags(O_CLOEXEC);
2661 	if (fd < 0)
2662 		goto out;
2663 
2664 	f = dentry_open(&path, O_PATH, current_cred());
2665 	if (IS_ERR(f)) {
2666 		put_unused_fd(fd);
2667 		fd = PTR_ERR(f);
2668 		goto out;
2669 	}
2670 
2671 	fd_install(fd, f);
2672 out:
2673 	path_put(&path);
2674 
2675 	return fd;
2676 }
2677 
unix_ioctl(struct socket * sock,unsigned int cmd,unsigned long arg)2678 static int unix_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
2679 {
2680 	struct sock *sk = sock->sk;
2681 	long amount = 0;
2682 	int err;
2683 
2684 	switch (cmd) {
2685 	case SIOCOUTQ:
2686 		amount = unix_outq_len(sk);
2687 		err = put_user(amount, (int __user *)arg);
2688 		break;
2689 	case SIOCINQ:
2690 		amount = unix_inq_len(sk);
2691 		if (amount < 0)
2692 			err = amount;
2693 		else
2694 			err = put_user(amount, (int __user *)arg);
2695 		break;
2696 	case SIOCUNIXFILE:
2697 		err = unix_open_file(sk);
2698 		break;
2699 	default:
2700 		err = -ENOIOCTLCMD;
2701 		break;
2702 	}
2703 	return err;
2704 }
2705 
2706 #ifdef CONFIG_COMPAT
unix_compat_ioctl(struct socket * sock,unsigned int cmd,unsigned long arg)2707 static int unix_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
2708 {
2709 	return unix_ioctl(sock, cmd, (unsigned long)compat_ptr(arg));
2710 }
2711 #endif
2712 
unix_poll(struct file * file,struct socket * sock,poll_table * wait)2713 static __poll_t unix_poll(struct file *file, struct socket *sock, poll_table *wait)
2714 {
2715 	struct sock *sk = sock->sk;
2716 	__poll_t mask;
2717 	u8 shutdown;
2718 
2719 	sock_poll_wait(file, sock, wait);
2720 	mask = 0;
2721 	shutdown = READ_ONCE(sk->sk_shutdown);
2722 
2723 	/* exceptional events? */
2724 	if (sk->sk_err)
2725 		mask |= EPOLLERR;
2726 	if (shutdown == SHUTDOWN_MASK)
2727 		mask |= EPOLLHUP;
2728 	if (shutdown & RCV_SHUTDOWN)
2729 		mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
2730 
2731 	/* readable? */
2732 	if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
2733 		mask |= EPOLLIN | EPOLLRDNORM;
2734 
2735 	/* Connection-based need to check for termination and startup */
2736 	if ((sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) &&
2737 	    sk->sk_state == TCP_CLOSE)
2738 		mask |= EPOLLHUP;
2739 
2740 	/*
2741 	 * we set writable also when the other side has shut down the
2742 	 * connection. This prevents stuck sockets.
2743 	 */
2744 	if (unix_writable(sk))
2745 		mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
2746 
2747 	return mask;
2748 }
2749 
unix_dgram_poll(struct file * file,struct socket * sock,poll_table * wait)2750 static __poll_t unix_dgram_poll(struct file *file, struct socket *sock,
2751 				    poll_table *wait)
2752 {
2753 	struct sock *sk = sock->sk, *other;
2754 	unsigned int writable;
2755 	__poll_t mask;
2756 	u8 shutdown;
2757 
2758 	sock_poll_wait(file, sock, wait);
2759 	mask = 0;
2760 	shutdown = READ_ONCE(sk->sk_shutdown);
2761 
2762 	/* exceptional events? */
2763 	if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue))
2764 		mask |= EPOLLERR |
2765 			(sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
2766 
2767 	if (shutdown & RCV_SHUTDOWN)
2768 		mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
2769 	if (shutdown == SHUTDOWN_MASK)
2770 		mask |= EPOLLHUP;
2771 
2772 	/* readable? */
2773 	if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
2774 		mask |= EPOLLIN | EPOLLRDNORM;
2775 
2776 	/* Connection-based need to check for termination and startup */
2777 	if (sk->sk_type == SOCK_SEQPACKET) {
2778 		if (sk->sk_state == TCP_CLOSE)
2779 			mask |= EPOLLHUP;
2780 		/* connection hasn't started yet? */
2781 		if (sk->sk_state == TCP_SYN_SENT)
2782 			return mask;
2783 	}
2784 
2785 	/* No write status requested, avoid expensive OUT tests. */
2786 	if (!(poll_requested_events(wait) & (EPOLLWRBAND|EPOLLWRNORM|EPOLLOUT)))
2787 		return mask;
2788 
2789 	writable = unix_writable(sk);
2790 	if (writable) {
2791 		unix_state_lock(sk);
2792 
2793 		other = unix_peer(sk);
2794 		if (other && unix_peer(other) != sk &&
2795 		    unix_recvq_full_lockless(other) &&
2796 		    unix_dgram_peer_wake_me(sk, other))
2797 			writable = 0;
2798 
2799 		unix_state_unlock(sk);
2800 	}
2801 
2802 	if (writable)
2803 		mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
2804 	else
2805 		sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
2806 
2807 	return mask;
2808 }
2809 
2810 #ifdef CONFIG_PROC_FS
2811 
2812 #define BUCKET_SPACE (BITS_PER_LONG - (UNIX_HASH_BITS + 1) - 1)
2813 
2814 #define get_bucket(x) ((x) >> BUCKET_SPACE)
2815 #define get_offset(x) ((x) & ((1L << BUCKET_SPACE) - 1))
2816 #define set_bucket_offset(b, o) ((b) << BUCKET_SPACE | (o))
2817 
unix_from_bucket(struct seq_file * seq,loff_t * pos)2818 static struct sock *unix_from_bucket(struct seq_file *seq, loff_t *pos)
2819 {
2820 	unsigned long offset = get_offset(*pos);
2821 	unsigned long bucket = get_bucket(*pos);
2822 	struct sock *sk;
2823 	unsigned long count = 0;
2824 
2825 	for (sk = sk_head(&unix_socket_table[bucket]); sk; sk = sk_next(sk)) {
2826 		if (sock_net(sk) != seq_file_net(seq))
2827 			continue;
2828 		if (++count == offset)
2829 			break;
2830 	}
2831 
2832 	return sk;
2833 }
2834 
unix_next_socket(struct seq_file * seq,struct sock * sk,loff_t * pos)2835 static struct sock *unix_next_socket(struct seq_file *seq,
2836 				     struct sock *sk,
2837 				     loff_t *pos)
2838 {
2839 	unsigned long bucket;
2840 
2841 	while (sk > (struct sock *)SEQ_START_TOKEN) {
2842 		sk = sk_next(sk);
2843 		if (!sk)
2844 			goto next_bucket;
2845 		if (sock_net(sk) == seq_file_net(seq))
2846 			return sk;
2847 	}
2848 
2849 	do {
2850 		sk = unix_from_bucket(seq, pos);
2851 		if (sk)
2852 			return sk;
2853 
2854 next_bucket:
2855 		bucket = get_bucket(*pos) + 1;
2856 		*pos = set_bucket_offset(bucket, 1);
2857 	} while (bucket < ARRAY_SIZE(unix_socket_table));
2858 
2859 	return NULL;
2860 }
2861 
unix_seq_start(struct seq_file * seq,loff_t * pos)2862 static void *unix_seq_start(struct seq_file *seq, loff_t *pos)
2863 	__acquires(unix_table_lock)
2864 {
2865 	spin_lock(&unix_table_lock);
2866 
2867 	if (!*pos)
2868 		return SEQ_START_TOKEN;
2869 
2870 	if (get_bucket(*pos) >= ARRAY_SIZE(unix_socket_table))
2871 		return NULL;
2872 
2873 	return unix_next_socket(seq, NULL, pos);
2874 }
2875 
unix_seq_next(struct seq_file * seq,void * v,loff_t * pos)2876 static void *unix_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2877 {
2878 	++*pos;
2879 	return unix_next_socket(seq, v, pos);
2880 }
2881 
unix_seq_stop(struct seq_file * seq,void * v)2882 static void unix_seq_stop(struct seq_file *seq, void *v)
2883 	__releases(unix_table_lock)
2884 {
2885 	spin_unlock(&unix_table_lock);
2886 }
2887 
unix_seq_show(struct seq_file * seq,void * v)2888 static int unix_seq_show(struct seq_file *seq, void *v)
2889 {
2890 
2891 	if (v == SEQ_START_TOKEN)
2892 		seq_puts(seq, "Num       RefCount Protocol Flags    Type St "
2893 			 "Inode Path\n");
2894 	else {
2895 		struct sock *s = v;
2896 		struct unix_sock *u = unix_sk(s);
2897 		unix_state_lock(s);
2898 
2899 		seq_printf(seq, "%pK: %08X %08X %08X %04X %02X %5lu",
2900 			s,
2901 			refcount_read(&s->sk_refcnt),
2902 			0,
2903 			s->sk_state == TCP_LISTEN ? __SO_ACCEPTCON : 0,
2904 			s->sk_type,
2905 			s->sk_socket ?
2906 			(s->sk_state == TCP_ESTABLISHED ? SS_CONNECTED : SS_UNCONNECTED) :
2907 			(s->sk_state == TCP_ESTABLISHED ? SS_CONNECTING : SS_DISCONNECTING),
2908 			sock_i_ino(s));
2909 
2910 		if (u->addr) {	// under unix_table_lock here
2911 			int i, len;
2912 			seq_putc(seq, ' ');
2913 
2914 			i = 0;
2915 			len = u->addr->len - sizeof(short);
2916 			if (!UNIX_ABSTRACT(s))
2917 				len--;
2918 			else {
2919 				seq_putc(seq, '@');
2920 				i++;
2921 			}
2922 			for ( ; i < len; i++)
2923 				seq_putc(seq, u->addr->name->sun_path[i] ?:
2924 					 '@');
2925 		}
2926 		unix_state_unlock(s);
2927 		seq_putc(seq, '\n');
2928 	}
2929 
2930 	return 0;
2931 }
2932 
2933 static const struct seq_operations unix_seq_ops = {
2934 	.start  = unix_seq_start,
2935 	.next   = unix_seq_next,
2936 	.stop   = unix_seq_stop,
2937 	.show   = unix_seq_show,
2938 };
2939 #endif
2940 
2941 static const struct net_proto_family unix_family_ops = {
2942 	.family = PF_UNIX,
2943 	.create = unix_create,
2944 	.owner	= THIS_MODULE,
2945 };
2946 
2947 
unix_net_init(struct net * net)2948 static int __net_init unix_net_init(struct net *net)
2949 {
2950 	int error = -ENOMEM;
2951 
2952 	net->unx.sysctl_max_dgram_qlen = 10;
2953 	if (unix_sysctl_register(net))
2954 		goto out;
2955 
2956 #ifdef CONFIG_PROC_FS
2957 	if (!proc_create_net("unix", 0, net->proc_net, &unix_seq_ops,
2958 			sizeof(struct seq_net_private))) {
2959 		unix_sysctl_unregister(net);
2960 		goto out;
2961 	}
2962 #endif
2963 	error = 0;
2964 out:
2965 	return error;
2966 }
2967 
unix_net_exit(struct net * net)2968 static void __net_exit unix_net_exit(struct net *net)
2969 {
2970 	unix_sysctl_unregister(net);
2971 	remove_proc_entry("unix", net->proc_net);
2972 }
2973 
2974 static struct pernet_operations unix_net_ops = {
2975 	.init = unix_net_init,
2976 	.exit = unix_net_exit,
2977 };
2978 
af_unix_init(void)2979 static int __init af_unix_init(void)
2980 {
2981 	int rc = -1;
2982 
2983 	BUILD_BUG_ON(sizeof(struct unix_skb_parms) > sizeof_field(struct sk_buff, cb));
2984 
2985 	rc = proto_register(&unix_proto, 1);
2986 	if (rc != 0) {
2987 		pr_crit("%s: Cannot create unix_sock SLAB cache!\n", __func__);
2988 		goto out;
2989 	}
2990 
2991 	sock_register(&unix_family_ops);
2992 	register_pernet_subsys(&unix_net_ops);
2993 out:
2994 	return rc;
2995 }
2996 
af_unix_exit(void)2997 static void __exit af_unix_exit(void)
2998 {
2999 	sock_unregister(PF_UNIX);
3000 	proto_unregister(&unix_proto);
3001 	unregister_pernet_subsys(&unix_net_ops);
3002 }
3003 
3004 /* Earlier than device_initcall() so that other drivers invoking
3005    request_module() don't end up in a loop when modprobe tries
3006    to use a UNIX socket. But later than subsys_initcall() because
3007    we depend on stuff initialised there */
3008 fs_initcall(af_unix_init);
3009 module_exit(af_unix_exit);
3010 
3011 MODULE_LICENSE("GPL");
3012 MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
3013 MODULE_ALIAS_NETPROTO(PF_UNIX);
3014