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