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 119struct hlist_head unix_socket_table[2 * UNIX_HASH_SIZE]; 120EXPORT_SYMBOL_GPL(unix_socket_table); 121DEFINE_SPINLOCK(unix_table_lock); 122EXPORT_SYMBOL_GPL(unix_table_lock); 123static atomic_long_t unix_nr_socks; 124 125 126static 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 139static void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) 140{ 141 UNIXCB(skb).secid = scm->secid; 142} 143 144static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) 145{ 146 scm->secid = UNIXCB(skb).secid; 147} 148 149static inline bool unix_secdata_eq(struct scm_cookie *scm, struct sk_buff *skb) 150{ 151 return (scm->secid == UNIXCB(skb).secid); 152} 153#else 154static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) 155{ } 156 157static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) 158{ } 159 160static 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 172static 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 182static inline int unix_our_peer(struct sock *sk, struct sock *osk) 183{ 184 return unix_peer(osk) == sk; 185} 186 187static 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 192static 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 197static 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 203struct 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} 214EXPORT_SYMBOL_GPL(unix_peer_get); 215 216static 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 229static 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 254static void __unix_remove_socket(struct sock *sk) 255{ 256 sk_del_node_init(sk); 257} 258 259static 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 265static 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 272static 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 279static 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 298static 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 313static 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; 328found: 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 358static 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 378static 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 399static 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 416static 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 */ 430static 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 450static 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 456static 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. */ 475static 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 492static 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 519static 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 594static 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 610static 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 634static 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 657out_unlock: 658 unix_state_unlock(sk); 659out: 660 return err; 661} 662 663static int unix_release(struct socket *); 664static int unix_bind(struct socket *, struct sockaddr *, int); 665static int unix_stream_connect(struct socket *, struct sockaddr *, 666 int addr_len, int flags); 667static int unix_socketpair(struct socket *, struct socket *); 668static int unix_accept(struct socket *, struct socket *, int, bool); 669static int unix_getname(struct socket *, struct sockaddr *, int); 670static __poll_t unix_poll(struct file *, struct socket *, poll_table *); 671static __poll_t unix_dgram_poll(struct file *, struct socket *, 672 poll_table *); 673static int unix_ioctl(struct socket *, unsigned int, unsigned long); 674#ifdef CONFIG_COMPAT 675static int unix_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); 676#endif 677static int unix_shutdown(struct socket *, int); 678static int unix_stream_sendmsg(struct socket *, struct msghdr *, size_t); 679static int unix_stream_recvmsg(struct socket *, struct msghdr *, size_t, int); 680static ssize_t unix_stream_sendpage(struct socket *, struct page *, int offset, 681 size_t size, int flags); 682static ssize_t unix_stream_splice_read(struct socket *, loff_t *ppos, 683 struct pipe_inode_info *, size_t size, 684 unsigned int flags); 685static int unix_dgram_sendmsg(struct socket *, struct msghdr *, size_t); 686static int unix_dgram_recvmsg(struct socket *, struct msghdr *, size_t, int); 687static int unix_dgram_connect(struct socket *, struct sockaddr *, 688 int, int); 689static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t); 690static int unix_seqpacket_recvmsg(struct socket *, struct msghdr *, size_t, 691 int); 692 693static 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 707static 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 722static 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 747static 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 771static 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 795static struct proto unix_proto = { 796 .name = "UNIX", 797 .owner = THIS_MODULE, 798 .obj_size = sizeof(struct unix_sock), 799}; 800 801static 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); 832out: 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 843static 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 875static 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 888static 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 913retry: 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 944out: mutex_unlock(&u->bindlock); 945 return err; 946} 947 948static 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 996put_fail: 997 path_put(&path); 998fail: 999 *error = err; 1000 return NULL; 1001} 1002 1003static 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 1032static 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 1112out_unlock: 1113 spin_unlock(&unix_table_lock); 1114out_up: 1115 mutex_unlock(&u->bindlock); 1116out_put: 1117 if (err) 1118 path_put(&path); 1119out: 1120 return err; 1121} 1122 1123static 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 1136static 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 1146static 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 1170restart: 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 1219out_unlock: 1220 unix_state_double_unlock(sk, other); 1221 sock_put(other); 1222out: 1223 return err; 1224} 1225 1226static 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 1248static 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 1291restart: 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 1424out_unlock: 1425 if (other) 1426 unix_state_unlock(other); 1427 1428out: 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 1437static 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 1458static 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 1467static 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 1507out: 1508 return err; 1509} 1510 1511 1512static 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); 1540out: 1541 return err; 1542} 1543 1544static 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 1591static 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 1607static 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 */ 1620static 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 1631static 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 1649static 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 1660static 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 1669static 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 1682static 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 1757restart: 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); 1777restart_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 1872out_unlock: 1873 if (sk_locked) 1874 unix_state_unlock(sk); 1875 unix_state_unlock(other); 1876out_free: 1877 kfree_skb(skb); 1878out: 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 1890static 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 (READ_ONCE(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 1978pipe_err_free: 1979 unix_state_unlock(other); 1980 kfree_skb(skb); 1981pipe_err: 1982 if (sent == 0 && !(msg->msg_flags&MSG_NOSIGNAL)) 1983 send_sig(SIGPIPE, current, 0); 1984 err = -EPIPE; 1985out_err: 1986 scm_destroy(&scm); 1987 return sent ? : err; 1988} 1989 1990static 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) { 2008alloc_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 2092err_state_unlock: 2093 unix_state_unlock(other); 2094err_unlock: 2095 mutex_unlock(&unix_sk(other)->iolock); 2096err: 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 2105static 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 2124static 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 2135static 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 2145static 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 2245out_free: 2246 skb_free_datagram(sk, skb); 2247 mutex_unlock(&u->iolock); 2248out: 2249 return err; 2250} 2251 2252/* 2253 * Sleep until more data has arrived. But check for races.. 2254 */ 2255static 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 2295static unsigned int unix_skb_len(const struct sk_buff *skb) 2296{ 2297 return skb->len - UNIXCB(skb).consumed; 2298} 2299 2300struct 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 2311static 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 2356redo: 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; 2364again: 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; 2398unlock: 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); 2506out: 2507 return copied ? : err; 2508} 2509 2510static 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 2521static 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 2535static 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 2544static 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 2566static 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 2612long 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} 2634EXPORT_SYMBOL_GPL(unix_inq_len); 2635 2636long unix_outq_len(struct sock *sk) 2637{ 2638 return sk_wmem_alloc_get(sk); 2639} 2640EXPORT_SYMBOL_GPL(unix_outq_len); 2641 2642static 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); 2672out: 2673 path_put(&path); 2674 2675 return fd; 2676} 2677 2678static 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 2707static 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 2713static __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 2750static __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 2818static 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 2835static 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 2854next_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 2862static 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 2876static 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 2882static void unix_seq_stop(struct seq_file *seq, void *v) 2883 __releases(unix_table_lock) 2884{ 2885 spin_unlock(&unix_table_lock); 2886} 2887 2888static 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 2933static 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 2941static const struct net_proto_family unix_family_ops = { 2942 .family = PF_UNIX, 2943 .create = unix_create, 2944 .owner = THIS_MODULE, 2945}; 2946 2947 2948static 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; 2964out: 2965 return error; 2966} 2967 2968static 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 2974static struct pernet_operations unix_net_ops = { 2975 .init = unix_net_init, 2976 .exit = unix_net_exit, 2977}; 2978 2979static 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); 2993out: 2994 return rc; 2995} 2996 2997static 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 */ 3008fs_initcall(af_unix_init); 3009module_exit(af_unix_exit); 3010 3011MODULE_LICENSE("GPL"); 3012MODULE_ALIAS_NETPROTO(PF_UNIX); 3013