LCOV - code coverage report
Current view: top level - net/core - sock.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 366 912 40.1 %
Date: 2014-04-07 Functions: 53 94 56.4 %
Branches: 164 634 25.9 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * INET         An implementation of the TCP/IP protocol suite for the LINUX
       3                 :            :  *              operating system.  INET is implemented using the  BSD Socket
       4                 :            :  *              interface as the means of communication with the user level.
       5                 :            :  *
       6                 :            :  *              Generic socket support routines. Memory allocators, socket lock/release
       7                 :            :  *              handler for protocols to use and generic option handler.
       8                 :            :  *
       9                 :            :  *
      10                 :            :  * Authors:     Ross Biro
      11                 :            :  *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
      12                 :            :  *              Florian La Roche, <flla@stud.uni-sb.de>
      13                 :            :  *              Alan Cox, <A.Cox@swansea.ac.uk>
      14                 :            :  *
      15                 :            :  * Fixes:
      16                 :            :  *              Alan Cox        :       Numerous verify_area() problems
      17                 :            :  *              Alan Cox        :       Connecting on a connecting socket
      18                 :            :  *                                      now returns an error for tcp.
      19                 :            :  *              Alan Cox        :       sock->protocol is set correctly.
      20                 :            :  *                                      and is not sometimes left as 0.
      21                 :            :  *              Alan Cox        :       connect handles icmp errors on a
      22                 :            :  *                                      connect properly. Unfortunately there
      23                 :            :  *                                      is a restart syscall nasty there. I
      24                 :            :  *                                      can't match BSD without hacking the C
      25                 :            :  *                                      library. Ideas urgently sought!
      26                 :            :  *              Alan Cox        :       Disallow bind() to addresses that are
      27                 :            :  *                                      not ours - especially broadcast ones!!
      28                 :            :  *              Alan Cox        :       Socket 1024 _IS_ ok for users. (fencepost)
      29                 :            :  *              Alan Cox        :       sock_wfree/sock_rfree don't destroy sockets,
      30                 :            :  *                                      instead they leave that for the DESTROY timer.
      31                 :            :  *              Alan Cox        :       Clean up error flag in accept
      32                 :            :  *              Alan Cox        :       TCP ack handling is buggy, the DESTROY timer
      33                 :            :  *                                      was buggy. Put a remove_sock() in the handler
      34                 :            :  *                                      for memory when we hit 0. Also altered the timer
      35                 :            :  *                                      code. The ACK stuff can wait and needs major
      36                 :            :  *                                      TCP layer surgery.
      37                 :            :  *              Alan Cox        :       Fixed TCP ack bug, removed remove sock
      38                 :            :  *                                      and fixed timer/inet_bh race.
      39                 :            :  *              Alan Cox        :       Added zapped flag for TCP
      40                 :            :  *              Alan Cox        :       Move kfree_skb into skbuff.c and tidied up surplus code
      41                 :            :  *              Alan Cox        :       for new sk_buff allocations wmalloc/rmalloc now call alloc_skb
      42                 :            :  *              Alan Cox        :       kfree_s calls now are kfree_skbmem so we can track skb resources
      43                 :            :  *              Alan Cox        :       Supports socket option broadcast now as does udp. Packet and raw need fixing.
      44                 :            :  *              Alan Cox        :       Added RCVBUF,SNDBUF size setting. It suddenly occurred to me how easy it was so...
      45                 :            :  *              Rick Sladkey    :       Relaxed UDP rules for matching packets.
      46                 :            :  *              C.E.Hawkins     :       IFF_PROMISC/SIOCGHWADDR support
      47                 :            :  *      Pauline Middelink       :       identd support
      48                 :            :  *              Alan Cox        :       Fixed connect() taking signals I think.
      49                 :            :  *              Alan Cox        :       SO_LINGER supported
      50                 :            :  *              Alan Cox        :       Error reporting fixes
      51                 :            :  *              Anonymous       :       inet_create tidied up (sk->reuse setting)
      52                 :            :  *              Alan Cox        :       inet sockets don't set sk->type!
      53                 :            :  *              Alan Cox        :       Split socket option code
      54                 :            :  *              Alan Cox        :       Callbacks
      55                 :            :  *              Alan Cox        :       Nagle flag for Charles & Johannes stuff
      56                 :            :  *              Alex            :       Removed restriction on inet fioctl
      57                 :            :  *              Alan Cox        :       Splitting INET from NET core
      58                 :            :  *              Alan Cox        :       Fixed bogus SO_TYPE handling in getsockopt()
      59                 :            :  *              Adam Caldwell   :       Missing return in SO_DONTROUTE/SO_DEBUG code
      60                 :            :  *              Alan Cox        :       Split IP from generic code
      61                 :            :  *              Alan Cox        :       New kfree_skbmem()
      62                 :            :  *              Alan Cox        :       Make SO_DEBUG superuser only.
      63                 :            :  *              Alan Cox        :       Allow anyone to clear SO_DEBUG
      64                 :            :  *                                      (compatibility fix)
      65                 :            :  *              Alan Cox        :       Added optimistic memory grabbing for AF_UNIX throughput.
      66                 :            :  *              Alan Cox        :       Allocator for a socket is settable.
      67                 :            :  *              Alan Cox        :       SO_ERROR includes soft errors.
      68                 :            :  *              Alan Cox        :       Allow NULL arguments on some SO_ opts
      69                 :            :  *              Alan Cox        :       Generic socket allocation to make hooks
      70                 :            :  *                                      easier (suggested by Craig Metz).
      71                 :            :  *              Michael Pall    :       SO_ERROR returns positive errno again
      72                 :            :  *              Steve Whitehouse:       Added default destructor to free
      73                 :            :  *                                      protocol private data.
      74                 :            :  *              Steve Whitehouse:       Added various other default routines
      75                 :            :  *                                      common to several socket families.
      76                 :            :  *              Chris Evans     :       Call suser() check last on F_SETOWN
      77                 :            :  *              Jay Schulist    :       Added SO_ATTACH_FILTER and SO_DETACH_FILTER.
      78                 :            :  *              Andi Kleen      :       Add sock_kmalloc()/sock_kfree_s()
      79                 :            :  *              Andi Kleen      :       Fix write_space callback
      80                 :            :  *              Chris Evans     :       Security fixes - signedness again
      81                 :            :  *              Arnaldo C. Melo :       cleanups, use skb_queue_purge
      82                 :            :  *
      83                 :            :  * To Fix:
      84                 :            :  *
      85                 :            :  *
      86                 :            :  *              This program is free software; you can redistribute it and/or
      87                 :            :  *              modify it under the terms of the GNU General Public License
      88                 :            :  *              as published by the Free Software Foundation; either version
      89                 :            :  *              2 of the License, or (at your option) any later version.
      90                 :            :  */
      91                 :            : 
      92                 :            : #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      93                 :            : 
      94                 :            : #include <linux/capability.h>
      95                 :            : #include <linux/errno.h>
      96                 :            : #include <linux/errqueue.h>
      97                 :            : #include <linux/types.h>
      98                 :            : #include <linux/socket.h>
      99                 :            : #include <linux/in.h>
     100                 :            : #include <linux/kernel.h>
     101                 :            : #include <linux/module.h>
     102                 :            : #include <linux/proc_fs.h>
     103                 :            : #include <linux/seq_file.h>
     104                 :            : #include <linux/sched.h>
     105                 :            : #include <linux/timer.h>
     106                 :            : #include <linux/string.h>
     107                 :            : #include <linux/sockios.h>
     108                 :            : #include <linux/net.h>
     109                 :            : #include <linux/mm.h>
     110                 :            : #include <linux/slab.h>
     111                 :            : #include <linux/interrupt.h>
     112                 :            : #include <linux/poll.h>
     113                 :            : #include <linux/tcp.h>
     114                 :            : #include <linux/init.h>
     115                 :            : #include <linux/highmem.h>
     116                 :            : #include <linux/user_namespace.h>
     117                 :            : #include <linux/static_key.h>
     118                 :            : #include <linux/memcontrol.h>
     119                 :            : #include <linux/prefetch.h>
     120                 :            : 
     121                 :            : #include <asm/uaccess.h>
     122                 :            : 
     123                 :            : #include <linux/netdevice.h>
     124                 :            : #include <net/protocol.h>
     125                 :            : #include <linux/skbuff.h>
     126                 :            : #include <net/net_namespace.h>
     127                 :            : #include <net/request_sock.h>
     128                 :            : #include <net/sock.h>
     129                 :            : #include <linux/net_tstamp.h>
     130                 :            : #include <net/xfrm.h>
     131                 :            : #include <linux/ipsec.h>
     132                 :            : #include <net/cls_cgroup.h>
     133                 :            : #include <net/netprio_cgroup.h>
     134                 :            : 
     135                 :            : #include <linux/filter.h>
     136                 :            : 
     137                 :            : #include <trace/events/sock.h>
     138                 :            : 
     139                 :            : #ifdef CONFIG_INET
     140                 :            : #include <net/tcp.h>
     141                 :            : #endif
     142                 :            : 
     143                 :            : #include <net/busy_poll.h>
     144                 :            : 
     145                 :            : static DEFINE_MUTEX(proto_list_mutex);
     146                 :            : static LIST_HEAD(proto_list);
     147                 :            : 
     148                 :            : #ifdef CONFIG_MEMCG_KMEM
     149                 :            : int mem_cgroup_sockets_init(struct mem_cgroup *memcg, struct cgroup_subsys *ss)
     150                 :            : {
     151                 :            :         struct proto *proto;
     152                 :            :         int ret = 0;
     153                 :            : 
     154                 :            :         mutex_lock(&proto_list_mutex);
     155                 :            :         list_for_each_entry(proto, &proto_list, node) {
     156                 :            :                 if (proto->init_cgroup) {
     157                 :            :                         ret = proto->init_cgroup(memcg, ss);
     158                 :            :                         if (ret)
     159                 :            :                                 goto out;
     160                 :            :                 }
     161                 :            :         }
     162                 :            : 
     163                 :            :         mutex_unlock(&proto_list_mutex);
     164                 :            :         return ret;
     165                 :            : out:
     166                 :            :         list_for_each_entry_continue_reverse(proto, &proto_list, node)
     167                 :            :                 if (proto->destroy_cgroup)
     168                 :            :                         proto->destroy_cgroup(memcg);
     169                 :            :         mutex_unlock(&proto_list_mutex);
     170                 :            :         return ret;
     171                 :            : }
     172                 :            : 
     173                 :            : void mem_cgroup_sockets_destroy(struct mem_cgroup *memcg)
     174                 :            : {
     175                 :            :         struct proto *proto;
     176                 :            : 
     177                 :            :         mutex_lock(&proto_list_mutex);
     178                 :            :         list_for_each_entry_reverse(proto, &proto_list, node)
     179                 :            :                 if (proto->destroy_cgroup)
     180                 :            :                         proto->destroy_cgroup(memcg);
     181                 :            :         mutex_unlock(&proto_list_mutex);
     182                 :            : }
     183                 :            : #endif
     184                 :            : 
     185                 :            : /*
     186                 :            :  * Each address family might have different locking rules, so we have
     187                 :            :  * one slock key per address family:
     188                 :            :  */
     189                 :            : static struct lock_class_key af_family_keys[AF_MAX];
     190                 :            : static struct lock_class_key af_family_slock_keys[AF_MAX];
     191                 :            : 
     192                 :            : #if defined(CONFIG_MEMCG_KMEM)
     193                 :            : struct static_key memcg_socket_limit_enabled;
     194                 :            : EXPORT_SYMBOL(memcg_socket_limit_enabled);
     195                 :            : #endif
     196                 :            : 
     197                 :            : /*
     198                 :            :  * Make lock validator output more readable. (we pre-construct these
     199                 :            :  * strings build-time, so that runtime initialization of socket
     200                 :            :  * locks is fast):
     201                 :            :  */
     202                 :            : static const char *const af_family_key_strings[AF_MAX+1] = {
     203                 :            :   "sk_lock-AF_UNSPEC", "sk_lock-AF_UNIX"     , "sk_lock-AF_INET"     ,
     204                 :            :   "sk_lock-AF_AX25"  , "sk_lock-AF_IPX"      , "sk_lock-AF_APPLETALK",
     205                 :            :   "sk_lock-AF_NETROM", "sk_lock-AF_BRIDGE"   , "sk_lock-AF_ATMPVC"   ,
     206                 :            :   "sk_lock-AF_X25"   , "sk_lock-AF_INET6"    , "sk_lock-AF_ROSE"     ,
     207                 :            :   "sk_lock-AF_DECnet", "sk_lock-AF_NETBEUI"  , "sk_lock-AF_SECURITY" ,
     208                 :            :   "sk_lock-AF_KEY"   , "sk_lock-AF_NETLINK"  , "sk_lock-AF_PACKET"   ,
     209                 :            :   "sk_lock-AF_ASH"   , "sk_lock-AF_ECONET"   , "sk_lock-AF_ATMSVC"   ,
     210                 :            :   "sk_lock-AF_RDS"   , "sk_lock-AF_SNA"      , "sk_lock-AF_IRDA"     ,
     211                 :            :   "sk_lock-AF_PPPOX" , "sk_lock-AF_WANPIPE"  , "sk_lock-AF_LLC"      ,
     212                 :            :   "sk_lock-27"       , "sk_lock-28"          , "sk_lock-AF_CAN"      ,
     213                 :            :   "sk_lock-AF_TIPC"  , "sk_lock-AF_BLUETOOTH", "sk_lock-IUCV"        ,
     214                 :            :   "sk_lock-AF_RXRPC" , "sk_lock-AF_ISDN"     , "sk_lock-AF_PHONET"   ,
     215                 :            :   "sk_lock-AF_IEEE802154", "sk_lock-AF_CAIF" , "sk_lock-AF_ALG"      ,
     216                 :            :   "sk_lock-AF_NFC"   , "sk_lock-AF_VSOCK"    , "sk_lock-AF_MAX"
     217                 :            : };
     218                 :            : static const char *const af_family_slock_key_strings[AF_MAX+1] = {
     219                 :            :   "slock-AF_UNSPEC", "slock-AF_UNIX"     , "slock-AF_INET"     ,
     220                 :            :   "slock-AF_AX25"  , "slock-AF_IPX"      , "slock-AF_APPLETALK",
     221                 :            :   "slock-AF_NETROM", "slock-AF_BRIDGE"   , "slock-AF_ATMPVC"   ,
     222                 :            :   "slock-AF_X25"   , "slock-AF_INET6"    , "slock-AF_ROSE"     ,
     223                 :            :   "slock-AF_DECnet", "slock-AF_NETBEUI"  , "slock-AF_SECURITY" ,
     224                 :            :   "slock-AF_KEY"   , "slock-AF_NETLINK"  , "slock-AF_PACKET"   ,
     225                 :            :   "slock-AF_ASH"   , "slock-AF_ECONET"   , "slock-AF_ATMSVC"   ,
     226                 :            :   "slock-AF_RDS"   , "slock-AF_SNA"      , "slock-AF_IRDA"     ,
     227                 :            :   "slock-AF_PPPOX" , "slock-AF_WANPIPE"  , "slock-AF_LLC"      ,
     228                 :            :   "slock-27"       , "slock-28"          , "slock-AF_CAN"      ,
     229                 :            :   "slock-AF_TIPC"  , "slock-AF_BLUETOOTH", "slock-AF_IUCV"     ,
     230                 :            :   "slock-AF_RXRPC" , "slock-AF_ISDN"     , "slock-AF_PHONET"   ,
     231                 :            :   "slock-AF_IEEE802154", "slock-AF_CAIF" , "slock-AF_ALG"      ,
     232                 :            :   "slock-AF_NFC"   , "slock-AF_VSOCK"    ,"slock-AF_MAX"
     233                 :            : };
     234                 :            : static const char *const af_family_clock_key_strings[AF_MAX+1] = {
     235                 :            :   "clock-AF_UNSPEC", "clock-AF_UNIX"     , "clock-AF_INET"     ,
     236                 :            :   "clock-AF_AX25"  , "clock-AF_IPX"      , "clock-AF_APPLETALK",
     237                 :            :   "clock-AF_NETROM", "clock-AF_BRIDGE"   , "clock-AF_ATMPVC"   ,
     238                 :            :   "clock-AF_X25"   , "clock-AF_INET6"    , "clock-AF_ROSE"     ,
     239                 :            :   "clock-AF_DECnet", "clock-AF_NETBEUI"  , "clock-AF_SECURITY" ,
     240                 :            :   "clock-AF_KEY"   , "clock-AF_NETLINK"  , "clock-AF_PACKET"   ,
     241                 :            :   "clock-AF_ASH"   , "clock-AF_ECONET"   , "clock-AF_ATMSVC"   ,
     242                 :            :   "clock-AF_RDS"   , "clock-AF_SNA"      , "clock-AF_IRDA"     ,
     243                 :            :   "clock-AF_PPPOX" , "clock-AF_WANPIPE"  , "clock-AF_LLC"      ,
     244                 :            :   "clock-27"       , "clock-28"          , "clock-AF_CAN"      ,
     245                 :            :   "clock-AF_TIPC"  , "clock-AF_BLUETOOTH", "clock-AF_IUCV"     ,
     246                 :            :   "clock-AF_RXRPC" , "clock-AF_ISDN"     , "clock-AF_PHONET"   ,
     247                 :            :   "clock-AF_IEEE802154", "clock-AF_CAIF" , "clock-AF_ALG"      ,
     248                 :            :   "clock-AF_NFC"   , "clock-AF_VSOCK"    , "clock-AF_MAX"
     249                 :            : };
     250                 :            : 
     251                 :            : /*
     252                 :            :  * sk_callback_lock locking rules are per-address-family,
     253                 :            :  * so split the lock classes by using a per-AF key:
     254                 :            :  */
     255                 :            : static struct lock_class_key af_callback_keys[AF_MAX];
     256                 :            : 
     257                 :            : /* Take into consideration the size of the struct sk_buff overhead in the
     258                 :            :  * determination of these values, since that is non-constant across
     259                 :            :  * platforms.  This makes socket queueing behavior and performance
     260                 :            :  * not depend upon such differences.
     261                 :            :  */
     262                 :            : #define _SK_MEM_PACKETS         256
     263                 :            : #define _SK_MEM_OVERHEAD        SKB_TRUESIZE(256)
     264                 :            : #define SK_WMEM_MAX             (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS)
     265                 :            : #define SK_RMEM_MAX             (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS)
     266                 :            : 
     267                 :            : /* Run time adjustable parameters. */
     268                 :            : __u32 sysctl_wmem_max __read_mostly = SK_WMEM_MAX;
     269                 :            : EXPORT_SYMBOL(sysctl_wmem_max);
     270                 :            : __u32 sysctl_rmem_max __read_mostly = SK_RMEM_MAX;
     271                 :            : EXPORT_SYMBOL(sysctl_rmem_max);
     272                 :            : __u32 sysctl_wmem_default __read_mostly = SK_WMEM_MAX;
     273                 :            : __u32 sysctl_rmem_default __read_mostly = SK_RMEM_MAX;
     274                 :            : 
     275                 :            : /* Maximal space eaten by iovec or ancillary data plus some space */
     276                 :            : int sysctl_optmem_max __read_mostly = sizeof(unsigned long)*(2*UIO_MAXIOV+512);
     277                 :            : EXPORT_SYMBOL(sysctl_optmem_max);
     278                 :            : 
     279                 :            : struct static_key memalloc_socks = STATIC_KEY_INIT_FALSE;
     280                 :            : EXPORT_SYMBOL_GPL(memalloc_socks);
     281                 :            : 
     282                 :            : /**
     283                 :            :  * sk_set_memalloc - sets %SOCK_MEMALLOC
     284                 :            :  * @sk: socket to set it on
     285                 :            :  *
     286                 :            :  * Set %SOCK_MEMALLOC on a socket for access to emergency reserves.
     287                 :            :  * It's the responsibility of the admin to adjust min_free_kbytes
     288                 :            :  * to meet the requirements
     289                 :            :  */
     290                 :          0 : void sk_set_memalloc(struct sock *sk)
     291                 :            : {
     292                 :            :         sock_set_flag(sk, SOCK_MEMALLOC);
     293                 :          0 :         sk->sk_allocation |= __GFP_MEMALLOC;
     294                 :            :         static_key_slow_inc(&memalloc_socks);
     295                 :          0 : }
     296                 :            : EXPORT_SYMBOL_GPL(sk_set_memalloc);
     297                 :            : 
     298                 :          0 : void sk_clear_memalloc(struct sock *sk)
     299                 :            : {
     300                 :            :         sock_reset_flag(sk, SOCK_MEMALLOC);
     301                 :          0 :         sk->sk_allocation &= ~__GFP_MEMALLOC;
     302                 :            :         static_key_slow_dec(&memalloc_socks);
     303                 :            : 
     304                 :            :         /*
     305                 :            :          * SOCK_MEMALLOC is allowed to ignore rmem limits to ensure forward
     306                 :            :          * progress of swapping. However, if SOCK_MEMALLOC is cleared while
     307                 :            :          * it has rmem allocations there is a risk that the user of the
     308                 :            :          * socket cannot make forward progress due to exceeding the rmem
     309                 :            :          * limits. By rights, sk_clear_memalloc() should only be called
     310                 :            :          * on sockets being torn down but warn and reset the accounting if
     311                 :            :          * that assumption breaks.
     312                 :            :          */
     313 [ #  # ][ #  # ]:          0 :         if (WARN_ON(sk->sk_forward_alloc))
     314                 :            :                 sk_mem_reclaim(sk);
     315                 :          0 : }
     316                 :            : EXPORT_SYMBOL_GPL(sk_clear_memalloc);
     317                 :            : 
     318                 :          0 : int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
     319                 :            : {
     320                 :            :         int ret;
     321                 :          0 :         unsigned long pflags = current->flags;
     322                 :            : 
     323                 :            :         /* these should have been dropped before queueing */
     324         [ #  # ]:          0 :         BUG_ON(!sock_flag(sk, SOCK_MEMALLOC));
     325                 :            : 
     326                 :          0 :         current->flags |= PF_MEMALLOC;
     327                 :          0 :         ret = sk->sk_backlog_rcv(sk, skb);
     328                 :          0 :         tsk_restore_flags(current, pflags, PF_MEMALLOC);
     329                 :            : 
     330                 :          0 :         return ret;
     331                 :            : }
     332                 :            : EXPORT_SYMBOL(__sk_backlog_rcv);
     333                 :            : 
     334                 :          0 : static int sock_set_timeout(long *timeo_p, char __user *optval, int optlen)
     335                 :            : {
     336                 :            :         struct timeval tv;
     337                 :            : 
     338         [ #  # ]:          0 :         if (optlen < sizeof(tv))
     339                 :            :                 return -EINVAL;
     340         [ #  # ]:          0 :         if (copy_from_user(&tv, optval, sizeof(tv)))
     341                 :            :                 return -EFAULT;
     342         [ #  # ]:          0 :         if (tv.tv_usec < 0 || tv.tv_usec >= USEC_PER_SEC)
     343                 :            :                 return -EDOM;
     344                 :            : 
     345         [ #  # ]:          0 :         if (tv.tv_sec < 0) {
     346                 :            :                 static int warned __read_mostly;
     347                 :            : 
     348                 :          0 :                 *timeo_p = 0;
     349 [ #  # ][ #  # ]:          0 :                 if (warned < 10 && net_ratelimit()) {
     350                 :          0 :                         warned++;
     351                 :          0 :                         pr_info("%s: `%s' (pid %d) tries to set negative timeout\n",
     352                 :            :                                 __func__, current->comm, task_pid_nr(current));
     353                 :            :                 }
     354                 :            :                 return 0;
     355                 :            :         }
     356                 :          0 :         *timeo_p = MAX_SCHEDULE_TIMEOUT;
     357 [ #  # ][ #  # ]:          0 :         if (tv.tv_sec == 0 && tv.tv_usec == 0)
     358                 :            :                 return 0;
     359         [ #  # ]:          0 :         if (tv.tv_sec < (MAX_SCHEDULE_TIMEOUT/HZ - 1))
     360                 :          0 :                 *timeo_p = tv.tv_sec*HZ + (tv.tv_usec+(1000000/HZ-1))/(1000000/HZ);
     361                 :            :         return 0;
     362                 :            : }
     363                 :            : 
     364                 :          0 : static void sock_warn_obsolete_bsdism(const char *name)
     365                 :            : {
     366                 :            :         static int warned;
     367                 :            :         static char warncomm[TASK_COMM_LEN];
     368 [ #  # ][ #  # ]:          0 :         if (strcmp(warncomm, current->comm) && warned < 5) {
     369                 :          0 :                 strcpy(warncomm,  current->comm);
     370                 :          0 :                 pr_warn("process `%s' is using obsolete %s SO_BSDCOMPAT\n",
     371                 :            :                         warncomm, name);
     372                 :          0 :                 warned++;
     373                 :            :         }
     374                 :          0 : }
     375                 :            : 
     376                 :            : #define SK_FLAGS_TIMESTAMP ((1UL << SOCK_TIMESTAMP) | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE))
     377                 :            : 
     378                 :          0 : static void sock_disable_timestamp(struct sock *sk, unsigned long flags)
     379                 :            : {
     380         [ -  + ]:     461048 :         if (sk->sk_flags & flags) {
     381                 :          0 :                 sk->sk_flags &= ~flags;
     382         [ #  # ]:          0 :                 if (!(sk->sk_flags & SK_FLAGS_TIMESTAMP))
     383                 :          0 :                         net_disable_timestamp();
     384                 :            :         }
     385                 :          0 : }
     386                 :            : 
     387                 :            : 
     388                 :          0 : int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
     389                 :            : {
     390                 :            :         int err;
     391                 :            :         int skb_len;
     392                 :            :         unsigned long flags;
     393                 :        196 :         struct sk_buff_head *list = &sk->sk_receive_queue;
     394                 :            : 
     395         [ -  + ]:        196 :         if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) {
     396                 :          0 :                 atomic_inc(&sk->sk_drops);
     397                 :            :                 trace_sock_rcvqueue_full(sk, skb);
     398                 :            :                 return -ENOMEM;
     399                 :            :         }
     400                 :            : 
     401                 :        196 :         err = sk_filter(sk, skb);
     402         [ +  - ]:        196 :         if (err)
     403                 :            :                 return err;
     404                 :            : 
     405         [ -  + ]:        196 :         if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
     406                 :          0 :                 atomic_inc(&sk->sk_drops);
     407                 :          0 :                 return -ENOBUFS;
     408                 :            :         }
     409                 :            : 
     410                 :        196 :         skb->dev = NULL;
     411                 :            :         skb_set_owner_r(skb, sk);
     412                 :            : 
     413                 :            :         /* Cache the SKB length before we tack it onto the receive
     414                 :            :          * queue.  Once it is added it no longer belongs to us and
     415                 :            :          * may be freed by other threads of control pulling packets
     416                 :            :          * from the queue.
     417                 :            :          */
     418                 :        196 :         skb_len = skb->len;
     419                 :            : 
     420                 :            :         /* we escape from rcu protected region, make sure we dont leak
     421                 :            :          * a norefcounted dst
     422                 :            :          */
     423                 :            :         skb_dst_force(skb);
     424                 :            : 
     425                 :        196 :         spin_lock_irqsave(&list->lock, flags);
     426                 :        196 :         skb->dropcount = atomic_read(&sk->sk_drops);
     427                 :            :         __skb_queue_tail(list, skb);
     428                 :            :         spin_unlock_irqrestore(&list->lock, flags);
     429                 :            : 
     430         [ +  - ]:        196 :         if (!sock_flag(sk, SOCK_DEAD))
     431                 :        196 :                 sk->sk_data_ready(sk, skb_len);
     432                 :            :         return 0;
     433                 :            : }
     434                 :            : EXPORT_SYMBOL(sock_queue_rcv_skb);
     435                 :            : 
     436                 :          0 : int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
     437                 :            : {
     438                 :            :         int rc = NET_RX_SUCCESS;
     439                 :            : 
     440         [ #  # ]:          0 :         if (sk_filter(sk, skb))
     441                 :            :                 goto discard_and_relse;
     442                 :            : 
     443                 :          0 :         skb->dev = NULL;
     444                 :            : 
     445         [ #  # ]:          0 :         if (sk_rcvqueues_full(sk, skb, sk->sk_rcvbuf)) {
     446                 :          0 :                 atomic_inc(&sk->sk_drops);
     447                 :            :                 goto discard_and_relse;
     448                 :            :         }
     449         [ #  # ]:          0 :         if (nested)
     450                 :          0 :                 bh_lock_sock_nested(sk);
     451                 :            :         else
     452                 :            :                 bh_lock_sock(sk);
     453         [ #  # ]:          0 :         if (!sock_owned_by_user(sk)) {
     454                 :            :                 /*
     455                 :            :                  * trylock + unlock semantics:
     456                 :            :                  */
     457                 :            :                 mutex_acquire(&sk->sk_lock.dep_map, 0, 1, _RET_IP_);
     458                 :            : 
     459                 :            :                 rc = sk_backlog_rcv(sk, skb);
     460                 :            : 
     461                 :            :                 mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
     462         [ #  # ]:          0 :         } else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) {
     463                 :            :                 bh_unlock_sock(sk);
     464                 :          0 :                 atomic_inc(&sk->sk_drops);
     465                 :            :                 goto discard_and_relse;
     466                 :            :         }
     467                 :            : 
     468                 :            :         bh_unlock_sock(sk);
     469                 :            : out:
     470                 :            :         sock_put(sk);
     471                 :          0 :         return rc;
     472                 :            : discard_and_relse:
     473                 :          0 :         kfree_skb(skb);
     474                 :          0 :         goto out;
     475                 :            : }
     476                 :            : EXPORT_SYMBOL(sk_receive_skb);
     477                 :            : 
     478                 :          0 : struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
     479                 :            : {
     480                 :            :         struct dst_entry *dst = __sk_dst_get(sk);
     481                 :            : 
     482 [ +  + ][ +  + ]:      54642 :         if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
                 [ -  + ]
     483                 :            :                 sk_tx_queue_clear(sk);
     484                 :          0 :                 RCU_INIT_POINTER(sk->sk_dst_cache, NULL);
     485                 :          0 :                 dst_release(dst);
     486                 :          0 :                 return NULL;
     487                 :            :         }
     488                 :            : 
     489                 :      54641 :         return dst;
     490                 :            : }
     491                 :            : EXPORT_SYMBOL(__sk_dst_check);
     492                 :            : 
     493                 :          0 : struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie)
     494                 :            : {
     495                 :            :         struct dst_entry *dst = sk_dst_get(sk);
     496                 :            : 
     497 [ +  - ][ +  - ]:         48 :         if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
                 [ -  + ]
     498                 :            :                 sk_dst_reset(sk);
     499                 :          0 :                 dst_release(dst);
     500                 :          0 :                 return NULL;
     501                 :            :         }
     502                 :            : 
     503                 :         24 :         return dst;
     504                 :            : }
     505                 :            : EXPORT_SYMBOL(sk_dst_check);
     506                 :            : 
     507                 :          0 : static int sock_setbindtodevice(struct sock *sk, char __user *optval,
     508                 :            :                                 int optlen)
     509                 :            : {
     510                 :            :         int ret = -ENOPROTOOPT;
     511                 :            : #ifdef CONFIG_NETDEVICES
     512                 :            :         struct net *net = sock_net(sk);
     513                 :            :         char devname[IFNAMSIZ];
     514                 :            :         int index;
     515                 :            : 
     516                 :            :         /* Sorry... */
     517                 :            :         ret = -EPERM;
     518         [ #  # ]:          0 :         if (!ns_capable(net->user_ns, CAP_NET_RAW))
     519                 :            :                 goto out;
     520                 :            : 
     521                 :            :         ret = -EINVAL;
     522         [ #  # ]:          0 :         if (optlen < 0)
     523                 :            :                 goto out;
     524                 :            : 
     525                 :            :         /* Bind this socket to a particular device like "eth0",
     526                 :            :          * as specified in the passed interface name. If the
     527                 :            :          * name is "" or the option length is zero the socket
     528                 :            :          * is not bound.
     529                 :            :          */
     530         [ #  # ]:          0 :         if (optlen > IFNAMSIZ - 1)
     531                 :            :                 optlen = IFNAMSIZ - 1;
     532                 :          0 :         memset(devname, 0, sizeof(devname));
     533                 :            : 
     534                 :            :         ret = -EFAULT;
     535         [ #  # ]:          0 :         if (copy_from_user(devname, optval, optlen))
     536                 :            :                 goto out;
     537                 :            : 
     538                 :            :         index = 0;
     539         [ #  # ]:          0 :         if (devname[0] != '\0') {
     540                 :            :                 struct net_device *dev;
     541                 :            : 
     542                 :            :                 rcu_read_lock();
     543                 :          0 :                 dev = dev_get_by_name_rcu(net, devname);
     544         [ #  # ]:          0 :                 if (dev)
     545                 :          0 :                         index = dev->ifindex;
     546                 :            :                 rcu_read_unlock();
     547                 :            :                 ret = -ENODEV;
     548         [ #  # ]:          0 :                 if (!dev)
     549                 :            :                         goto out;
     550                 :            :         }
     551                 :            : 
     552                 :            :         lock_sock(sk);
     553                 :          0 :         sk->sk_bound_dev_if = index;
     554                 :            :         sk_dst_reset(sk);
     555                 :          0 :         release_sock(sk);
     556                 :            : 
     557                 :            :         ret = 0;
     558                 :            : 
     559                 :            : out:
     560                 :            : #endif
     561                 :            : 
     562                 :          0 :         return ret;
     563                 :            : }
     564                 :            : 
     565                 :          0 : static int sock_getbindtodevice(struct sock *sk, char __user *optval,
     566                 :            :                                 int __user *optlen, int len)
     567                 :            : {
     568                 :            :         int ret = -ENOPROTOOPT;
     569                 :            : #ifdef CONFIG_NETDEVICES
     570                 :            :         struct net *net = sock_net(sk);
     571                 :            :         char devname[IFNAMSIZ];
     572                 :            : 
     573         [ #  # ]:          0 :         if (sk->sk_bound_dev_if == 0) {
     574                 :            :                 len = 0;
     575                 :            :                 goto zero;
     576                 :            :         }
     577                 :            : 
     578                 :            :         ret = -EINVAL;
     579         [ #  # ]:          0 :         if (len < IFNAMSIZ)
     580                 :            :                 goto out;
     581                 :            : 
     582                 :          0 :         ret = netdev_get_name(net, devname, sk->sk_bound_dev_if);
     583         [ #  # ]:          0 :         if (ret)
     584                 :            :                 goto out;
     585                 :            : 
     586                 :          0 :         len = strlen(devname) + 1;
     587                 :            : 
     588                 :            :         ret = -EFAULT;
     589         [ #  # ]:          0 :         if (copy_to_user(optval, devname, len))
     590                 :            :                 goto out;
     591                 :            : 
     592                 :            : zero:
     593                 :            :         ret = -EFAULT;
     594         [ #  # ]:          0 :         if (put_user(len, optlen))
     595                 :            :                 goto out;
     596                 :            : 
     597                 :            :         ret = 0;
     598                 :            : 
     599                 :            : out:
     600                 :            : #endif
     601                 :            : 
     602                 :          0 :         return ret;
     603                 :            : }
     604                 :            : 
     605                 :            : static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool)
     606                 :            : {
     607 [ #  # ][ #  # ]:          2 :         if (valbool)
         [ #  # ][ +  - ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     608                 :            :                 sock_set_flag(sk, bit);
     609                 :            :         else
     610                 :            :                 sock_reset_flag(sk, bit);
     611                 :            : }
     612                 :            : 
     613                 :            : /*
     614                 :            :  *      This is meant for all protocols to use and covers goings on
     615                 :            :  *      at the socket level. Everything here is generic.
     616                 :            :  */
     617                 :            : 
     618                 :          0 : int sock_setsockopt(struct socket *sock, int level, int optname,
     619                 :            :                     char __user *optval, unsigned int optlen)
     620                 :            : {
     621                 :         71 :         struct sock *sk = sock->sk;
     622                 :            :         int val;
     623                 :            :         int valbool;
     624                 :            :         struct linger ling;
     625                 :            :         int ret = 0;
     626                 :            : 
     627                 :            :         /*
     628                 :            :          *      Options without arguments
     629                 :            :          */
     630                 :            : 
     631         [ -  + ]:         71 :         if (optname == SO_BINDTODEVICE)
     632                 :          0 :                 return sock_setbindtodevice(sk, optval, optlen);
     633                 :            : 
     634         [ +  + ]:         71 :         if (optlen < sizeof(int))
     635                 :            :                 return -EINVAL;
     636                 :            : 
     637         [ +  + ]:         70 :         if (get_user(val, (int __user *)optval))
     638                 :            :                 return -EFAULT;
     639                 :            : 
     640                 :         69 :         valbool = val ? 1 : 0;
     641                 :            : 
     642                 :            :         lock_sock(sk);
     643                 :            : 
     644   [ -  +  -  -  :         69 :         switch (optname) {
          -  +  -  +  -  
          +  -  -  -  -  
          -  +  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
             -  -  -  -  
                      - ]
     645                 :            :         case SO_DEBUG:
     646 [ #  # ][ #  # ]:          0 :                 if (val && !capable(CAP_NET_ADMIN))
     647                 :            :                         ret = -EACCES;
     648                 :            :                 else
     649                 :            :                         sock_valbool_flag(sk, SOCK_DBG, valbool);
     650                 :            :                 break;
     651                 :            :         case SO_REUSEADDR:
     652                 :         34 :                 sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE);
     653                 :         34 :                 break;
     654                 :            :         case SO_REUSEPORT:
     655                 :          0 :                 sk->sk_reuseport = valbool;
     656                 :          0 :                 break;
     657                 :            :         case SO_TYPE:
     658                 :            :         case SO_PROTOCOL:
     659                 :            :         case SO_DOMAIN:
     660                 :            :         case SO_ERROR:
     661                 :            :                 ret = -ENOPROTOOPT;
     662                 :            :                 break;
     663                 :            :         case SO_DONTROUTE:
     664                 :            :                 sock_valbool_flag(sk, SOCK_LOCALROUTE, valbool);
     665                 :            :                 break;
     666                 :            :         case SO_BROADCAST:
     667                 :            :                 sock_valbool_flag(sk, SOCK_BROADCAST, valbool);
     668                 :            :                 break;
     669                 :            :         case SO_SNDBUF:
     670                 :            :                 /* Don't error on this BSD doesn't and if you think
     671                 :            :                  * about it this is right. Otherwise apps have to
     672                 :            :                  * play 'guess the biggest size' games. RCVBUF/SNDBUF
     673                 :            :                  * are treated in BSD as hints
     674                 :            :                  */
     675                 :          1 :                 val = min_t(u32, val, sysctl_wmem_max);
     676                 :            : set_sndbuf:
     677                 :          1 :                 sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
     678                 :          1 :                 sk->sk_sndbuf = max_t(u32, val * 2, SOCK_MIN_SNDBUF);
     679                 :            :                 /* Wake up sending tasks if we upped the value. */
     680                 :          1 :                 sk->sk_write_space(sk);
     681                 :          1 :                 break;
     682                 :            : 
     683                 :            :         case SO_SNDBUFFORCE:
     684         [ #  # ]:          0 :                 if (!capable(CAP_NET_ADMIN)) {
     685                 :            :                         ret = -EPERM;
     686                 :            :                         break;
     687                 :            :                 }
     688                 :            :                 goto set_sndbuf;
     689                 :            : 
     690                 :            :         case SO_RCVBUF:
     691                 :            :                 /* Don't error on this BSD doesn't and if you think
     692                 :            :                  * about it this is right. Otherwise apps have to
     693                 :            :                  * play 'guess the biggest size' games. RCVBUF/SNDBUF
     694                 :            :                  * are treated in BSD as hints
     695                 :            :                  */
     696                 :          1 :                 val = min_t(u32, val, sysctl_rmem_max);
     697                 :            : set_rcvbuf:
     698                 :          1 :                 sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
     699                 :            :                 /*
     700                 :            :                  * We double it on the way in to account for
     701                 :            :                  * "struct sk_buff" etc. overhead.   Applications
     702                 :            :                  * assume that the SO_RCVBUF setting they make will
     703                 :            :                  * allow that much actual data to be received on that
     704                 :            :                  * socket.
     705                 :            :                  *
     706                 :            :                  * Applications are unaware that "struct sk_buff" and
     707                 :            :                  * other overheads allocate from the receive buffer
     708                 :            :                  * during socket buffer allocation.
     709                 :            :                  *
     710                 :            :                  * And after considering the possible alternatives,
     711                 :            :                  * returning the value we actually used in getsockopt
     712                 :            :                  * is the most desirable behavior.
     713                 :            :                  */
     714                 :          1 :                 sk->sk_rcvbuf = max_t(u32, val * 2, SOCK_MIN_RCVBUF);
     715                 :          1 :                 break;
     716                 :            : 
     717                 :            :         case SO_RCVBUFFORCE:
     718         [ #  # ]:          0 :                 if (!capable(CAP_NET_ADMIN)) {
     719                 :            :                         ret = -EPERM;
     720                 :            :                         break;
     721                 :            :                 }
     722                 :            :                 goto set_rcvbuf;
     723                 :            : 
     724                 :            :         case SO_KEEPALIVE:
     725                 :            : #ifdef CONFIG_INET
     726         [ +  - ]:          2 :                 if (sk->sk_protocol == IPPROTO_TCP &&
     727                 :            :                     sk->sk_type == SOCK_STREAM)
     728                 :          2 :                         tcp_set_keepalive(sk, valbool);
     729                 :            : #endif
     730                 :            :                 sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
     731                 :            :                 break;
     732                 :            : 
     733                 :            :         case SO_OOBINLINE:
     734                 :            :                 sock_valbool_flag(sk, SOCK_URGINLINE, valbool);
     735                 :            :                 break;
     736                 :            : 
     737                 :            :         case SO_NO_CHECK:
     738                 :          0 :                 sk->sk_no_check = valbool;
     739                 :          0 :                 break;
     740                 :            : 
     741                 :            :         case SO_PRIORITY:
     742   [ #  #  #  # ]:          0 :                 if ((val >= 0 && val <= 6) ||
     743                 :          0 :                     ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
     744                 :          0 :                         sk->sk_priority = val;
     745                 :            :                 else
     746                 :            :                         ret = -EPERM;
     747                 :            :                 break;
     748                 :            : 
     749                 :            :         case SO_LINGER:
     750         [ #  # ]:          0 :                 if (optlen < sizeof(ling)) {
     751                 :            :                         ret = -EINVAL;  /* 1003.1g */
     752                 :            :                         break;
     753                 :            :                 }
     754         [ #  # ]:          0 :                 if (copy_from_user(&ling, optval, sizeof(ling))) {
     755                 :            :                         ret = -EFAULT;
     756                 :            :                         break;
     757                 :            :                 }
     758         [ #  # ]:          0 :                 if (!ling.l_onoff)
     759                 :            :                         sock_reset_flag(sk, SOCK_LINGER);
     760                 :            :                 else {
     761                 :            : #if (BITS_PER_LONG == 32)
     762         [ #  # ]:          0 :                         if ((unsigned int)ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ)
     763                 :          0 :                                 sk->sk_lingertime = MAX_SCHEDULE_TIMEOUT;
     764                 :            :                         else
     765                 :            : #endif
     766                 :          0 :                                 sk->sk_lingertime = (unsigned int)ling.l_linger * HZ;
     767                 :            :                         sock_set_flag(sk, SOCK_LINGER);
     768                 :            :                 }
     769                 :            :                 break;
     770                 :            : 
     771                 :            :         case SO_BSDCOMPAT:
     772                 :          0 :                 sock_warn_obsolete_bsdism("setsockopt");
     773                 :          0 :                 break;
     774                 :            : 
     775                 :            :         case SO_PASSCRED:
     776         [ +  - ]:         31 :                 if (valbool)
     777                 :         31 :                         set_bit(SOCK_PASSCRED, &sock->flags);
     778                 :            :                 else
     779                 :          0 :                         clear_bit(SOCK_PASSCRED, &sock->flags);
     780                 :            :                 break;
     781                 :            : 
     782                 :            :         case SO_TIMESTAMP:
     783                 :            :         case SO_TIMESTAMPNS:
     784         [ #  # ]:          0 :                 if (valbool)  {
     785         [ #  # ]:          0 :                         if (optname == SO_TIMESTAMP)
     786                 :            :                                 sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
     787                 :            :                         else
     788                 :            :                                 sock_set_flag(sk, SOCK_RCVTSTAMPNS);
     789                 :            :                         sock_set_flag(sk, SOCK_RCVTSTAMP);
     790                 :          0 :                         sock_enable_timestamp(sk, SOCK_TIMESTAMP);
     791                 :            :                 } else {
     792                 :            :                         sock_reset_flag(sk, SOCK_RCVTSTAMP);
     793                 :            :                         sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
     794                 :            :                 }
     795                 :            :                 break;
     796                 :            : 
     797                 :            :         case SO_TIMESTAMPING:
     798         [ #  # ]:          0 :                 if (val & ~SOF_TIMESTAMPING_MASK) {
     799                 :            :                         ret = -EINVAL;
     800                 :            :                         break;
     801                 :            :                 }
     802                 :          0 :                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_TX_HARDWARE,
     803                 :            :                                   val & SOF_TIMESTAMPING_TX_HARDWARE);
     804                 :          0 :                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE,
     805                 :            :                                   val & SOF_TIMESTAMPING_TX_SOFTWARE);
     806                 :          0 :                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_RX_HARDWARE,
     807                 :            :                                   val & SOF_TIMESTAMPING_RX_HARDWARE);
     808         [ #  # ]:          0 :                 if (val & SOF_TIMESTAMPING_RX_SOFTWARE)
     809                 :          0 :                         sock_enable_timestamp(sk,
     810                 :            :                                               SOCK_TIMESTAMPING_RX_SOFTWARE);
     811                 :            :                 else
     812                 :          0 :                         sock_disable_timestamp(sk,
     813                 :            :                                                (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE));
     814                 :          0 :                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_SOFTWARE,
     815                 :            :                                   val & SOF_TIMESTAMPING_SOFTWARE);
     816                 :          0 :                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE,
     817                 :            :                                   val & SOF_TIMESTAMPING_SYS_HARDWARE);
     818                 :          0 :                 sock_valbool_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE,
     819                 :            :                                   val & SOF_TIMESTAMPING_RAW_HARDWARE);
     820                 :            :                 break;
     821                 :            : 
     822                 :            :         case SO_RCVLOWAT:
     823         [ #  # ]:          0 :                 if (val < 0)
     824                 :            :                         val = INT_MAX;
     825         [ #  # ]:          0 :                 sk->sk_rcvlowat = val ? : 1;
     826                 :          0 :                 break;
     827                 :            : 
     828                 :            :         case SO_RCVTIMEO:
     829                 :          0 :                 ret = sock_set_timeout(&sk->sk_rcvtimeo, optval, optlen);
     830                 :          0 :                 break;
     831                 :            : 
     832                 :            :         case SO_SNDTIMEO:
     833                 :          0 :                 ret = sock_set_timeout(&sk->sk_sndtimeo, optval, optlen);
     834                 :          0 :                 break;
     835                 :            : 
     836                 :            :         case SO_ATTACH_FILTER:
     837                 :            :                 ret = -EINVAL;
     838         [ #  # ]:          0 :                 if (optlen == sizeof(struct sock_fprog)) {
     839                 :            :                         struct sock_fprog fprog;
     840                 :            : 
     841                 :            :                         ret = -EFAULT;
     842         [ #  # ]:          0 :                         if (copy_from_user(&fprog, optval, sizeof(fprog)))
     843                 :            :                                 break;
     844                 :            : 
     845                 :          0 :                         ret = sk_attach_filter(&fprog, sk);
     846                 :            :                 }
     847                 :            :                 break;
     848                 :            : 
     849                 :            :         case SO_DETACH_FILTER:
     850                 :          0 :                 ret = sk_detach_filter(sk);
     851                 :          0 :                 break;
     852                 :            : 
     853                 :            :         case SO_LOCK_FILTER:
     854 [ #  # ][ #  # ]:          0 :                 if (sock_flag(sk, SOCK_FILTER_LOCKED) && !valbool)
     855                 :            :                         ret = -EPERM;
     856                 :            :                 else
     857                 :            :                         sock_valbool_flag(sk, SOCK_FILTER_LOCKED, valbool);
     858                 :            :                 break;
     859                 :            : 
     860                 :            :         case SO_PASSSEC:
     861         [ #  # ]:          0 :                 if (valbool)
     862                 :          0 :                         set_bit(SOCK_PASSSEC, &sock->flags);
     863                 :            :                 else
     864                 :          0 :                         clear_bit(SOCK_PASSSEC, &sock->flags);
     865                 :            :                 break;
     866                 :            :         case SO_MARK:
     867         [ #  # ]:          0 :                 if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
     868                 :            :                         ret = -EPERM;
     869                 :            :                 else
     870                 :          0 :                         sk->sk_mark = val;
     871                 :            :                 break;
     872                 :            : 
     873                 :            :                 /* We implement the SO_SNDLOWAT etc to
     874                 :            :                    not be settable (1003.1g 5.3) */
     875                 :            :         case SO_RXQ_OVFL:
     876                 :            :                 sock_valbool_flag(sk, SOCK_RXQ_OVFL, valbool);
     877                 :            :                 break;
     878                 :            : 
     879                 :            :         case SO_WIFI_STATUS:
     880                 :            :                 sock_valbool_flag(sk, SOCK_WIFI_STATUS, valbool);
     881                 :            :                 break;
     882                 :            : 
     883                 :            :         case SO_PEEK_OFF:
     884         [ #  # ]:          0 :                 if (sock->ops->set_peek_off)
     885                 :          0 :                         ret = sock->ops->set_peek_off(sk, val);
     886                 :            :                 else
     887                 :            :                         ret = -EOPNOTSUPP;
     888                 :            :                 break;
     889                 :            : 
     890                 :            :         case SO_NOFCS:
     891                 :            :                 sock_valbool_flag(sk, SOCK_NOFCS, valbool);
     892                 :            :                 break;
     893                 :            : 
     894                 :            :         case SO_SELECT_ERR_QUEUE:
     895                 :            :                 sock_valbool_flag(sk, SOCK_SELECT_ERR_QUEUE, valbool);
     896                 :            :                 break;
     897                 :            : 
     898                 :            : #ifdef CONFIG_NET_RX_BUSY_POLL
     899                 :            :         case SO_BUSY_POLL:
     900                 :            :                 /* allow unprivileged users to decrease the value */
     901 [ #  # ][ #  # ]:          0 :                 if ((val > sk->sk_ll_usec) && !capable(CAP_NET_ADMIN))
     902                 :            :                         ret = -EPERM;
     903                 :            :                 else {
     904         [ #  # ]:          0 :                         if (val < 0)
     905                 :            :                                 ret = -EINVAL;
     906                 :            :                         else
     907                 :          0 :                                 sk->sk_ll_usec = val;
     908                 :            :                 }
     909                 :            :                 break;
     910                 :            : #endif
     911                 :            : 
     912                 :            :         case SO_MAX_PACING_RATE:
     913                 :          0 :                 sk->sk_max_pacing_rate = val;
     914                 :          0 :                 sk->sk_pacing_rate = min(sk->sk_pacing_rate,
     915                 :            :                                          sk->sk_max_pacing_rate);
     916                 :          0 :                 break;
     917                 :            : 
     918                 :            :         default:
     919                 :            :                 ret = -ENOPROTOOPT;
     920                 :            :                 break;
     921                 :            :         }
     922                 :         69 :         release_sock(sk);
     923                 :         69 :         return ret;
     924                 :            : }
     925                 :            : EXPORT_SYMBOL(sock_setsockopt);
     926                 :            : 
     927                 :            : 
     928                 :          0 : void cred_to_ucred(struct pid *pid, const struct cred *cred,
     929                 :            :                    struct ucred *ucred)
     930                 :            : {
     931                 :        102 :         ucred->pid = pid_vnr(pid);
     932                 :        102 :         ucred->uid = ucred->gid = -1;
     933            [ + ]:        102 :         if (cred) {
     934                 :            :                 struct user_namespace *current_ns = current_user_ns();
     935                 :            : 
     936                 :        204 :                 ucred->uid = from_kuid_munged(current_ns, cred->euid);
     937                 :        102 :                 ucred->gid = from_kgid_munged(current_ns, cred->egid);
     938                 :            :         }
     939                 :          0 : }
     940                 :            : EXPORT_SYMBOL_GPL(cred_to_ucred);
     941                 :            : 
     942                 :          0 : int sock_getsockopt(struct socket *sock, int level, int optname,
     943                 :            :                     char __user *optval, int __user *optlen)
     944                 :            : {
     945                 :        105 :         struct sock *sk = sock->sk;
     946                 :            : 
     947                 :            :         union {
     948                 :            :                 int val;
     949                 :            :                 struct linger ling;
     950                 :            :                 struct timeval tm;
     951                 :            :         } v;
     952                 :            : 
     953                 :        105 :         int lv = sizeof(int);
     954                 :            :         int len;
     955                 :            : 
     956         [ +  + ]:        105 :         if (get_user(len, optlen))
     957                 :            :                 return -EFAULT;
     958         [ +  - ]:        104 :         if (len < 0)
     959                 :            :                 return -EINVAL;
     960                 :            : 
     961                 :        104 :         memset(&v, 0, sizeof(v));
     962                 :            : 
     963   [ -  -  -  -  :        104 :         switch (optname) {
          -  -  -  -  -  
          -  -  +  +  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  +  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
                -  -  - ]
     964                 :            :         case SO_DEBUG:
     965                 :          0 :                 v.val = sock_flag(sk, SOCK_DBG);
     966                 :          0 :                 break;
     967                 :            : 
     968                 :            :         case SO_DONTROUTE:
     969                 :          0 :                 v.val = sock_flag(sk, SOCK_LOCALROUTE);
     970                 :          0 :                 break;
     971                 :            : 
     972                 :            :         case SO_BROADCAST:
     973                 :          0 :                 v.val = sock_flag(sk, SOCK_BROADCAST);
     974                 :          0 :                 break;
     975                 :            : 
     976                 :            :         case SO_SNDBUF:
     977                 :          0 :                 v.val = sk->sk_sndbuf;
     978                 :          0 :                 break;
     979                 :            : 
     980                 :            :         case SO_RCVBUF:
     981                 :          0 :                 v.val = sk->sk_rcvbuf;
     982                 :          0 :                 break;
     983                 :            : 
     984                 :            :         case SO_REUSEADDR:
     985                 :          0 :                 v.val = sk->sk_reuse;
     986                 :          0 :                 break;
     987                 :            : 
     988                 :            :         case SO_REUSEPORT:
     989                 :          0 :                 v.val = sk->sk_reuseport;
     990                 :          0 :                 break;
     991                 :            : 
     992                 :            :         case SO_KEEPALIVE:
     993                 :          0 :                 v.val = sock_flag(sk, SOCK_KEEPOPEN);
     994                 :          0 :                 break;
     995                 :            : 
     996                 :            :         case SO_TYPE:
     997                 :          0 :                 v.val = sk->sk_type;
     998                 :          0 :                 break;
     999                 :            : 
    1000                 :            :         case SO_PROTOCOL:
    1001                 :          0 :                 v.val = sk->sk_protocol;
    1002                 :          0 :                 break;
    1003                 :            : 
    1004                 :            :         case SO_DOMAIN:
    1005                 :          0 :                 v.val = sk->sk_family;
    1006                 :          0 :                 break;
    1007                 :            : 
    1008                 :            :         case SO_ERROR:
    1009                 :          1 :                 v.val = -sock_error(sk);
    1010         [ +  - ]:          1 :                 if (v.val == 0)
    1011                 :          1 :                         v.val = xchg(&sk->sk_err_soft, 0);
    1012                 :            :                 break;
    1013                 :            : 
    1014                 :            :         case SO_OOBINLINE:
    1015                 :          1 :                 v.val = sock_flag(sk, SOCK_URGINLINE);
    1016                 :          1 :                 break;
    1017                 :            : 
    1018                 :            :         case SO_NO_CHECK:
    1019                 :          0 :                 v.val = sk->sk_no_check;
    1020                 :          0 :                 break;
    1021                 :            : 
    1022                 :            :         case SO_PRIORITY:
    1023                 :          0 :                 v.val = sk->sk_priority;
    1024                 :          0 :                 break;
    1025                 :            : 
    1026                 :            :         case SO_LINGER:
    1027                 :          0 :                 lv              = sizeof(v.ling);
    1028                 :          0 :                 v.ling.l_onoff  = sock_flag(sk, SOCK_LINGER);
    1029                 :          0 :                 v.ling.l_linger = sk->sk_lingertime / HZ;
    1030                 :          0 :                 break;
    1031                 :            : 
    1032                 :            :         case SO_BSDCOMPAT:
    1033                 :          0 :                 sock_warn_obsolete_bsdism("getsockopt");
    1034                 :          0 :                 break;
    1035                 :            : 
    1036                 :            :         case SO_TIMESTAMP:
    1037 [ #  # ][ #  # ]:          0 :                 v.val = sock_flag(sk, SOCK_RCVTSTAMP) &&
    1038                 :            :                                 !sock_flag(sk, SOCK_RCVTSTAMPNS);
    1039                 :          0 :                 break;
    1040                 :            : 
    1041                 :            :         case SO_TIMESTAMPNS:
    1042                 :          0 :                 v.val = sock_flag(sk, SOCK_RCVTSTAMPNS);
    1043                 :          0 :                 break;
    1044                 :            : 
    1045                 :            :         case SO_TIMESTAMPING:
    1046                 :          0 :                 v.val = 0;
    1047         [ #  # ]:          0 :                 if (sock_flag(sk, SOCK_TIMESTAMPING_TX_HARDWARE))
    1048                 :          0 :                         v.val |= SOF_TIMESTAMPING_TX_HARDWARE;
    1049         [ #  # ]:          0 :                 if (sock_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE))
    1050                 :          0 :                         v.val |= SOF_TIMESTAMPING_TX_SOFTWARE;
    1051         [ #  # ]:          0 :                 if (sock_flag(sk, SOCK_TIMESTAMPING_RX_HARDWARE))
    1052                 :          0 :                         v.val |= SOF_TIMESTAMPING_RX_HARDWARE;
    1053         [ #  # ]:          0 :                 if (sock_flag(sk, SOCK_TIMESTAMPING_RX_SOFTWARE))
    1054                 :          0 :                         v.val |= SOF_TIMESTAMPING_RX_SOFTWARE;
    1055         [ #  # ]:          0 :                 if (sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE))
    1056                 :          0 :                         v.val |= SOF_TIMESTAMPING_SOFTWARE;
    1057         [ #  # ]:          0 :                 if (sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE))
    1058                 :          0 :                         v.val |= SOF_TIMESTAMPING_SYS_HARDWARE;
    1059            [ - ]:          0 :                 if (sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE))
    1060                 :          0 :                         v.val |= SOF_TIMESTAMPING_RAW_HARDWARE;
    1061                 :            :                 break;
    1062                 :            : 
    1063                 :            :         case SO_RCVTIMEO:
    1064                 :          0 :                 lv = sizeof(struct timeval);
    1065         [ #  # ]:          0 :                 if (sk->sk_rcvtimeo == MAX_SCHEDULE_TIMEOUT) {
    1066                 :          0 :                         v.tm.tv_sec = 0;
    1067                 :          0 :                         v.tm.tv_usec = 0;
    1068                 :            :                 } else {
    1069                 :          0 :                         v.tm.tv_sec = sk->sk_rcvtimeo / HZ;
    1070                 :          0 :                         v.tm.tv_usec = ((sk->sk_rcvtimeo % HZ) * 1000000) / HZ;
    1071                 :            :                 }
    1072                 :            :                 break;
    1073                 :            : 
    1074                 :            :         case SO_SNDTIMEO:
    1075                 :          0 :                 lv = sizeof(struct timeval);
    1076         [ #  # ]:          0 :                 if (sk->sk_sndtimeo == MAX_SCHEDULE_TIMEOUT) {
    1077                 :          0 :                         v.tm.tv_sec = 0;
    1078                 :          0 :                         v.tm.tv_usec = 0;
    1079                 :            :                 } else {
    1080                 :          0 :                         v.tm.tv_sec = sk->sk_sndtimeo / HZ;
    1081                 :          0 :                         v.tm.tv_usec = ((sk->sk_sndtimeo % HZ) * 1000000) / HZ;
    1082                 :            :                 }
    1083                 :            :                 break;
    1084                 :            : 
    1085                 :            :         case SO_RCVLOWAT:
    1086                 :          0 :                 v.val = sk->sk_rcvlowat;
    1087                 :          0 :                 break;
    1088                 :            : 
    1089                 :            :         case SO_SNDLOWAT:
    1090                 :          0 :                 v.val = 1;
    1091                 :          0 :                 break;
    1092                 :            : 
    1093                 :            :         case SO_PASSCRED:
    1094                 :          0 :                 v.val = !!test_bit(SOCK_PASSCRED, &sock->flags);
    1095                 :          0 :                 break;
    1096                 :            : 
    1097                 :            :         case SO_PEERCRED:
    1098                 :            :         {
    1099                 :            :                 struct ucred peercred;
    1100         [ -  + ]:        102 :                 if (len > sizeof(peercred))
    1101                 :            :                         len = sizeof(peercred);
    1102                 :        102 :                 cred_to_ucred(sk->sk_peer_pid, sk->sk_peer_cred, &peercred);
    1103         [ -  + ]:        102 :                 if (copy_to_user(optval, &peercred, len))
    1104                 :          0 :                         return -EFAULT;
    1105                 :        102 :                 goto lenout;
    1106                 :            :         }
    1107                 :            : 
    1108                 :            :         case SO_PEERNAME:
    1109                 :            :         {
    1110                 :            :                 char address[128];
    1111                 :            : 
    1112         [ #  # ]:          0 :                 if (sock->ops->getname(sock, (struct sockaddr *)address, &lv, 2))
    1113                 :          0 :                         return -ENOTCONN;
    1114         [ #  # ]:          0 :                 if (lv < len)
    1115                 :            :                         return -EINVAL;
    1116         [ #  # ]:          0 :                 if (copy_to_user(optval, address, len))
    1117                 :            :                         return -EFAULT;
    1118                 :          0 :                 goto lenout;
    1119                 :            :         }
    1120                 :            : 
    1121                 :            :         /* Dubious BSD thing... Probably nobody even uses it, but
    1122                 :            :          * the UNIX standard wants it for whatever reason... -DaveM
    1123                 :            :          */
    1124                 :            :         case SO_ACCEPTCONN:
    1125                 :          0 :                 v.val = sk->sk_state == TCP_LISTEN;
    1126                 :          0 :                 break;
    1127                 :            : 
    1128                 :            :         case SO_PASSSEC:
    1129                 :          0 :                 v.val = !!test_bit(SOCK_PASSSEC, &sock->flags);
    1130                 :          0 :                 break;
    1131                 :            : 
    1132                 :            :         case SO_PEERSEC:
    1133                 :          0 :                 return security_socket_getpeersec_stream(sock, optval, optlen, len);
    1134                 :            : 
    1135                 :            :         case SO_MARK:
    1136                 :          0 :                 v.val = sk->sk_mark;
    1137                 :          0 :                 break;
    1138                 :            : 
    1139                 :            :         case SO_RXQ_OVFL:
    1140                 :          0 :                 v.val = sock_flag(sk, SOCK_RXQ_OVFL);
    1141                 :          0 :                 break;
    1142                 :            : 
    1143                 :            :         case SO_WIFI_STATUS:
    1144                 :          0 :                 v.val = sock_flag(sk, SOCK_WIFI_STATUS);
    1145                 :          0 :                 break;
    1146                 :            : 
    1147                 :            :         case SO_PEEK_OFF:
    1148         [ #  # ]:          0 :                 if (!sock->ops->set_peek_off)
    1149                 :            :                         return -EOPNOTSUPP;
    1150                 :            : 
    1151                 :          0 :                 v.val = sk->sk_peek_off;
    1152                 :          0 :                 break;
    1153                 :            :         case SO_NOFCS:
    1154                 :          0 :                 v.val = sock_flag(sk, SOCK_NOFCS);
    1155                 :          0 :                 break;
    1156                 :            : 
    1157                 :            :         case SO_BINDTODEVICE:
    1158                 :          0 :                 return sock_getbindtodevice(sk, optval, optlen, len);
    1159                 :            : 
    1160                 :            :         case SO_GET_FILTER:
    1161                 :          0 :                 len = sk_get_filter(sk, (struct sock_filter __user *)optval, len);
    1162         [ #  # ]:          0 :                 if (len < 0)
    1163                 :            :                         return len;
    1164                 :            : 
    1165                 :            :                 goto lenout;
    1166                 :            : 
    1167                 :            :         case SO_LOCK_FILTER:
    1168                 :          0 :                 v.val = sock_flag(sk, SOCK_FILTER_LOCKED);
    1169                 :          0 :                 break;
    1170                 :            : 
    1171                 :            :         case SO_SELECT_ERR_QUEUE:
    1172                 :          0 :                 v.val = sock_flag(sk, SOCK_SELECT_ERR_QUEUE);
    1173                 :          0 :                 break;
    1174                 :            : 
    1175                 :            : #ifdef CONFIG_NET_RX_BUSY_POLL
    1176                 :            :         case SO_BUSY_POLL:
    1177                 :          0 :                 v.val = sk->sk_ll_usec;
    1178                 :          0 :                 break;
    1179                 :            : #endif
    1180                 :            : 
    1181                 :            :         case SO_MAX_PACING_RATE:
    1182                 :          0 :                 v.val = sk->sk_max_pacing_rate;
    1183                 :          0 :                 break;
    1184                 :            : 
    1185                 :            :         default:
    1186                 :            :                 return -ENOPROTOOPT;
    1187                 :            :         }
    1188                 :            : 
    1189            [ - ]:          0 :         if (len > lv)
    1190                 :            :                 len = lv;
    1191         [ +  + ]:          2 :         if (copy_to_user(optval, &v, len))
    1192                 :            :                 return -EFAULT;
    1193                 :            : lenout:
    1194         [ +  - ]:        103 :         if (put_user(len, optlen))
    1195                 :            :                 return -EFAULT;
    1196                 :        103 :         return 0;
    1197                 :            : }
    1198                 :            : 
    1199                 :            : /*
    1200                 :            :  * Initialize an sk_lock.
    1201                 :            :  *
    1202                 :            :  * (We also register the sk_lock with the lock validator.)
    1203                 :            :  */
    1204                 :            : static inline void sock_lock_init(struct sock *sk)
    1205                 :            : {
    1206                 :     485502 :         sock_lock_init_class_and_name(sk,
    1207                 :            :                         af_family_slock_key_strings[sk->sk_family],
    1208                 :            :                         af_family_slock_keys + sk->sk_family,
    1209                 :            :                         af_family_key_strings[sk->sk_family],
    1210                 :            :                         af_family_keys + sk->sk_family);
    1211                 :            : }
    1212                 :            : 
    1213                 :            : /*
    1214                 :            :  * Copy all fields from osk to nsk but nsk->sk_refcnt must not change yet,
    1215                 :            :  * even temporarly, because of RCU lookups. sk_node should also be left as is.
    1216                 :            :  * We must not copy fields between sk_dontcopy_begin and sk_dontcopy_end
    1217                 :            :  */
    1218                 :          0 : static void sock_copy(struct sock *nsk, const struct sock *osk)
    1219                 :            : {
    1220                 :            : #ifdef CONFIG_SECURITY_NETWORK
    1221                 :         28 :         void *sptr = nsk->sk_security;
    1222                 :            : #endif
    1223                 :         28 :         memcpy(nsk, osk, offsetof(struct sock, sk_dontcopy_begin));
    1224                 :            : 
    1225                 :         56 :         memcpy(&nsk->sk_dontcopy_end, &osk->sk_dontcopy_end,
    1226                 :         28 :                osk->sk_prot->obj_size - offsetof(struct sock, sk_dontcopy_end));
    1227                 :            : 
    1228                 :            : #ifdef CONFIG_SECURITY_NETWORK
    1229                 :         28 :         nsk->sk_security = sptr;
    1230                 :         28 :         security_sk_clone(osk, nsk);
    1231                 :            : #endif
    1232                 :         28 : }
    1233                 :            : 
    1234                 :          0 : void sk_prot_clear_portaddr_nulls(struct sock *sk, int size)
    1235                 :            : {
    1236                 :            :         unsigned long nulls1, nulls2;
    1237                 :            : 
    1238                 :            :         nulls1 = offsetof(struct sock, __sk_common.skc_node.next);
    1239                 :            :         nulls2 = offsetof(struct sock, __sk_common.skc_portaddr_node.next);
    1240                 :            :         if (nulls1 > nulls2)
    1241                 :            :                 swap(nulls1, nulls2);
    1242                 :            : 
    1243                 :            :         if (nulls1 != 0)
    1244                 :         77 :                 memset((char *)sk, 0, nulls1);
    1245                 :         77 :         memset((char *)sk + nulls1 + sizeof(void *), 0,
    1246                 :            :                nulls2 - nulls1 - sizeof(void *));
    1247         [ +  - ]:         77 :         memset((char *)sk + nulls2 + sizeof(void *), 0,
    1248                 :            :                size - nulls2 - sizeof(void *));
    1249                 :          0 : }
    1250                 :            : EXPORT_SYMBOL(sk_prot_clear_portaddr_nulls);
    1251                 :            : 
    1252                 :          0 : static struct sock *sk_prot_alloc(struct proto *prot, gfp_t priority,
    1253                 :            :                 int family)
    1254                 :            : {
    1255                 :            :         struct sock *sk;
    1256                 :            :         struct kmem_cache *slab;
    1257                 :            : 
    1258                 :     455318 :         slab = prot->slab;
    1259         [ +  + ]:     455318 :         if (slab != NULL) {
    1260                 :     452180 :                 sk = kmem_cache_alloc(slab, priority & ~__GFP_ZERO);
    1261            [ + ]:     483624 :                 if (!sk)
    1262                 :            :                         return sk;
    1263            [ + ]:     483885 :                 if (priority & __GFP_ZERO) {
    1264         [ +  + ]:     496777 :                         if (prot->clear_sk)
    1265                 :         78 :                                 prot->clear_sk(sk, prot->obj_size);
    1266                 :            :                         else
    1267                 :     496699 :                                 sk_prot_clear_nulls(sk, prot->obj_size);
    1268                 :            :                 }
    1269                 :            :         } else
    1270                 :       3138 :                 sk = kmalloc(prot->obj_size, priority);
    1271                 :            : 
    1272         [ +  + ]:     486782 :         if (sk != NULL) {
    1273                 :            :                 kmemcheck_annotate_bitfield(sk, flags);
    1274                 :            : 
    1275         [ +  + ]:     486540 :                 if (security_sk_alloc(sk, family, priority))
    1276                 :            :                         goto out_free;
    1277                 :            : 
    1278         [ +  - ]:     492276 :                 if (!try_module_get(prot->owner))
    1279                 :            :                         goto out_free_sec;
    1280                 :            :                 sk_tx_queue_clear(sk);
    1281                 :            :         }
    1282                 :            : 
    1283                 :     498137 :         return sk;
    1284                 :            : 
    1285                 :            : out_free_sec:
    1286                 :          0 :         security_sk_free(sk);
    1287                 :            : out_free:
    1288         [ #  # ]:          0 :         if (slab != NULL)
    1289                 :          0 :                 kmem_cache_free(slab, sk);
    1290                 :            :         else
    1291                 :          0 :                 kfree(sk);
    1292                 :            :         return NULL;
    1293                 :            : }
    1294                 :            : 
    1295                 :     456159 : static void sk_prot_free(struct proto *prot, struct sock *sk)
    1296                 :            : {
    1297                 :            :         struct kmem_cache *slab;
    1298                 :            :         struct module *owner;
    1299                 :            : 
    1300                 :     456159 :         owner = prot->owner;
    1301                 :     456159 :         slab = prot->slab;
    1302                 :            : 
    1303                 :     456159 :         security_sk_free(sk);
    1304         [ +  + ]:     487147 :         if (slab != NULL)
    1305                 :     484009 :                 kmem_cache_free(slab, sk);
    1306                 :            :         else
    1307                 :       3138 :                 kfree(sk);
    1308                 :     496980 :         module_put(owner);
    1309                 :     489288 : }
    1310                 :            : 
    1311                 :            : #if IS_ENABLED(CONFIG_NET_CLS_CGROUP)
    1312                 :            : void sock_update_classid(struct sock *sk)
    1313                 :            : {
    1314                 :            :         u32 classid;
    1315                 :            : 
    1316                 :            :         classid = task_cls_classid(current);
    1317                 :            :         if (classid != sk->sk_classid)
    1318                 :            :                 sk->sk_classid = classid;
    1319                 :            : }
    1320                 :            : EXPORT_SYMBOL(sock_update_classid);
    1321                 :            : #endif
    1322                 :            : 
    1323                 :            : #if IS_ENABLED(CONFIG_NETPRIO_CGROUP)
    1324                 :            : void sock_update_netprioidx(struct sock *sk)
    1325                 :            : {
    1326                 :            :         if (in_interrupt())
    1327                 :            :                 return;
    1328                 :            : 
    1329                 :            :         sk->sk_cgrp_prioidx = task_netprioidx(current);
    1330                 :            : }
    1331                 :            : EXPORT_SYMBOL_GPL(sock_update_netprioidx);
    1332                 :            : #endif
    1333                 :            : 
    1334                 :            : /**
    1335                 :            :  *      sk_alloc - All socket objects are allocated here
    1336                 :            :  *      @net: the applicable net namespace
    1337                 :            :  *      @family: protocol family
    1338                 :            :  *      @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
    1339                 :            :  *      @prot: struct proto associated with this new sock instance
    1340                 :            :  */
    1341                 :          0 : struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
    1342                 :            :                       struct proto *prot)
    1343                 :            : {
    1344                 :            :         struct sock *sk;
    1345                 :            : 
    1346                 :     456151 :         sk = sk_prot_alloc(prot, priority | __GFP_ZERO, family);
    1347            [ + ]:     484707 :         if (sk) {
    1348                 :     485474 :                 sk->sk_family = family;
    1349                 :            :                 /*
    1350                 :            :                  * See comment in struct sock definition to understand
    1351                 :            :                  * why we need sk_prot_creator -acme
    1352                 :            :                  */
    1353                 :     485474 :                 sk->sk_prot = sk->sk_prot_creator = prot;
    1354                 :            :                 sock_lock_init(sk);
    1355                 :            :                 sock_net_set(sk, get_net(net));
    1356                 :     497837 :                 atomic_set(&sk->sk_wmem_alloc, 1);
    1357                 :            : 
    1358                 :            :                 sock_update_classid(sk);
    1359                 :            :                 sock_update_netprioidx(sk);
    1360                 :            :         }
    1361                 :            : 
    1362                 :      40919 :         return sk;
    1363                 :            : }
    1364                 :            : EXPORT_SYMBOL(sk_alloc);
    1365                 :            : 
    1366                 :          0 : static void __sk_free(struct sock *sk)
    1367                 :            : {
    1368                 :            :         struct sk_filter *filter;
    1369                 :            : 
    1370            [ + ]:     472482 :         if (sk->sk_destruct)
    1371                 :     480962 :                 sk->sk_destruct(sk);
    1372                 :            : 
    1373                 :     484491 :         filter = rcu_dereference_check(sk->sk_filter,
    1374                 :            :                                        atomic_read(&sk->sk_wmem_alloc) == 0);
    1375         [ -  + ]:     484491 :         if (filter) {
    1376                 :            :                 sk_filter_uncharge(sk, filter);
    1377                 :          0 :                 RCU_INIT_POINTER(sk->sk_filter, NULL);
    1378                 :            :         }
    1379                 :            : 
    1380                 :     484491 :         sock_disable_timestamp(sk, SK_FLAGS_TIMESTAMP);
    1381                 :            : 
    1382         [ -  + ]:     466063 :         if (atomic_read(&sk->sk_omem_alloc))
    1383                 :          0 :                 pr_debug("%s: optmem leakage (%d bytes) detected\n",
    1384                 :            :                          __func__, atomic_read(&sk->sk_omem_alloc));
    1385                 :            : 
    1386         [ +  + ]:     466063 :         if (sk->sk_peer_cred)
    1387                 :            :                 put_cred(sk->sk_peer_cred);
    1388                 :     466063 :         put_pid(sk->sk_peer_pid);
    1389                 :            :         put_net(sock_net(sk));
    1390                 :     449562 :         sk_prot_free(sk->sk_prot_creator, sk);
    1391                 :     489466 : }
    1392                 :            : 
    1393                 :          0 : void sk_free(struct sock *sk)
    1394                 :            : {
    1395                 :            :         /*
    1396                 :            :          * We subtract one from sk_wmem_alloc and can know if
    1397                 :            :          * some packets are still in some tx queue.
    1398                 :            :          * If not null, sock_wfree() will call __sk_free(sk) later
    1399                 :            :          */
    1400         [ +  + ]:     484559 :         if (atomic_dec_and_test(&sk->sk_wmem_alloc))
    1401                 :     482516 :                 __sk_free(sk);
    1402                 :       6766 : }
    1403                 :            : EXPORT_SYMBOL(sk_free);
    1404                 :            : 
    1405                 :            : /*
    1406                 :            :  * Last sock_put should drop reference to sk->sk_net. It has already
    1407                 :            :  * been dropped in sk_change_net. Taking reference to stopping namespace
    1408                 :            :  * is not an option.
    1409                 :            :  * Take reference to a socket to remove it from hash _alive_ and after that
    1410                 :            :  * destroy it in the context of init_net.
    1411                 :            :  */
    1412                 :          0 : void sk_release_kernel(struct sock *sk)
    1413                 :            : {
    1414 [ #  # ][ #  # ]:          0 :         if (sk == NULL || sk->sk_socket == NULL)
    1415                 :          0 :                 return;
    1416                 :            : 
    1417                 :            :         sock_hold(sk);
    1418                 :          0 :         sock_release(sk->sk_socket);
    1419                 :            :         release_net(sock_net(sk));
    1420                 :            :         sock_net_set(sk, get_net(&init_net));
    1421                 :            :         sock_put(sk);
    1422                 :            : }
    1423                 :            : EXPORT_SYMBOL(sk_release_kernel);
    1424                 :            : 
    1425                 :            : static void sk_update_clone(const struct sock *sk, struct sock *newsk)
    1426                 :            : {
    1427                 :            :         if (mem_cgroup_sockets_enabled && sk->sk_cgrp)
    1428                 :            :                 sock_update_memcg(newsk);
    1429                 :            : }
    1430                 :            : 
    1431                 :            : /**
    1432                 :            :  *      sk_clone_lock - clone a socket, and lock its clone
    1433                 :            :  *      @sk: the socket to clone
    1434                 :            :  *      @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
    1435                 :            :  *
    1436                 :            :  *      Caller must unlock socket even in error path (bh_unlock_sock(newsk))
    1437                 :            :  */
    1438                 :          0 : struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
    1439                 :            : {
    1440                 :            :         struct sock *newsk;
    1441                 :            : 
    1442                 :         28 :         newsk = sk_prot_alloc(sk->sk_prot, priority, sk->sk_family);
    1443         [ +  - ]:         28 :         if (newsk != NULL) {
    1444                 :            :                 struct sk_filter *filter;
    1445                 :            : 
    1446                 :         28 :                 sock_copy(newsk, sk);
    1447                 :            : 
    1448                 :            :                 /* SANITY */
    1449                 :            :                 get_net(sock_net(newsk));
    1450                 :            :                 sk_node_init(&newsk->sk_node);
    1451                 :            :                 sock_lock_init(newsk);
    1452                 :            :                 bh_lock_sock(newsk);
    1453                 :         28 :                 newsk->sk_backlog.head       = newsk->sk_backlog.tail = NULL;
    1454                 :         28 :                 newsk->sk_backlog.len = 0;
    1455                 :            : 
    1456                 :         28 :                 atomic_set(&newsk->sk_rmem_alloc, 0);
    1457                 :            :                 /*
    1458                 :            :                  * sk_wmem_alloc set to one (see sk_free() and sock_wfree())
    1459                 :            :                  */
    1460                 :         28 :                 atomic_set(&newsk->sk_wmem_alloc, 1);
    1461                 :         28 :                 atomic_set(&newsk->sk_omem_alloc, 0);
    1462                 :         28 :                 skb_queue_head_init(&newsk->sk_receive_queue);
    1463                 :         28 :                 skb_queue_head_init(&newsk->sk_write_queue);
    1464                 :            : #ifdef CONFIG_NET_DMA
    1465                 :            :                 skb_queue_head_init(&newsk->sk_async_wait_queue);
    1466                 :            : #endif
    1467                 :            : 
    1468                 :         28 :                 spin_lock_init(&newsk->sk_dst_lock);
    1469                 :         28 :                 rwlock_init(&newsk->sk_callback_lock);
    1470                 :            :                 lockdep_set_class_and_name(&newsk->sk_callback_lock,
    1471                 :            :                                 af_callback_keys + newsk->sk_family,
    1472                 :            :                                 af_family_clock_key_strings[newsk->sk_family]);
    1473                 :            : 
    1474                 :         28 :                 newsk->sk_dst_cache  = NULL;
    1475                 :         28 :                 newsk->sk_wmem_queued        = 0;
    1476                 :         28 :                 newsk->sk_forward_alloc = 0;
    1477                 :         28 :                 newsk->sk_send_head  = NULL;
    1478                 :         28 :                 newsk->sk_userlocks  = sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
    1479                 :            : 
    1480                 :            :                 sock_reset_flag(newsk, SOCK_DONE);
    1481                 :         28 :                 skb_queue_head_init(&newsk->sk_error_queue);
    1482                 :            : 
    1483                 :         28 :                 filter = rcu_dereference_protected(newsk->sk_filter, 1);
    1484         [ -  + ]:         28 :                 if (filter != NULL)
    1485                 :            :                         sk_filter_charge(newsk, filter);
    1486                 :            : 
    1487         [ -  + ]:         28 :                 if (unlikely(xfrm_sk_clone_policy(newsk))) {
    1488                 :            :                         /* It is still raw copy of parent, so invalidate
    1489                 :            :                          * destructor and make plain sk_free() */
    1490                 :          0 :                         newsk->sk_destruct = NULL;
    1491                 :            :                         bh_unlock_sock(newsk);
    1492                 :          0 :                         sk_free(newsk);
    1493                 :            :                         newsk = NULL;
    1494                 :          0 :                         goto out;
    1495                 :            :                 }
    1496                 :            : 
    1497                 :         28 :                 newsk->sk_err           = 0;
    1498                 :         28 :                 newsk->sk_priority = 0;
    1499                 :            :                 /*
    1500                 :            :                  * Before updating sk_refcnt, we must commit prior changes to memory
    1501                 :            :                  * (Documentation/RCU/rculist_nulls.txt for details)
    1502                 :            :                  */
    1503                 :         28 :                 smp_wmb();
    1504                 :         28 :                 atomic_set(&newsk->sk_refcnt, 2);
    1505                 :            : 
    1506                 :            :                 /*
    1507                 :            :                  * Increment the counter in the same struct proto as the master
    1508                 :            :                  * sock (sk_refcnt_debug_inc uses newsk->sk_prot->socks, that
    1509                 :            :                  * is the same as sk->sk_prot->socks, as this field was copied
    1510                 :            :                  * with memcpy).
    1511                 :            :                  *
    1512                 :            :                  * This _changes_ the previous behaviour, where
    1513                 :            :                  * tcp_create_openreq_child always was incrementing the
    1514                 :            :                  * equivalent to tcp_prot->socks (inet_sock_nr), so this have
    1515                 :            :                  * to be taken into account in all callers. -acme
    1516                 :            :                  */
    1517                 :            :                 sk_refcnt_debug_inc(newsk);
    1518                 :            :                 sk_set_socket(newsk, NULL);
    1519                 :         28 :                 newsk->sk_wq = NULL;
    1520                 :            : 
    1521                 :            :                 sk_update_clone(sk, newsk);
    1522                 :            : 
    1523         [ +  - ]:         28 :                 if (newsk->sk_prot->sockets_allocated)
    1524                 :            :                         sk_sockets_allocated_inc(newsk);
    1525                 :            : 
    1526         [ -  + ]:         28 :                 if (newsk->sk_flags & SK_FLAGS_TIMESTAMP)
    1527                 :          0 :                         net_enable_timestamp();
    1528                 :            :         }
    1529                 :            : out:
    1530                 :         28 :         return newsk;
    1531                 :            : }
    1532                 :            : EXPORT_SYMBOL_GPL(sk_clone_lock);
    1533                 :            : 
    1534                 :          0 : void sk_setup_caps(struct sock *sk, struct dst_entry *dst)
    1535                 :            : {
    1536                 :            :         __sk_dst_set(sk, dst);
    1537                 :         63 :         sk->sk_route_caps = dst->dev->features;
    1538         [ +  + ]:         63 :         if (sk->sk_route_caps & NETIF_F_GSO)
    1539                 :         56 :                 sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE;
    1540                 :         63 :         sk->sk_route_caps &= ~sk->sk_route_nocaps;
    1541            [ + ]:         63 :         if (sk_can_gso(sk)) {
    1542         [ -  + ]:        119 :                 if (dst->header_len) {
    1543                 :          0 :                         sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
    1544                 :            :                 } else {
    1545                 :         56 :                         sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM;
    1546                 :         56 :                         sk->sk_gso_max_size = dst->dev->gso_max_size;
    1547                 :         56 :                         sk->sk_gso_max_segs = dst->dev->gso_max_segs;
    1548                 :            :                 }
    1549                 :            :         }
    1550                 :          0 : }
    1551                 :            : EXPORT_SYMBOL_GPL(sk_setup_caps);
    1552                 :            : 
    1553                 :            : /*
    1554                 :            :  *      Simple resource managers for sockets.
    1555                 :            :  */
    1556                 :            : 
    1557                 :            : 
    1558                 :            : /*
    1559                 :            :  * Write buffer destructor automatically called from kfree_skb.
    1560                 :            :  */
    1561                 :          0 : void sock_wfree(struct sk_buff *skb)
    1562                 :            : {
    1563                 :    1269497 :         struct sock *sk = skb->sk;
    1564                 :    1269497 :         unsigned int len = skb->truesize;
    1565                 :            : 
    1566         [ +  + ]:    1269497 :         if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE)) {
    1567                 :            :                 /*
    1568                 :            :                  * Keep a reference on sk_wmem_alloc, this will be released
    1569                 :            :                  * after sk_write_space() call
    1570                 :            :                  */
    1571                 :    1243226 :                 atomic_sub(len - 1, &sk->sk_wmem_alloc);
    1572                 :    1217505 :                 sk->sk_write_space(sk);
    1573                 :            :                 len = 1;
    1574                 :            :         }
    1575                 :            :         /*
    1576                 :            :          * if sk_wmem_alloc reaches 0, we must finish what sk_free()
    1577                 :            :          * could not do because of in-flight packets
    1578                 :            :          */
    1579         [ +  + ]:    1267325 :         if (atomic_sub_and_test(len, &sk->sk_wmem_alloc))
    1580                 :       6250 :                 __sk_free(sk);
    1581                 :    1267326 : }
    1582                 :            : EXPORT_SYMBOL(sock_wfree);
    1583                 :            : 
    1584                 :          0 : void skb_orphan_partial(struct sk_buff *skb)
    1585                 :            : {
    1586                 :            :         /* TCP stack sets skb->ooo_okay based on sk_wmem_alloc,
    1587                 :            :          * so we do not completely orphan skb, but transfert all
    1588                 :            :          * accounted bytes but one, to avoid unexpected reorders.
    1589                 :            :          */
    1590         [ #  # ]:          0 :         if (skb->destructor == sock_wfree
    1591                 :            : #ifdef CONFIG_INET
    1592         [ #  # ]:          0 :             || skb->destructor == tcp_wfree
    1593                 :            : #endif
    1594                 :            :                 ) {
    1595                 :          0 :                 atomic_sub(skb->truesize - 1, &skb->sk->sk_wmem_alloc);
    1596                 :          0 :                 skb->truesize = 1;
    1597                 :            :         } else {
    1598                 :            :                 skb_orphan(skb);
    1599                 :            :         }
    1600                 :          0 : }
    1601                 :            : EXPORT_SYMBOL(skb_orphan_partial);
    1602                 :            : 
    1603                 :            : /*
    1604                 :            :  * Read buffer destructor automatically called from kfree_skb.
    1605                 :            :  */
    1606                 :          0 : void sock_rfree(struct sk_buff *skb)
    1607                 :            : {
    1608                 :      15901 :         struct sock *sk = skb->sk;
    1609                 :      15901 :         unsigned int len = skb->truesize;
    1610                 :            : 
    1611                 :      15901 :         atomic_sub(len, &sk->sk_rmem_alloc);
    1612                 :            :         sk_mem_uncharge(sk, len);
    1613                 :          0 : }
    1614                 :            : EXPORT_SYMBOL(sock_rfree);
    1615                 :            : 
    1616                 :          0 : void sock_edemux(struct sk_buff *skb)
    1617                 :            : {
    1618                 :          0 :         struct sock *sk = skb->sk;
    1619                 :            : 
    1620                 :            : #ifdef CONFIG_INET
    1621         [ #  # ]:          0 :         if (sk->sk_state == TCP_TIME_WAIT)
    1622                 :          0 :                 inet_twsk_put(inet_twsk(sk));
    1623                 :            :         else
    1624                 :            : #endif
    1625                 :            :                 sock_put(sk);
    1626                 :          0 : }
    1627                 :            : EXPORT_SYMBOL(sock_edemux);
    1628                 :            : 
    1629                 :          0 : kuid_t sock_i_uid(struct sock *sk)
    1630                 :            : {
    1631                 :            :         kuid_t uid;
    1632                 :            : 
    1633                 :        132 :         read_lock_bh(&sk->sk_callback_lock);
    1634         [ +  - ]:        132 :         uid = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_uid : GLOBAL_ROOT_UID;
    1635                 :        132 :         read_unlock_bh(&sk->sk_callback_lock);
    1636                 :        132 :         return uid;
    1637                 :            : }
    1638                 :            : EXPORT_SYMBOL(sock_i_uid);
    1639                 :            : 
    1640                 :          0 : unsigned long sock_i_ino(struct sock *sk)
    1641                 :            : {
    1642                 :            :         unsigned long ino;
    1643                 :            : 
    1644                 :         37 :         read_lock_bh(&sk->sk_callback_lock);
    1645         [ +  - ]:         37 :         ino = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_ino : 0;
    1646                 :         37 :         read_unlock_bh(&sk->sk_callback_lock);
    1647                 :         37 :         return ino;
    1648                 :            : }
    1649                 :            : EXPORT_SYMBOL(sock_i_ino);
    1650                 :            : 
    1651                 :            : /*
    1652                 :            :  * Allocate a skb from the socket's send buffer.
    1653                 :            :  */
    1654                 :          0 : struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force,
    1655                 :            :                              gfp_t priority)
    1656                 :            : {
    1657 [ +  + ][ +  - ]:       4990 :         if (force || atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf) {
    1658                 :            :                 struct sk_buff *skb = alloc_skb(size, priority);
    1659         [ +  - ]:       4990 :                 if (skb) {
    1660                 :            :                         skb_set_owner_w(skb, sk);
    1661                 :       4990 :                         return skb;
    1662                 :            :                 }
    1663                 :            :         }
    1664                 :            :         return NULL;
    1665                 :            : }
    1666                 :            : EXPORT_SYMBOL(sock_wmalloc);
    1667                 :            : 
    1668                 :            : /*
    1669                 :            :  * Allocate a skb from the socket's receive buffer.
    1670                 :            :  */
    1671                 :          0 : struct sk_buff *sock_rmalloc(struct sock *sk, unsigned long size, int force,
    1672                 :            :                              gfp_t priority)
    1673                 :            : {
    1674 [ #  # ][ #  # ]:          0 :         if (force || atomic_read(&sk->sk_rmem_alloc) < sk->sk_rcvbuf) {
    1675                 :            :                 struct sk_buff *skb = alloc_skb(size, priority);
    1676         [ #  # ]:          0 :                 if (skb) {
    1677                 :            :                         skb_set_owner_r(skb, sk);
    1678                 :          0 :                         return skb;
    1679                 :            :                 }
    1680                 :            :         }
    1681                 :            :         return NULL;
    1682                 :            : }
    1683                 :            : 
    1684                 :            : /*
    1685                 :            :  * Allocate a memory block from the socket's option memory buffer.
    1686                 :            :  */
    1687                 :          0 : void *sock_kmalloc(struct sock *sk, int size, gfp_t priority)
    1688                 :            : {
    1689 [ #  # ][ #  # ]:          0 :         if ((unsigned int)size <= sysctl_optmem_max &&
    1690                 :          0 :             atomic_read(&sk->sk_omem_alloc) + size < sysctl_optmem_max) {
    1691                 :            :                 void *mem;
    1692                 :            :                 /* First do the add, to avoid the race if kmalloc
    1693                 :            :                  * might sleep.
    1694                 :            :                  */
    1695                 :          0 :                 atomic_add(size, &sk->sk_omem_alloc);
    1696                 :            :                 mem = kmalloc(size, priority);
    1697         [ #  # ]:          0 :                 if (mem)
    1698                 :            :                         return mem;
    1699                 :            :                 atomic_sub(size, &sk->sk_omem_alloc);
    1700                 :            :         }
    1701                 :            :         return NULL;
    1702                 :            : }
    1703                 :            : EXPORT_SYMBOL(sock_kmalloc);
    1704                 :            : 
    1705                 :            : /*
    1706                 :            :  * Free an option memory block.
    1707                 :            :  */
    1708                 :          0 : void sock_kfree_s(struct sock *sk, void *mem, int size)
    1709                 :            : {
    1710                 :          0 :         kfree(mem);
    1711                 :          0 :         atomic_sub(size, &sk->sk_omem_alloc);
    1712                 :          0 : }
    1713                 :            : EXPORT_SYMBOL(sock_kfree_s);
    1714                 :            : 
    1715                 :            : /* It is almost wait_for_tcp_memory minus release_sock/lock_sock.
    1716                 :            :    I think, these locks should be removed for datagram sockets.
    1717                 :            :  */
    1718                 :          0 : static long sock_wait_for_wmem(struct sock *sk, long timeo)
    1719                 :            : {
    1720                 :       6710 :         DEFINE_WAIT(wait);
    1721                 :            : 
    1722                 :       3355 :         clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
    1723                 :            :         for (;;) {
    1724         [ +  - ]:       7334 :                 if (!timeo)
    1725                 :            :                         break;
    1726            [ + ]:       7334 :                 if (signal_pending(current))
    1727                 :            :                         break;
    1728                 :       7336 :                 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
    1729                 :       7327 :                 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
    1730         [ +  + ]:       7338 :                 if (atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf)
    1731                 :            :                         break;
    1732         [ +  - ]:       3981 :                 if (sk->sk_shutdown & SEND_SHUTDOWN)
    1733                 :            :                         break;
    1734         [ +  - ]:       3981 :                 if (sk->sk_err)
    1735                 :            :                         break;
    1736                 :       3981 :                 timeo = schedule_timeout(timeo);
    1737                 :       3978 :         }
    1738                 :       3355 :         finish_wait(sk_sleep(sk), &wait);
    1739                 :       3356 :         return timeo;
    1740                 :            : }
    1741                 :            : 
    1742                 :            : 
    1743                 :            : /*
    1744                 :            :  *      Generic send/receive buffer handlers
    1745                 :            :  */
    1746                 :            : 
    1747                 :          0 : struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
    1748                 :            :                                      unsigned long data_len, int noblock,
    1749                 :            :                                      int *errcode, int max_page_order)
    1750                 :            : {
    1751                 :            :         struct sk_buff *skb = NULL;
    1752                 :            :         unsigned long chunk;
    1753                 :            :         gfp_t gfp_mask;
    1754                 :            :         long timeo;
    1755                 :            :         int err;
    1756                 :    1204333 :         int npages = (data_len + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
    1757                 :            :         struct page *page;
    1758                 :            :         int i;
    1759                 :            : 
    1760                 :            :         err = -EMSGSIZE;
    1761            [ + ]:    1204333 :         if (npages > MAX_SKB_FRAGS)
    1762                 :            :                 goto failure;
    1763                 :            : 
    1764                 :            :         timeo = sock_sndtimeo(sk, noblock);
    1765         [ +  + ]:    2418555 :         while (!skb) {
    1766                 :            :                 err = sock_error(sk);
    1767         [ +  + ]:    1206230 :                 if (err != 0)
    1768                 :            :                         goto failure;
    1769                 :            : 
    1770                 :            :                 err = -EPIPE;
    1771            [ + ]:    1206046 :                 if (sk->sk_shutdown & SEND_SHUTDOWN)
    1772                 :            :                         goto failure;
    1773                 :            : 
    1774         [ +  + ]:    1238949 :                 if (atomic_read(&sk->sk_wmem_alloc) >= sk->sk_sndbuf) {
    1775                 :       3357 :                         set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
    1776                 :       3359 :                         set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
    1777                 :            :                         err = -EAGAIN;
    1778            [ + ]:       3352 :                         if (!timeo)
    1779                 :            :                                 goto failure;
    1780         [ +  - ]:       3355 :                         if (signal_pending(current))
    1781                 :            :                                 goto interrupted;
    1782                 :       3355 :                         timeo = sock_wait_for_wmem(sk, timeo);
    1783                 :          0 :                         continue;
    1784                 :            :                 }
    1785                 :            : 
    1786                 :            :                 err = -ENOBUFS;
    1787                 :    1235592 :                 gfp_mask = sk->sk_allocation;
    1788         [ +  + ]:    1235592 :                 if (gfp_mask & __GFP_WAIT)
    1789                 :    1216753 :                         gfp_mask |= __GFP_REPEAT;
    1790                 :            : 
    1791                 :            :                 skb = alloc_skb(header_len, gfp_mask);
    1792            [ + ]:    1226673 :                 if (!skb)
    1793                 :            :                         goto failure;
    1794                 :            : 
    1795                 :    1233481 :                 skb->truesize += data_len;
    1796                 :            : 
    1797         [ +  + ]:    1219792 :                 for (i = 0; npages > 0; i++) {
    1798                 :            :                         int order = max_page_order;
    1799                 :            : 
    1800         [ +  + ]:         14 :                         while (order) {
    1801         [ +  + ]:         12 :                                 if (npages >= 1 << order) {
    1802                 :          2 :                                         page = alloc_pages(sk->sk_allocation |
    1803                 :            :                                                            __GFP_COMP | __GFP_NOWARN,
    1804                 :            :                                                            order);
    1805         [ -  + ]:          2 :                                         if (page)
    1806                 :            :                                                 goto fill_page;
    1807                 :            :                                 }
    1808                 :         10 :                                 order--;
    1809                 :            :                         }
    1810                 :          2 :                         page = alloc_page(sk->sk_allocation);
    1811         [ +  - ]:          2 :                         if (!page)
    1812                 :            :                                 goto failure;
    1813                 :            : fill_page:
    1814                 :          4 :                         chunk = min_t(unsigned long, data_len,
    1815                 :            :                                       PAGE_SIZE << order);
    1816                 :            :                         skb_fill_page_desc(skb, i, page, 0, chunk);
    1817                 :          4 :                         data_len -= chunk;
    1818                 :          4 :                         npages -= 1 << order;
    1819                 :            :                 }
    1820                 :            :         }
    1821                 :            : 
    1822                 :            :         skb_set_owner_w(skb, sk);
    1823                 :    1230557 :         return skb;
    1824                 :            : 
    1825                 :            : interrupted:
    1826                 :            :         err = sock_intr_errno(timeo);
    1827                 :            : failure:
    1828                 :          0 :         kfree_skb(skb);
    1829                 :          4 :         *errcode = err;
    1830                 :          4 :         return NULL;
    1831                 :            : }
    1832                 :            : EXPORT_SYMBOL(sock_alloc_send_pskb);
    1833                 :            : 
    1834                 :          0 : struct sk_buff *sock_alloc_send_skb(struct sock *sk, unsigned long size,
    1835                 :            :                                     int noblock, int *errcode)
    1836                 :            : {
    1837                 :         29 :         return sock_alloc_send_pskb(sk, size, 0, noblock, errcode, 0);
    1838                 :            : }
    1839                 :            : EXPORT_SYMBOL(sock_alloc_send_skb);
    1840                 :            : 
    1841                 :            : /* On 32bit arches, an skb frag is limited to 2^15 */
    1842                 :            : #define SKB_FRAG_PAGE_ORDER     get_order(32768)
    1843                 :            : 
    1844                 :            : /**
    1845                 :            :  * skb_page_frag_refill - check that a page_frag contains enough room
    1846                 :            :  * @sz: minimum size of the fragment we want to get
    1847                 :            :  * @pfrag: pointer to page_frag
    1848                 :            :  * @prio: priority for memory allocation
    1849                 :            :  *
    1850                 :            :  * Note: While this allocator tries to use high order pages, there is
    1851                 :            :  * no guarantee that allocations succeed. Therefore, @sz MUST be
    1852                 :            :  * less or equal than PAGE_SIZE.
    1853                 :            :  */
    1854                 :          0 : bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t prio)
    1855                 :            : {
    1856                 :            :         int order;
    1857                 :            : 
    1858         [ #  # ]:          0 :         if (pfrag->page) {
    1859         [ #  # ]:          0 :                 if (atomic_read(&pfrag->page->_count) == 1) {
    1860                 :          0 :                         pfrag->offset = 0;
    1861                 :          0 :                         return true;
    1862                 :            :                 }
    1863         [ #  # ]:          0 :                 if (pfrag->offset + sz <= pfrag->size)
    1864                 :            :                         return true;
    1865                 :          0 :                 put_page(pfrag->page);
    1866                 :            :         }
    1867                 :            : 
    1868                 :            :         /* We restrict high order allocations to users that can afford to wait */
    1869         [ #  # ]:          0 :         order = (prio & __GFP_WAIT) ? SKB_FRAG_PAGE_ORDER : 0;
    1870                 :            : 
    1871                 :            :         do {
    1872                 :            :                 gfp_t gfp = prio;
    1873                 :            : 
    1874         [ #  # ]:          0 :                 if (order)
    1875                 :          0 :                         gfp |= __GFP_COMP | __GFP_NOWARN;
    1876                 :          0 :                 pfrag->page = alloc_pages(gfp, order);
    1877         [ #  # ]:          0 :                 if (likely(pfrag->page)) {
    1878                 :          0 :                         pfrag->offset = 0;
    1879                 :          0 :                         pfrag->size = PAGE_SIZE << order;
    1880                 :          0 :                         return true;
    1881                 :            :                 }
    1882         [ #  # ]:          0 :         } while (--order >= 0);
    1883                 :            : 
    1884                 :            :         return false;
    1885                 :            : }
    1886                 :            : EXPORT_SYMBOL(skb_page_frag_refill);
    1887                 :            : 
    1888                 :          0 : bool sk_page_frag_refill(struct sock *sk, struct page_frag *pfrag)
    1889                 :            : {
    1890         [ #  # ]:          0 :         if (likely(skb_page_frag_refill(32U, pfrag, sk->sk_allocation)))
    1891                 :            :                 return true;
    1892                 :            : 
    1893                 :            :         sk_enter_memory_pressure(sk);
    1894                 :            :         sk_stream_moderate_sndbuf(sk);
    1895                 :            :         return false;
    1896                 :            : }
    1897                 :            : EXPORT_SYMBOL(sk_page_frag_refill);
    1898                 :            : 
    1899                 :          0 : static void __lock_sock(struct sock *sk)
    1900                 :            :         __releases(&sk->sk_lock.slock)
    1901                 :            :         __acquires(&sk->sk_lock.slock)
    1902                 :            : {
    1903                 :          0 :         DEFINE_WAIT(wait);
    1904                 :            : 
    1905                 :            :         for (;;) {
    1906                 :          0 :                 prepare_to_wait_exclusive(&sk->sk_lock.wq, &wait,
    1907                 :            :                                         TASK_UNINTERRUPTIBLE);
    1908                 :            :                 spin_unlock_bh(&sk->sk_lock.slock);
    1909                 :          0 :                 schedule();
    1910                 :            :                 spin_lock_bh(&sk->sk_lock.slock);
    1911         [ #  # ]:          0 :                 if (!sock_owned_by_user(sk))
    1912                 :            :                         break;
    1913                 :            :         }
    1914                 :          0 :         finish_wait(&sk->sk_lock.wq, &wait);
    1915                 :          0 : }
    1916                 :            : 
    1917                 :          0 : static void __release_sock(struct sock *sk)
    1918                 :            :         __releases(&sk->sk_lock.slock)
    1919                 :            :         __acquires(&sk->sk_lock.slock)
    1920                 :            : {
    1921                 :       5529 :         struct sk_buff *skb = sk->sk_backlog.head;
    1922                 :            : 
    1923                 :            :         do {
    1924                 :       6655 :                 sk->sk_backlog.head = sk->sk_backlog.tail = NULL;
    1925                 :            :                 bh_unlock_sock(sk);
    1926                 :            : 
    1927                 :            :                 do {
    1928                 :       8269 :                         struct sk_buff *next = skb->next;
    1929                 :            : 
    1930                 :            :                         prefetch(next);
    1931 [ -  + ][ #  # ]:       8269 :                         WARN_ON_ONCE(skb_dst_is_noref(skb));
                 [ #  # ]
    1932                 :       8269 :                         skb->next = NULL;
    1933                 :            :                         sk_backlog_rcv(sk, skb);
    1934                 :            : 
    1935                 :            :                         /*
    1936                 :            :                          * We are in process context here with softirqs
    1937                 :            :                          * disabled, use cond_resched_softirq() to preempt.
    1938                 :            :                          * This is safe to do because we've taken the backlog
    1939                 :            :                          * queue private:
    1940                 :            :                          */
    1941                 :       8269 :                         cond_resched_softirq();
    1942                 :            : 
    1943                 :            :                         skb = next;
    1944         [ +  + ]:       8269 :                 } while (skb != NULL);
    1945                 :            : 
    1946                 :            :                 bh_lock_sock(sk);
    1947         [ +  + ]:       6656 :         } while ((skb = sk->sk_backlog.head) != NULL);
    1948                 :            : 
    1949                 :            :         /*
    1950                 :            :          * Doing the zeroing here guarantee we can not loop forever
    1951                 :            :          * while a wild producer attempts to flood us.
    1952                 :            :          */
    1953                 :       5530 :         sk->sk_backlog.len = 0;
    1954                 :       5530 : }
    1955                 :            : 
    1956                 :            : /**
    1957                 :            :  * sk_wait_data - wait for data to arrive at sk_receive_queue
    1958                 :            :  * @sk:    sock to wait on
    1959                 :            :  * @timeo: for how long
    1960                 :            :  *
    1961                 :            :  * Now socket state including sk->sk_err is changed only under lock,
    1962                 :            :  * hence we may omit checks after joining wait queue.
    1963                 :            :  * We check receive queue before schedule() only as optimization;
    1964                 :            :  * it is very likely that release_sock() added new data.
    1965                 :            :  */
    1966                 :          0 : int sk_wait_data(struct sock *sk, long *timeo)
    1967                 :            : {
    1968                 :            :         int rc;
    1969                 :       1830 :         DEFINE_WAIT(wait);
    1970                 :            : 
    1971                 :        915 :         prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
    1972                 :        915 :         set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
    1973         [ +  + ]:        915 :         rc = sk_wait_event(sk, timeo, !skb_queue_empty(&sk->sk_receive_queue));
    1974                 :        915 :         clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
    1975                 :        915 :         finish_wait(sk_sleep(sk), &wait);
    1976                 :        915 :         return rc;
    1977                 :            : }
    1978                 :            : EXPORT_SYMBOL(sk_wait_data);
    1979                 :            : 
    1980                 :            : /**
    1981                 :            :  *      __sk_mem_schedule - increase sk_forward_alloc and memory_allocated
    1982                 :            :  *      @sk: socket
    1983                 :            :  *      @size: memory size to allocate
    1984                 :            :  *      @kind: allocation type
    1985                 :            :  *
    1986                 :            :  *      If kind is SK_MEM_SEND, it means wmem allocation. Otherwise it means
    1987                 :            :  *      rmem allocation. This function assumes that protocols which have
    1988                 :            :  *      memory_pressure use sk_wmem_queued as write buffer accounting.
    1989                 :            :  */
    1990                 :          0 : int __sk_mem_schedule(struct sock *sk, int size, int kind)
    1991                 :            : {
    1992                 :      12525 :         struct proto *prot = sk->sk_prot;
    1993                 :            :         int amt = sk_mem_pages(size);
    1994                 :            :         long allocated;
    1995                 :            :         int parent_status = UNDER_LIMIT;
    1996                 :            : 
    1997                 :      12525 :         sk->sk_forward_alloc += amt * SK_MEM_QUANTUM;
    1998                 :            : 
    1999                 :            :         allocated = sk_memory_allocated_add(sk, amt, &parent_status);
    2000                 :            : 
    2001                 :            :         /* Under limit. */
    2002         [ +  - ]:      12525 :         if (parent_status == UNDER_LIMIT &&
    2003                 :            :                         allocated <= sk_prot_mem_limits(sk, 0)) {
    2004                 :            :                 sk_leave_memory_pressure(sk);
    2005                 :            :                 return 1;
    2006                 :            :         }
    2007                 :            : 
    2008                 :            :         /* Under pressure. (we or our parents) */
    2009         [ #  # ]:          0 :         if ((parent_status > SOFT_LIMIT) ||
    2010                 :            :                         allocated > sk_prot_mem_limits(sk, 1))
    2011                 :            :                 sk_enter_memory_pressure(sk);
    2012                 :            : 
    2013                 :            :         /* Over hard limit (we or our parents) */
    2014         [ #  # ]:      12525 :         if ((parent_status == OVER_LIMIT) ||
    2015                 :            :                         (allocated > sk_prot_mem_limits(sk, 2)))
    2016                 :            :                 goto suppress_allocation;
    2017                 :            : 
    2018                 :            :         /* guarantee minimum buffer size under pressure */
    2019         [ #  # ]:          0 :         if (kind == SK_MEM_RECV) {
    2020         [ #  # ]:          0 :                 if (atomic_read(&sk->sk_rmem_alloc) < prot->sysctl_rmem[0])
    2021                 :            :                         return 1;
    2022                 :            : 
    2023                 :            :         } else { /* SK_MEM_SEND */
    2024         [ #  # ]:          0 :                 if (sk->sk_type == SOCK_STREAM) {
    2025         [ #  # ]:          0 :                         if (sk->sk_wmem_queued < prot->sysctl_wmem[0])
    2026                 :            :                                 return 1;
    2027         [ #  # ]:          0 :                 } else if (atomic_read(&sk->sk_wmem_alloc) <
    2028                 :          0 :                            prot->sysctl_wmem[0])
    2029                 :            :                                 return 1;
    2030                 :            :         }
    2031                 :            : 
    2032         [ #  # ]:          0 :         if (sk_has_memory_pressure(sk)) {
    2033                 :            :                 int alloc;
    2034                 :            : 
    2035         [ #  # ]:          0 :                 if (!sk_under_memory_pressure(sk))
    2036                 :            :                         return 1;
    2037                 :            :                 alloc = sk_sockets_allocated_read_positive(sk);
    2038         [ #  # ]:          0 :                 if (sk_prot_mem_limits(sk, 2) > alloc *
    2039                 :          0 :                     sk_mem_pages(sk->sk_wmem_queued +
    2040                 :          0 :                                  atomic_read(&sk->sk_rmem_alloc) +
    2041                 :          0 :                                  sk->sk_forward_alloc))
    2042                 :            :                         return 1;
    2043                 :            :         }
    2044                 :            : 
    2045                 :            : suppress_allocation:
    2046                 :            : 
    2047 [ #  # ][ #  # ]:          0 :         if (kind == SK_MEM_SEND && sk->sk_type == SOCK_STREAM) {
    2048                 :            :                 sk_stream_moderate_sndbuf(sk);
    2049                 :            : 
    2050                 :            :                 /* Fail only if socket is _under_ its sndbuf.
    2051                 :            :                  * In this case we cannot block, so that we have to fail.
    2052                 :            :                  */
    2053         [ #  # ]:          0 :                 if (sk->sk_wmem_queued + size >= sk->sk_sndbuf)
    2054                 :            :                         return 1;
    2055                 :            :         }
    2056                 :            : 
    2057                 :            :         trace_sock_exceed_buf_limit(sk, prot, allocated);
    2058                 :            : 
    2059                 :            :         /* Alas. Undo changes. */
    2060                 :          0 :         sk->sk_forward_alloc -= amt * SK_MEM_QUANTUM;
    2061                 :            : 
    2062                 :            :         sk_memory_allocated_sub(sk, amt);
    2063                 :            : 
    2064                 :          0 :         return 0;
    2065                 :            : }
    2066                 :            : EXPORT_SYMBOL(__sk_mem_schedule);
    2067                 :            : 
    2068                 :            : /**
    2069                 :            :  *      __sk_reclaim - reclaim memory_allocated
    2070                 :            :  *      @sk: socket
    2071                 :            :  */
    2072                 :          0 : void __sk_mem_reclaim(struct sock *sk)
    2073                 :            : {
    2074                 :       6135 :         sk_memory_allocated_sub(sk,
    2075                 :       6135 :                                 sk->sk_forward_alloc >> SK_MEM_QUANTUM_SHIFT);
    2076                 :       6135 :         sk->sk_forward_alloc &= SK_MEM_QUANTUM - 1;
    2077                 :            : 
    2078 [ -  - ][ #  # ]:       6135 :         if (sk_under_memory_pressure(sk) &&
    2079                 :            :             (sk_memory_allocated(sk) < sk_prot_mem_limits(sk, 0)))
    2080                 :            :                 sk_leave_memory_pressure(sk);
    2081                 :          0 : }
    2082                 :            : EXPORT_SYMBOL(__sk_mem_reclaim);
    2083                 :            : 
    2084                 :            : 
    2085                 :            : /*
    2086                 :            :  * Set of default routines for initialising struct proto_ops when
    2087                 :            :  * the protocol does not support a particular function. In certain
    2088                 :            :  * cases where it makes no sense for a protocol to have a "do nothing"
    2089                 :            :  * function, some default processing is provided.
    2090                 :            :  */
    2091                 :            : 
    2092                 :          0 : int sock_no_bind(struct socket *sock, struct sockaddr *saddr, int len)
    2093                 :            : {
    2094                 :          0 :         return -EOPNOTSUPP;
    2095                 :            : }
    2096                 :            : EXPORT_SYMBOL(sock_no_bind);
    2097                 :            : 
    2098                 :          0 : int sock_no_connect(struct socket *sock, struct sockaddr *saddr,
    2099                 :            :                     int len, int flags)
    2100                 :            : {
    2101                 :          0 :         return -EOPNOTSUPP;
    2102                 :            : }
    2103                 :            : EXPORT_SYMBOL(sock_no_connect);
    2104                 :            : 
    2105                 :          0 : int sock_no_socketpair(struct socket *sock1, struct socket *sock2)
    2106                 :            : {
    2107                 :          2 :         return -EOPNOTSUPP;
    2108                 :            : }
    2109                 :            : EXPORT_SYMBOL(sock_no_socketpair);
    2110                 :            : 
    2111                 :          0 : int sock_no_accept(struct socket *sock, struct socket *newsock, int flags)
    2112                 :            : {
    2113                 :          4 :         return -EOPNOTSUPP;
    2114                 :            : }
    2115                 :            : EXPORT_SYMBOL(sock_no_accept);
    2116                 :            : 
    2117                 :          0 : int sock_no_getname(struct socket *sock, struct sockaddr *saddr,
    2118                 :            :                     int *len, int peer)
    2119                 :            : {
    2120                 :          0 :         return -EOPNOTSUPP;
    2121                 :            : }
    2122                 :            : EXPORT_SYMBOL(sock_no_getname);
    2123                 :            : 
    2124                 :          0 : unsigned int sock_no_poll(struct file *file, struct socket *sock, poll_table *pt)
    2125                 :            : {
    2126                 :          0 :         return 0;
    2127                 :            : }
    2128                 :            : EXPORT_SYMBOL(sock_no_poll);
    2129                 :            : 
    2130                 :          0 : int sock_no_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
    2131                 :            : {
    2132                 :          0 :         return -EOPNOTSUPP;
    2133                 :            : }
    2134                 :            : EXPORT_SYMBOL(sock_no_ioctl);
    2135                 :            : 
    2136                 :          0 : int sock_no_listen(struct socket *sock, int backlog)
    2137                 :            : {
    2138                 :          1 :         return -EOPNOTSUPP;
    2139                 :            : }
    2140                 :            : EXPORT_SYMBOL(sock_no_listen);
    2141                 :            : 
    2142                 :          0 : int sock_no_shutdown(struct socket *sock, int how)
    2143                 :            : {
    2144                 :          0 :         return -EOPNOTSUPP;
    2145                 :            : }
    2146                 :            : EXPORT_SYMBOL(sock_no_shutdown);
    2147                 :            : 
    2148                 :          0 : int sock_no_setsockopt(struct socket *sock, int level, int optname,
    2149                 :            :                     char __user *optval, unsigned int optlen)
    2150                 :            : {
    2151                 :          0 :         return -EOPNOTSUPP;
    2152                 :            : }
    2153                 :            : EXPORT_SYMBOL(sock_no_setsockopt);
    2154                 :            : 
    2155                 :          0 : int sock_no_getsockopt(struct socket *sock, int level, int optname,
    2156                 :            :                     char __user *optval, int __user *optlen)
    2157                 :            : {
    2158                 :          0 :         return -EOPNOTSUPP;
    2159                 :            : }
    2160                 :            : EXPORT_SYMBOL(sock_no_getsockopt);
    2161                 :            : 
    2162                 :          0 : int sock_no_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
    2163                 :            :                     size_t len)
    2164                 :            : {
    2165                 :          0 :         return -EOPNOTSUPP;
    2166                 :            : }
    2167                 :            : EXPORT_SYMBOL(sock_no_sendmsg);
    2168                 :            : 
    2169                 :          0 : int sock_no_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
    2170                 :            :                     size_t len, int flags)
    2171                 :            : {
    2172                 :          0 :         return -EOPNOTSUPP;
    2173                 :            : }
    2174                 :            : EXPORT_SYMBOL(sock_no_recvmsg);
    2175                 :            : 
    2176                 :          0 : int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma)
    2177                 :            : {
    2178                 :            :         /* Mirror missing mmap method error code */
    2179                 :          0 :         return -ENODEV;
    2180                 :            : }
    2181                 :            : EXPORT_SYMBOL(sock_no_mmap);
    2182                 :            : 
    2183                 :          0 : ssize_t sock_no_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags)
    2184                 :            : {
    2185                 :            :         ssize_t res;
    2186                 :          2 :         struct msghdr msg = {.msg_flags = flags};
    2187                 :            :         struct kvec iov;
    2188                 :          2 :         char *kaddr = kmap(page);
    2189                 :          2 :         iov.iov_base = kaddr + offset;
    2190                 :          2 :         iov.iov_len = size;
    2191                 :          2 :         res = kernel_sendmsg(sock, &msg, &iov, 1, size);
    2192                 :          2 :         kunmap(page);
    2193                 :          2 :         return res;
    2194                 :            : }
    2195                 :            : EXPORT_SYMBOL(sock_no_sendpage);
    2196                 :            : 
    2197                 :            : /*
    2198                 :            :  *      Default Socket Callbacks
    2199                 :            :  */
    2200                 :            : 
    2201                 :          0 : static void sock_def_wakeup(struct sock *sk)
    2202                 :            : {
    2203                 :            :         struct socket_wq *wq;
    2204                 :            : 
    2205                 :            :         rcu_read_lock();
    2206                 :       1176 :         wq = rcu_dereference(sk->sk_wq);
    2207         [ +  + ]:       1177 :         if (wq_has_sleeper(wq))
    2208                 :        140 :                 wake_up_interruptible_all(&wq->wait);
    2209                 :            :         rcu_read_unlock();
    2210                 :       1177 : }
    2211                 :            : 
    2212                 :          0 : static void sock_def_error_report(struct sock *sk)
    2213                 :            : {
    2214                 :            :         struct socket_wq *wq;
    2215                 :            : 
    2216                 :            :         rcu_read_lock();
    2217                 :         14 :         wq = rcu_dereference(sk->sk_wq);
    2218         [ #  # ]:         14 :         if (wq_has_sleeper(wq))
    2219                 :         11 :                 wake_up_interruptible_poll(&wq->wait, POLLERR);
    2220                 :            :         sk_wake_async(sk, SOCK_WAKE_IO, POLL_ERR);
    2221                 :            :         rcu_read_unlock();
    2222                 :         14 : }
    2223                 :            : 
    2224                 :          0 : static void sock_def_readable(struct sock *sk, int len)
    2225                 :            : {
    2226                 :            :         struct socket_wq *wq;
    2227                 :            : 
    2228                 :            :         rcu_read_lock();
    2229                 :     822082 :         wq = rcu_dereference(sk->sk_wq);
    2230            [ + ]:     822236 :         if (wq_has_sleeper(wq))
    2231                 :     146311 :                 wake_up_interruptible_sync_poll(&wq->wait, POLLIN | POLLPRI |
    2232                 :            :                                                 POLLRDNORM | POLLRDBAND);
    2233                 :            :         sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN);
    2234                 :            :         rcu_read_unlock();
    2235                 :     821557 : }
    2236                 :            : 
    2237                 :          0 : static void sock_def_write_space(struct sock *sk)
    2238                 :            : {
    2239                 :            :         struct socket_wq *wq;
    2240                 :            : 
    2241                 :            :         rcu_read_lock();
    2242                 :            : 
    2243                 :            :         /* Do not wake up a writer until he can make "significant"
    2244                 :            :          * progress.  --DaveM
    2245                 :            :          */
    2246         [ +  - ]:         30 :         if ((atomic_read(&sk->sk_wmem_alloc) << 1) <= sk->sk_sndbuf) {
    2247                 :         30 :                 wq = rcu_dereference(sk->sk_wq);
    2248         [ -  + ]:         30 :                 if (wq_has_sleeper(wq))
    2249                 :          0 :                         wake_up_interruptible_sync_poll(&wq->wait, POLLOUT |
    2250                 :            :                                                 POLLWRNORM | POLLWRBAND);
    2251                 :            : 
    2252                 :            :                 /* Should agree with poll, otherwise some programs break */
    2253         [ +  - ]:         30 :                 if (sock_writeable(sk))
    2254                 :            :                         sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
    2255                 :            :         }
    2256                 :            : 
    2257                 :            :         rcu_read_unlock();
    2258                 :         30 : }
    2259                 :            : 
    2260                 :          0 : static void sock_def_destruct(struct sock *sk)
    2261                 :            : {
    2262                 :          0 :         kfree(sk->sk_protinfo);
    2263                 :          0 : }
    2264                 :            : 
    2265                 :          0 : void sk_send_sigurg(struct sock *sk)
    2266                 :            : {
    2267 [ #  # ][ #  # ]:          0 :         if (sk->sk_socket && sk->sk_socket->file)
    2268         [ #  # ]:          0 :                 if (send_sigurg(&sk->sk_socket->file->f_owner))
    2269                 :            :                         sk_wake_async(sk, SOCK_WAKE_URG, POLL_PRI);
    2270                 :          0 : }
    2271                 :            : EXPORT_SYMBOL(sk_send_sigurg);
    2272                 :            : 
    2273                 :          0 : void sk_reset_timer(struct sock *sk, struct timer_list* timer,
    2274                 :            :                     unsigned long expires)
    2275                 :            : {
    2276         [ +  + ]:     170694 :         if (!mod_timer(timer, expires))
    2277                 :            :                 sock_hold(sk);
    2278                 :          3 : }
    2279                 :            : EXPORT_SYMBOL(sk_reset_timer);
    2280                 :            : 
    2281                 :          0 : void sk_stop_timer(struct sock *sk, struct timer_list* timer)
    2282                 :            : {
    2283         [ +  + ]:        505 :         if (del_timer(timer))
    2284                 :            :                 __sock_put(sk);
    2285                 :          0 : }
    2286                 :            : EXPORT_SYMBOL(sk_stop_timer);
    2287                 :            : 
    2288                 :          0 : void sock_init_data(struct socket *sock, struct sock *sk)
    2289                 :            : {
    2290                 :     479823 :         skb_queue_head_init(&sk->sk_receive_queue);
    2291                 :     479823 :         skb_queue_head_init(&sk->sk_write_queue);
    2292                 :     479823 :         skb_queue_head_init(&sk->sk_error_queue);
    2293                 :            : #ifdef CONFIG_NET_DMA
    2294                 :            :         skb_queue_head_init(&sk->sk_async_wait_queue);
    2295                 :            : #endif
    2296                 :            : 
    2297                 :     479823 :         sk->sk_send_head     =       NULL;
    2298                 :            : 
    2299                 :     479823 :         init_timer(&sk->sk_timer);
    2300                 :            : 
    2301                 :     492990 :         sk->sk_allocation    =       GFP_KERNEL;
    2302                 :     492990 :         sk->sk_rcvbuf                =       sysctl_rmem_default;
    2303                 :     492990 :         sk->sk_sndbuf                =       sysctl_wmem_default;
    2304                 :     492990 :         sk->sk_state         =       TCP_CLOSE;
    2305                 :            :         sk_set_socket(sk, sock);
    2306                 :            : 
    2307                 :            :         sock_set_flag(sk, SOCK_ZAPPED);
    2308                 :            : 
    2309         [ +  + ]:     972813 :         if (sock) {
    2310                 :     488031 :                 sk->sk_type  =       sock->type;
    2311                 :     488031 :                 sk->sk_wq    =       sock->wq;
    2312                 :     488031 :                 sock->sk     =       sk;
    2313                 :            :         } else
    2314                 :       4959 :                 sk->sk_wq    =       NULL;
    2315                 :            : 
    2316                 :     492990 :         spin_lock_init(&sk->sk_dst_lock);
    2317                 :     492990 :         rwlock_init(&sk->sk_callback_lock);
    2318                 :            :         lockdep_set_class_and_name(&sk->sk_callback_lock,
    2319                 :            :                         af_callback_keys + sk->sk_family,
    2320                 :            :                         af_family_clock_key_strings[sk->sk_family]);
    2321                 :            : 
    2322                 :     492990 :         sk->sk_state_change  =       sock_def_wakeup;
    2323                 :     492990 :         sk->sk_data_ready    =       sock_def_readable;
    2324                 :     492990 :         sk->sk_write_space   =       sock_def_write_space;
    2325                 :     492990 :         sk->sk_error_report  =       sock_def_error_report;
    2326                 :     492990 :         sk->sk_destruct              =       sock_def_destruct;
    2327                 :            : 
    2328                 :     492990 :         sk->sk_frag.page     =       NULL;
    2329                 :     492990 :         sk->sk_frag.offset   =       0;
    2330                 :     492990 :         sk->sk_peek_off              =       -1;
    2331                 :            : 
    2332                 :     492990 :         sk->sk_peer_pid      =       NULL;
    2333                 :     492990 :         sk->sk_peer_cred     =       NULL;
    2334                 :     492990 :         sk->sk_write_pending =       0;
    2335                 :     492990 :         sk->sk_rcvlowat              =       1;
    2336                 :     492990 :         sk->sk_rcvtimeo              =       MAX_SCHEDULE_TIMEOUT;
    2337                 :     492990 :         sk->sk_sndtimeo              =       MAX_SCHEDULE_TIMEOUT;
    2338                 :            : 
    2339                 :     492990 :         sk->sk_stamp = ktime_set(-1L, 0);
    2340                 :            : 
    2341                 :            : #ifdef CONFIG_NET_RX_BUSY_POLL
    2342                 :     492990 :         sk->sk_napi_id               =       0;
    2343                 :     492990 :         sk->sk_ll_usec               =       sysctl_net_busy_read;
    2344                 :            : #endif
    2345                 :            : 
    2346                 :     492990 :         sk->sk_max_pacing_rate = ~0U;
    2347                 :     492990 :         sk->sk_pacing_rate = ~0U;
    2348                 :            :         /*
    2349                 :            :          * Before updating sk_refcnt, we must commit prior changes to memory
    2350                 :            :          * (Documentation/RCU/rculist_nulls.txt for details)
    2351                 :            :          */
    2352                 :     492990 :         smp_wmb();
    2353                 :     445919 :         atomic_set(&sk->sk_refcnt, 1);
    2354                 :     445919 :         atomic_set(&sk->sk_drops, 0);
    2355                 :     445919 : }
    2356                 :            : EXPORT_SYMBOL(sock_init_data);
    2357                 :            : 
    2358                 :          0 : void lock_sock_nested(struct sock *sk, int subclass)
    2359                 :            : {
    2360                 :            :         might_sleep();
    2361                 :            :         spin_lock_bh(&sk->sk_lock.slock);
    2362         [ -  + ]:      68391 :         if (sk->sk_lock.owned)
    2363                 :          0 :                 __lock_sock(sk);
    2364                 :          3 :         sk->sk_lock.owned = 1;
    2365                 :            :         spin_unlock(&sk->sk_lock.slock);
    2366                 :            :         /*
    2367                 :            :          * The sk_lock has mutex_lock() semantics here:
    2368                 :            :          */
    2369                 :            :         mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
    2370                 :      68397 :         local_bh_enable();
    2371                 :      68397 : }
    2372                 :            : EXPORT_SYMBOL(lock_sock_nested);
    2373                 :            : 
    2374                 :          0 : void release_sock(struct sock *sk)
    2375                 :            : {
    2376                 :            :         /*
    2377                 :            :          * The sk_lock has mutex_unlock() semantics:
    2378                 :            :          */
    2379                 :            :         mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
    2380                 :            : 
    2381                 :            :         spin_lock_bh(&sk->sk_lock.slock);
    2382         [ +  + ]:      68398 :         if (sk->sk_backlog.tail)
    2383                 :       5529 :                 __release_sock(sk);
    2384                 :            : 
    2385         [ +  + ]:     136795 :         if (sk->sk_prot->release_cb)
    2386                 :      68317 :                 sk->sk_prot->release_cb(sk);
    2387                 :            : 
    2388                 :      68390 :         sk->sk_lock.owned = 0;
    2389         [ -  + ]:      68390 :         if (waitqueue_active(&sk->sk_lock.wq))
    2390                 :          0 :                 wake_up(&sk->sk_lock.wq);
    2391                 :            :         spin_unlock_bh(&sk->sk_lock.slock);
    2392                 :      68393 : }
    2393                 :            : EXPORT_SYMBOL(release_sock);
    2394                 :            : 
    2395                 :            : /**
    2396                 :            :  * lock_sock_fast - fast version of lock_sock
    2397                 :            :  * @sk: socket
    2398                 :            :  *
    2399                 :            :  * This version should be used for very small section, where process wont block
    2400                 :            :  * return false if fast path is taken
    2401                 :            :  *   sk_lock.slock locked, owned = 0, BH disabled
    2402                 :            :  * return true if slow path is taken
    2403                 :            :  *   sk_lock.slock unlocked, owned = 1, BH enabled
    2404                 :            :  */
    2405                 :          0 : bool lock_sock_fast(struct sock *sk)
    2406                 :            : {
    2407                 :            :         might_sleep();
    2408                 :            :         spin_lock_bh(&sk->sk_lock.slock);
    2409                 :            : 
    2410         [ -  + ]:        262 :         if (!sk->sk_lock.owned)
    2411                 :            :                 /*
    2412                 :            :                  * Note : We must disable BH
    2413                 :            :                  */
    2414                 :            :                 return false;
    2415                 :            : 
    2416                 :          0 :         __lock_sock(sk);
    2417                 :          0 :         sk->sk_lock.owned = 1;
    2418                 :            :         spin_unlock(&sk->sk_lock.slock);
    2419                 :            :         /*
    2420                 :            :          * The sk_lock has mutex_lock() semantics here:
    2421                 :            :          */
    2422                 :            :         mutex_acquire(&sk->sk_lock.dep_map, 0, 0, _RET_IP_);
    2423                 :          0 :         local_bh_enable();
    2424                 :          0 :         return true;
    2425                 :            : }
    2426                 :            : EXPORT_SYMBOL(lock_sock_fast);
    2427                 :            : 
    2428                 :          0 : int sock_get_timestamp(struct sock *sk, struct timeval __user *userstamp)
    2429                 :            : {
    2430                 :            :         struct timeval tv;
    2431         [ #  # ]:          0 :         if (!sock_flag(sk, SOCK_TIMESTAMP))
    2432                 :          0 :                 sock_enable_timestamp(sk, SOCK_TIMESTAMP);
    2433                 :          0 :         tv = ktime_to_timeval(sk->sk_stamp);
    2434         [ #  # ]:          0 :         if (tv.tv_sec == -1)
    2435                 :            :                 return -ENOENT;
    2436         [ #  # ]:          0 :         if (tv.tv_sec == 0) {
    2437                 :          0 :                 sk->sk_stamp = ktime_get_real();
    2438                 :          0 :                 tv = ktime_to_timeval(sk->sk_stamp);
    2439                 :            :         }
    2440         [ #  # ]:          0 :         return copy_to_user(userstamp, &tv, sizeof(tv)) ? -EFAULT : 0;
    2441                 :            : }
    2442                 :            : EXPORT_SYMBOL(sock_get_timestamp);
    2443                 :            : 
    2444                 :          0 : int sock_get_timestampns(struct sock *sk, struct timespec __user *userstamp)
    2445                 :            : {
    2446                 :            :         struct timespec ts;
    2447         [ #  # ]:          0 :         if (!sock_flag(sk, SOCK_TIMESTAMP))
    2448                 :          0 :                 sock_enable_timestamp(sk, SOCK_TIMESTAMP);
    2449                 :          0 :         ts = ktime_to_timespec(sk->sk_stamp);
    2450         [ #  # ]:          0 :         if (ts.tv_sec == -1)
    2451                 :            :                 return -ENOENT;
    2452         [ #  # ]:          0 :         if (ts.tv_sec == 0) {
    2453                 :          0 :                 sk->sk_stamp = ktime_get_real();
    2454                 :          0 :                 ts = ktime_to_timespec(sk->sk_stamp);
    2455                 :            :         }
    2456         [ #  # ]:          0 :         return copy_to_user(userstamp, &ts, sizeof(ts)) ? -EFAULT : 0;
    2457                 :            : }
    2458                 :            : EXPORT_SYMBOL(sock_get_timestampns);
    2459                 :            : 
    2460                 :          0 : void sock_enable_timestamp(struct sock *sk, int flag)
    2461                 :            : {
    2462         [ #  # ]:          0 :         if (!sock_flag(sk, flag)) {
    2463                 :          0 :                 unsigned long previous_flags = sk->sk_flags;
    2464                 :            : 
    2465                 :            :                 sock_set_flag(sk, flag);
    2466                 :            :                 /*
    2467                 :            :                  * we just set one of the two flags which require net
    2468                 :            :                  * time stamping, but time stamping might have been on
    2469                 :            :                  * already because of the other one
    2470                 :            :                  */
    2471         [ #  # ]:          0 :                 if (!(previous_flags & SK_FLAGS_TIMESTAMP))
    2472                 :          0 :                         net_enable_timestamp();
    2473                 :            :         }
    2474                 :          0 : }
    2475                 :            : 
    2476                 :          0 : int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
    2477                 :            :                        int level, int type)
    2478                 :            : {
    2479                 :            :         struct sock_exterr_skb *serr;
    2480                 :            :         struct sk_buff *skb, *skb2;
    2481                 :            :         int copied, err;
    2482                 :            : 
    2483                 :            :         err = -EAGAIN;
    2484                 :          0 :         skb = skb_dequeue(&sk->sk_error_queue);
    2485         [ #  # ]:          0 :         if (skb == NULL)
    2486                 :            :                 goto out;
    2487                 :            : 
    2488                 :          0 :         copied = skb->len;
    2489         [ #  # ]:          0 :         if (copied > len) {
    2490                 :          0 :                 msg->msg_flags |= MSG_TRUNC;
    2491                 :            :                 copied = len;
    2492                 :            :         }
    2493                 :          0 :         err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
    2494         [ #  # ]:          0 :         if (err)
    2495                 :            :                 goto out_free_skb;
    2496                 :            : 
    2497                 :            :         sock_recv_timestamp(msg, sk, skb);
    2498                 :            : 
    2499                 :            :         serr = SKB_EXT_ERR(skb);
    2500                 :          0 :         put_cmsg(msg, level, type, sizeof(serr->ee), &serr->ee);
    2501                 :            : 
    2502                 :          0 :         msg->msg_flags |= MSG_ERRQUEUE;
    2503                 :            :         err = copied;
    2504                 :            : 
    2505                 :            :         /* Reset and regenerate socket error */
    2506                 :            :         spin_lock_bh(&sk->sk_error_queue.lock);
    2507                 :          0 :         sk->sk_err = 0;
    2508         [ #  # ]:          0 :         if ((skb2 = skb_peek(&sk->sk_error_queue)) != NULL) {
    2509                 :          0 :                 sk->sk_err = SKB_EXT_ERR(skb2)->ee.ee_errno;
    2510                 :            :                 spin_unlock_bh(&sk->sk_error_queue.lock);
    2511                 :          0 :                 sk->sk_error_report(sk);
    2512                 :            :         } else
    2513                 :            :                 spin_unlock_bh(&sk->sk_error_queue.lock);
    2514                 :            : 
    2515                 :            : out_free_skb:
    2516                 :          0 :         kfree_skb(skb);
    2517                 :            : out:
    2518                 :          0 :         return err;
    2519                 :            : }
    2520                 :            : EXPORT_SYMBOL(sock_recv_errqueue);
    2521                 :            : 
    2522                 :            : /*
    2523                 :            :  *      Get a socket option on an socket.
    2524                 :            :  *
    2525                 :            :  *      FIX: POSIX 1003.1g is very ambiguous here. It states that
    2526                 :            :  *      asynchronous errors should be reported by getsockopt. We assume
    2527                 :            :  *      this means if you specify SO_ERROR (otherwise whats the point of it).
    2528                 :            :  */
    2529                 :          0 : int sock_common_getsockopt(struct socket *sock, int level, int optname,
    2530                 :            :                            char __user *optval, int __user *optlen)
    2531                 :            : {
    2532                 :         11 :         struct sock *sk = sock->sk;
    2533                 :            : 
    2534                 :         11 :         return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
    2535                 :            : }
    2536                 :            : EXPORT_SYMBOL(sock_common_getsockopt);
    2537                 :            : 
    2538                 :            : #ifdef CONFIG_COMPAT
    2539                 :            : int compat_sock_common_getsockopt(struct socket *sock, int level, int optname,
    2540                 :            :                                   char __user *optval, int __user *optlen)
    2541                 :            : {
    2542                 :            :         struct sock *sk = sock->sk;
    2543                 :            : 
    2544                 :            :         if (sk->sk_prot->compat_getsockopt != NULL)
    2545                 :            :                 return sk->sk_prot->compat_getsockopt(sk, level, optname,
    2546                 :            :                                                       optval, optlen);
    2547                 :            :         return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
    2548                 :            : }
    2549                 :            : EXPORT_SYMBOL(compat_sock_common_getsockopt);
    2550                 :            : #endif
    2551                 :            : 
    2552                 :          0 : int sock_common_recvmsg(struct kiocb *iocb, struct socket *sock,
    2553                 :            :                         struct msghdr *msg, size_t size, int flags)
    2554                 :            : {
    2555                 :          0 :         struct sock *sk = sock->sk;
    2556                 :          0 :         int addr_len = 0;
    2557                 :            :         int err;
    2558                 :            : 
    2559                 :          0 :         err = sk->sk_prot->recvmsg(iocb, sk, msg, size, flags & MSG_DONTWAIT,
    2560                 :            :                                    flags & ~MSG_DONTWAIT, &addr_len);
    2561         [ #  # ]:          0 :         if (err >= 0)
    2562                 :          0 :                 msg->msg_namelen = addr_len;
    2563                 :          0 :         return err;
    2564                 :            : }
    2565                 :            : EXPORT_SYMBOL(sock_common_recvmsg);
    2566                 :            : 
    2567                 :            : /*
    2568                 :            :  *      Set socket options on an inet socket.
    2569                 :            :  */
    2570                 :          0 : int sock_common_setsockopt(struct socket *sock, int level, int optname,
    2571                 :            :                            char __user *optval, unsigned int optlen)
    2572                 :            : {
    2573                 :          9 :         struct sock *sk = sock->sk;
    2574                 :            : 
    2575                 :          9 :         return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
    2576                 :            : }
    2577                 :            : EXPORT_SYMBOL(sock_common_setsockopt);
    2578                 :            : 
    2579                 :            : #ifdef CONFIG_COMPAT
    2580                 :            : int compat_sock_common_setsockopt(struct socket *sock, int level, int optname,
    2581                 :            :                                   char __user *optval, unsigned int optlen)
    2582                 :            : {
    2583                 :            :         struct sock *sk = sock->sk;
    2584                 :            : 
    2585                 :            :         if (sk->sk_prot->compat_setsockopt != NULL)
    2586                 :            :                 return sk->sk_prot->compat_setsockopt(sk, level, optname,
    2587                 :            :                                                       optval, optlen);
    2588                 :            :         return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
    2589                 :            : }
    2590                 :            : EXPORT_SYMBOL(compat_sock_common_setsockopt);
    2591                 :            : #endif
    2592                 :            : 
    2593                 :          0 : void sk_common_release(struct sock *sk)
    2594                 :            : {
    2595         [ +  - ]:         77 :         if (sk->sk_prot->destroy)
    2596                 :         77 :                 sk->sk_prot->destroy(sk);
    2597                 :            : 
    2598                 :            :         /*
    2599                 :            :          * Observation: when sock_common_release is called, processes have
    2600                 :            :          * no access to socket. But net still has.
    2601                 :            :          * Step one, detach it from networking:
    2602                 :            :          *
    2603                 :            :          * A. Remove from hash tables.
    2604                 :            :          */
    2605                 :            : 
    2606                 :         77 :         sk->sk_prot->unhash(sk);
    2607                 :            : 
    2608                 :            :         /*
    2609                 :            :          * In this point socket cannot receive new packets, but it is possible
    2610                 :            :          * that some packets are in flight because some CPU runs receiver and
    2611                 :            :          * did hash table lookup before we unhashed socket. They will achieve
    2612                 :            :          * receive queue and will be purged by socket destructor.
    2613                 :            :          *
    2614                 :            :          * Also we still have packets pending on receive queue and probably,
    2615                 :            :          * our own packets waiting in device queues. sock_destroy will drain
    2616                 :            :          * receive queue, but transmitted packets will delay socket destruction
    2617                 :            :          * until the last reference will be released.
    2618                 :            :          */
    2619                 :            : 
    2620                 :            :         sock_orphan(sk);
    2621                 :            : 
    2622                 :            :         xfrm_sk_free_policy(sk);
    2623                 :            : 
    2624                 :            :         sk_refcnt_debug_release(sk);
    2625                 :            : 
    2626         [ -  + ]:         77 :         if (sk->sk_frag.page) {
    2627                 :          0 :                 put_page(sk->sk_frag.page);
    2628                 :          0 :                 sk->sk_frag.page = NULL;
    2629                 :            :         }
    2630                 :            : 
    2631                 :            :         sock_put(sk);
    2632                 :         77 : }
    2633                 :            : EXPORT_SYMBOL(sk_common_release);
    2634                 :            : 
    2635                 :            : #ifdef CONFIG_PROC_FS
    2636                 :            : #define PROTO_INUSE_NR  64      /* should be enough for the first time */
    2637                 :            : struct prot_inuse {
    2638                 :            :         int val[PROTO_INUSE_NR];
    2639                 :            : };
    2640                 :            : 
    2641                 :            : static DECLARE_BITMAP(proto_inuse_idx, PROTO_INUSE_NR);
    2642                 :            : 
    2643                 :            : #ifdef CONFIG_NET_NS
    2644                 :            : void sock_prot_inuse_add(struct net *net, struct proto *prot, int val)
    2645                 :            : {
    2646                 :            :         __this_cpu_add(net->core.inuse->val[prot->inuse_idx], val);
    2647                 :            : }
    2648                 :            : EXPORT_SYMBOL_GPL(sock_prot_inuse_add);
    2649                 :            : 
    2650                 :            : int sock_prot_inuse_get(struct net *net, struct proto *prot)
    2651                 :            : {
    2652                 :            :         int cpu, idx = prot->inuse_idx;
    2653                 :            :         int res = 0;
    2654                 :            : 
    2655                 :            :         for_each_possible_cpu(cpu)
    2656                 :            :                 res += per_cpu_ptr(net->core.inuse, cpu)->val[idx];
    2657                 :            : 
    2658                 :            :         return res >= 0 ? res : 0;
    2659                 :            : }
    2660                 :            : EXPORT_SYMBOL_GPL(sock_prot_inuse_get);
    2661                 :            : 
    2662                 :            : static int __net_init sock_inuse_init_net(struct net *net)
    2663                 :            : {
    2664                 :            :         net->core.inuse = alloc_percpu(struct prot_inuse);
    2665                 :            :         return net->core.inuse ? 0 : -ENOMEM;
    2666                 :            : }
    2667                 :            : 
    2668                 :            : static void __net_exit sock_inuse_exit_net(struct net *net)
    2669                 :            : {
    2670                 :            :         free_percpu(net->core.inuse);
    2671                 :            : }
    2672                 :            : 
    2673                 :            : static struct pernet_operations net_inuse_ops = {
    2674                 :            :         .init = sock_inuse_init_net,
    2675                 :            :         .exit = sock_inuse_exit_net,
    2676                 :            : };
    2677                 :            : 
    2678                 :            : static __init int net_inuse_init(void)
    2679                 :            : {
    2680                 :            :         if (register_pernet_subsys(&net_inuse_ops))
    2681                 :            :                 panic("Cannot initialize net inuse counters");
    2682                 :            : 
    2683                 :            :         return 0;
    2684                 :            : }
    2685                 :            : 
    2686                 :            : core_initcall(net_inuse_init);
    2687                 :            : #else
    2688                 :            : static DEFINE_PER_CPU(struct prot_inuse, prot_inuse);
    2689                 :            : 
    2690                 :          0 : void sock_prot_inuse_add(struct net *net, struct proto *prot, int val)
    2691                 :            : {
    2692                 :    1961228 :         __this_cpu_add(prot_inuse.val[prot->inuse_idx], val);
    2693                 :     980614 : }
    2694                 :            : EXPORT_SYMBOL_GPL(sock_prot_inuse_add);
    2695                 :            : 
    2696                 :          0 : int sock_prot_inuse_get(struct net *net, struct proto *prot)
    2697                 :            : {
    2698                 :         22 :         int cpu, idx = prot->inuse_idx;
    2699                 :            :         int res = 0;
    2700                 :            : 
    2701         [ +  + ]:        154 :         for_each_possible_cpu(cpu)
    2702                 :        110 :                 res += per_cpu(prot_inuse, cpu).val[idx];
    2703                 :            : 
    2704                 :         22 :         return res >= 0 ? res : 0;
    2705                 :            : }
    2706                 :            : EXPORT_SYMBOL_GPL(sock_prot_inuse_get);
    2707                 :            : #endif
    2708                 :            : 
    2709                 :          0 : static void assign_proto_idx(struct proto *prot)
    2710                 :            : {
    2711                 :          0 :         prot->inuse_idx = find_first_zero_bit(proto_inuse_idx, PROTO_INUSE_NR);
    2712                 :            : 
    2713         [ #  # ]:          0 :         if (unlikely(prot->inuse_idx == PROTO_INUSE_NR - 1)) {
    2714                 :          0 :                 pr_err("PROTO_INUSE_NR exhausted\n");
    2715                 :          0 :                 return;
    2716                 :            :         }
    2717                 :            : 
    2718                 :          0 :         set_bit(prot->inuse_idx, proto_inuse_idx);
    2719                 :            : }
    2720                 :            : 
    2721                 :            : static void release_proto_idx(struct proto *prot)
    2722                 :            : {
    2723         [ #  # ]:          0 :         if (prot->inuse_idx != PROTO_INUSE_NR - 1)
    2724                 :          0 :                 clear_bit(prot->inuse_idx, proto_inuse_idx);
    2725                 :            : }
    2726                 :            : #else
    2727                 :            : static inline void assign_proto_idx(struct proto *prot)
    2728                 :            : {
    2729                 :            : }
    2730                 :            : 
    2731                 :            : static inline void release_proto_idx(struct proto *prot)
    2732                 :            : {
    2733                 :            : }
    2734                 :            : #endif
    2735                 :            : 
    2736                 :          0 : int proto_register(struct proto *prot, int alloc_slab)
    2737                 :            : {
    2738         [ #  # ]:          0 :         if (alloc_slab) {
    2739                 :          0 :                 prot->slab = kmem_cache_create(prot->name, prot->obj_size, 0,
    2740                 :          0 :                                         SLAB_HWCACHE_ALIGN | prot->slab_flags,
    2741                 :            :                                         NULL);
    2742                 :            : 
    2743         [ #  # ]:          0 :                 if (prot->slab == NULL) {
    2744                 :          0 :                         pr_crit("%s: Can't create sock SLAB cache!\n",
    2745                 :            :                                 prot->name);
    2746                 :          0 :                         goto out;
    2747                 :            :                 }
    2748                 :            : 
    2749         [ #  # ]:          0 :                 if (prot->rsk_prot != NULL) {
    2750                 :          0 :                         prot->rsk_prot->slab_name = kasprintf(GFP_KERNEL, "request_sock_%s", prot->name);
    2751         [ #  # ]:          0 :                         if (prot->rsk_prot->slab_name == NULL)
    2752                 :            :                                 goto out_free_sock_slab;
    2753                 :            : 
    2754                 :          0 :                         prot->rsk_prot->slab = kmem_cache_create(prot->rsk_prot->slab_name,
    2755                 :          0 :                                                                  prot->rsk_prot->obj_size, 0,
    2756                 :            :                                                                  SLAB_HWCACHE_ALIGN, NULL);
    2757                 :            : 
    2758         [ #  # ]:          0 :                         if (prot->rsk_prot->slab == NULL) {
    2759                 :          0 :                                 pr_crit("%s: Can't create request sock SLAB cache!\n",
    2760                 :            :                                         prot->name);
    2761                 :          0 :                                 goto out_free_request_sock_slab_name;
    2762                 :            :                         }
    2763                 :            :                 }
    2764                 :            : 
    2765         [ #  # ]:          0 :                 if (prot->twsk_prot != NULL) {
    2766                 :          0 :                         prot->twsk_prot->twsk_slab_name = kasprintf(GFP_KERNEL, "tw_sock_%s", prot->name);
    2767                 :            : 
    2768         [ #  # ]:          0 :                         if (prot->twsk_prot->twsk_slab_name == NULL)
    2769                 :            :                                 goto out_free_request_sock_slab;
    2770                 :            : 
    2771                 :          0 :                         prot->twsk_prot->twsk_slab =
    2772                 :          0 :                                 kmem_cache_create(prot->twsk_prot->twsk_slab_name,
    2773                 :            :                                                   prot->twsk_prot->twsk_obj_size,
    2774                 :            :                                                   0,
    2775                 :            :                                                   SLAB_HWCACHE_ALIGN |
    2776                 :          0 :                                                         prot->slab_flags,
    2777                 :            :                                                   NULL);
    2778         [ #  # ]:          0 :                         if (prot->twsk_prot->twsk_slab == NULL)
    2779                 :            :                                 goto out_free_timewait_sock_slab_name;
    2780                 :            :                 }
    2781                 :            :         }
    2782                 :            : 
    2783                 :          0 :         mutex_lock(&proto_list_mutex);
    2784                 :          0 :         list_add(&prot->node, &proto_list);
    2785                 :          0 :         assign_proto_idx(prot);
    2786                 :          0 :         mutex_unlock(&proto_list_mutex);
    2787                 :          0 :         return 0;
    2788                 :            : 
    2789                 :            : out_free_timewait_sock_slab_name:
    2790                 :          0 :         kfree(prot->twsk_prot->twsk_slab_name);
    2791                 :            : out_free_request_sock_slab:
    2792 [ #  # ][ #  # ]:          0 :         if (prot->rsk_prot && prot->rsk_prot->slab) {
    2793                 :          0 :                 kmem_cache_destroy(prot->rsk_prot->slab);
    2794                 :          0 :                 prot->rsk_prot->slab = NULL;
    2795                 :            :         }
    2796                 :            : out_free_request_sock_slab_name:
    2797         [ #  # ]:          0 :         if (prot->rsk_prot)
    2798                 :          0 :                 kfree(prot->rsk_prot->slab_name);
    2799                 :            : out_free_sock_slab:
    2800                 :          0 :         kmem_cache_destroy(prot->slab);
    2801                 :          0 :         prot->slab = NULL;
    2802                 :            : out:
    2803                 :            :         return -ENOBUFS;
    2804                 :            : }
    2805                 :            : EXPORT_SYMBOL(proto_register);
    2806                 :            : 
    2807                 :          0 : void proto_unregister(struct proto *prot)
    2808                 :            : {
    2809                 :          0 :         mutex_lock(&proto_list_mutex);
    2810                 :            :         release_proto_idx(prot);
    2811                 :            :         list_del(&prot->node);
    2812                 :          0 :         mutex_unlock(&proto_list_mutex);
    2813                 :            : 
    2814         [ #  # ]:          0 :         if (prot->slab != NULL) {
    2815                 :          0 :                 kmem_cache_destroy(prot->slab);
    2816                 :          0 :                 prot->slab = NULL;
    2817                 :            :         }
    2818                 :            : 
    2819 [ #  # ][ #  # ]:          0 :         if (prot->rsk_prot != NULL && prot->rsk_prot->slab != NULL) {
    2820                 :          0 :                 kmem_cache_destroy(prot->rsk_prot->slab);
    2821                 :          0 :                 kfree(prot->rsk_prot->slab_name);
    2822                 :          0 :                 prot->rsk_prot->slab = NULL;
    2823                 :            :         }
    2824                 :            : 
    2825 [ #  # ][ #  # ]:          0 :         if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) {
    2826                 :          0 :                 kmem_cache_destroy(prot->twsk_prot->twsk_slab);
    2827                 :          0 :                 kfree(prot->twsk_prot->twsk_slab_name);
    2828                 :          0 :                 prot->twsk_prot->twsk_slab = NULL;
    2829                 :            :         }
    2830                 :          0 : }
    2831                 :            : EXPORT_SYMBOL(proto_unregister);
    2832                 :            : 
    2833                 :            : #ifdef CONFIG_PROC_FS
    2834                 :          0 : static void *proto_seq_start(struct seq_file *seq, loff_t *pos)
    2835                 :            :         __acquires(proto_list_mutex)
    2836                 :            : {
    2837                 :          3 :         mutex_lock(&proto_list_mutex);
    2838                 :          3 :         return seq_list_start_head(&proto_list, *pos);
    2839                 :            : }
    2840                 :            : 
    2841                 :          0 : static void *proto_seq_next(struct seq_file *seq, void *v, loff_t *pos)
    2842                 :            : {
    2843                 :         14 :         return seq_list_next(v, &proto_list, pos);
    2844                 :            : }
    2845                 :            : 
    2846                 :          0 : static void proto_seq_stop(struct seq_file *seq, void *v)
    2847                 :            :         __releases(proto_list_mutex)
    2848                 :            : {
    2849                 :          3 :         mutex_unlock(&proto_list_mutex);
    2850                 :          3 : }
    2851                 :            : 
    2852                 :            : static char proto_method_implemented(const void *method)
    2853                 :            : {
    2854 [ +  + ][ +  + ]:         14 :         return method == NULL ? 'n' : 'y';
         [ +  + ][ +  + ]
         [ +  + ][ +  + ]
         [ +  + ][ +  + ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    2855                 :            : }
    2856                 :            : static long sock_prot_memory_allocated(struct proto *proto)
    2857                 :            : {
    2858         [ +  + ]:         14 :         return proto->memory_allocated != NULL ? proto_memory_allocated(proto) : -1L;
    2859                 :            : }
    2860                 :            : 
    2861                 :            : static char *sock_prot_memory_pressure(struct proto *proto)
    2862                 :            : {
    2863                 :            :         return proto->memory_pressure != NULL ?
    2864 [ +  + ][ +  - ]:         16 :         proto_memory_pressure(proto) ? "yes" : "no" : "NI";
    2865                 :            : }
    2866                 :            : 
    2867                 :          0 : static void proto_seq_printf(struct seq_file *seq, struct proto *proto)
    2868                 :            : {
    2869                 :            : 
    2870         [ +  + ]:         28 :         seq_printf(seq, "%-9s %4u %6d  %6ld   %-3s %6u   %-3s  %-10s "
    2871                 :            :                         "%2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c\n",
    2872                 :         14 :                    proto->name,
    2873                 :            :                    proto->obj_size,
    2874                 :            :                    sock_prot_inuse_get(seq_file_net(seq), proto),
    2875                 :            :                    sock_prot_memory_allocated(proto),
    2876                 :            :                    sock_prot_memory_pressure(proto),
    2877                 :            :                    proto->max_header,
    2878                 :         14 :                    proto->slab == NULL ? "no" : "yes",
    2879         [ -  + ]:         14 :                    module_name(proto->owner),
    2880                 :         14 :                    proto_method_implemented(proto->close),
    2881                 :         14 :                    proto_method_implemented(proto->connect),
    2882                 :         14 :                    proto_method_implemented(proto->disconnect),
    2883                 :         14 :                    proto_method_implemented(proto->accept),
    2884                 :         14 :                    proto_method_implemented(proto->ioctl),
    2885                 :         14 :                    proto_method_implemented(proto->init),
    2886                 :         14 :                    proto_method_implemented(proto->destroy),
    2887                 :         14 :                    proto_method_implemented(proto->shutdown),
    2888                 :          0 :                    proto_method_implemented(proto->setsockopt),
    2889                 :          0 :                    proto_method_implemented(proto->getsockopt),
    2890                 :          0 :                    proto_method_implemented(proto->sendmsg),
    2891                 :          0 :                    proto_method_implemented(proto->recvmsg),
    2892                 :          0 :                    proto_method_implemented(proto->sendpage),
    2893                 :          0 :                    proto_method_implemented(proto->bind),
    2894                 :          0 :                    proto_method_implemented(proto->backlog_rcv),
    2895                 :          0 :                    proto_method_implemented(proto->hash),
    2896                 :          0 :                    proto_method_implemented(proto->unhash),
    2897                 :          0 :                    proto_method_implemented(proto->get_port),
    2898                 :          0 :                    proto_method_implemented(proto->enter_memory_pressure));
    2899                 :         14 : }
    2900                 :            : 
    2901                 :          0 : static int proto_seq_show(struct seq_file *seq, void *v)
    2902                 :            : {
    2903         [ +  + ]:         15 :         if (v == &proto_list)
    2904                 :          1 :                 seq_printf(seq, "%-9s %-4s %-8s %-6s %-5s %-7s %-4s %-10s %s",
    2905                 :            :                            "protocol",
    2906                 :            :                            "size",
    2907                 :            :                            "sockets",
    2908                 :            :                            "memory",
    2909                 :            :                            "press",
    2910                 :            :                            "maxhdr",
    2911                 :            :                            "slab",
    2912                 :            :                            "module",
    2913                 :            :                            "cl co di ac io in de sh ss gs se re sp bi br ha uh gp em\n");
    2914                 :            :         else
    2915                 :         14 :                 proto_seq_printf(seq, list_entry(v, struct proto, node));
    2916                 :         15 :         return 0;
    2917                 :            : }
    2918                 :            : 
    2919                 :            : static const struct seq_operations proto_seq_ops = {
    2920                 :            :         .start  = proto_seq_start,
    2921                 :            :         .next   = proto_seq_next,
    2922                 :            :         .stop   = proto_seq_stop,
    2923                 :            :         .show   = proto_seq_show,
    2924                 :            : };
    2925                 :            : 
    2926                 :          0 : static int proto_seq_open(struct inode *inode, struct file *file)
    2927                 :            : {
    2928                 :          1 :         return seq_open_net(inode, file, &proto_seq_ops,
    2929                 :            :                             sizeof(struct seq_net_private));
    2930                 :            : }
    2931                 :            : 
    2932                 :            : static const struct file_operations proto_seq_fops = {
    2933                 :            :         .owner          = THIS_MODULE,
    2934                 :            :         .open           = proto_seq_open,
    2935                 :            :         .read           = seq_read,
    2936                 :            :         .llseek         = seq_lseek,
    2937                 :            :         .release        = seq_release_net,
    2938                 :            : };
    2939                 :            : 
    2940                 :          0 : static __net_init int proto_init_net(struct net *net)
    2941                 :            : {
    2942         [ #  # ]:          0 :         if (!proc_create("protocols", S_IRUGO, net->proc_net, &proto_seq_fops))
    2943                 :            :                 return -ENOMEM;
    2944                 :            : 
    2945                 :          0 :         return 0;
    2946                 :            : }
    2947                 :            : 
    2948                 :          0 : static __net_exit void proto_exit_net(struct net *net)
    2949                 :            : {
    2950                 :          0 :         remove_proc_entry("protocols", net->proc_net);
    2951                 :          0 : }
    2952                 :            : 
    2953                 :            : 
    2954                 :            : static __net_initdata struct pernet_operations proto_net_ops = {
    2955                 :            :         .init = proto_init_net,
    2956                 :            :         .exit = proto_exit_net,
    2957                 :            : };
    2958                 :            : 
    2959                 :          0 : static int __init proto_init(void)
    2960                 :            : {
    2961                 :          0 :         return register_pernet_subsys(&proto_net_ops);
    2962                 :            : }
    2963                 :            : 
    2964                 :            : subsys_initcall(proto_init);
    2965                 :            : 
    2966                 :            : #endif /* PROC_FS */

Generated by: LCOV version 1.9