LCOV - code coverage report
Current view: top level - net/unix - af_unix.c (source / functions) Hit Total Coverage
Test: gcov_data_raspi2_qemu_modules_combined.info Lines: 718 1007 71.3 %
Date: 2020-09-30 20:25:01 Functions: 51 71 71.8 %
Branches: 422 758 55.7 %

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

Generated by: LCOV version 1.14