LCOV - code coverage report
Current view: top level - net/ipv4 - sysctl_net_ipv4.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 51 108 47.2 %
Date: 2014-04-16 Functions: 7 12 58.3 %
Branches: 11 48 22.9 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * sysctl_net_ipv4.c: sysctl interface to net IPV4 subsystem.
       3                 :            :  *
       4                 :            :  * Begun April 1, 1996, Mike Shaver.
       5                 :            :  * Added /proc/sys/net/ipv4 directory entry (empty =) ). [MS]
       6                 :            :  */
       7                 :            : 
       8                 :            : #include <linux/mm.h>
       9                 :            : #include <linux/module.h>
      10                 :            : #include <linux/sysctl.h>
      11                 :            : #include <linux/igmp.h>
      12                 :            : #include <linux/inetdevice.h>
      13                 :            : #include <linux/seqlock.h>
      14                 :            : #include <linux/init.h>
      15                 :            : #include <linux/slab.h>
      16                 :            : #include <linux/nsproxy.h>
      17                 :            : #include <linux/swap.h>
      18                 :            : #include <net/snmp.h>
      19                 :            : #include <net/icmp.h>
      20                 :            : #include <net/ip.h>
      21                 :            : #include <net/route.h>
      22                 :            : #include <net/tcp.h>
      23                 :            : #include <net/udp.h>
      24                 :            : #include <net/cipso_ipv4.h>
      25                 :            : #include <net/inet_frag.h>
      26                 :            : #include <net/ping.h>
      27                 :            : #include <net/tcp_memcontrol.h>
      28                 :            : 
      29                 :            : static int zero;
      30                 :            : static int one = 1;
      31                 :            : static int four = 4;
      32                 :            : static int gso_max_segs = GSO_MAX_SEGS;
      33                 :            : static int tcp_retr1_max = 255;
      34                 :            : static int ip_local_port_range_min[] = { 1, 1 };
      35                 :            : static int ip_local_port_range_max[] = { 65535, 65535 };
      36                 :            : static int tcp_adv_win_scale_min = -31;
      37                 :            : static int tcp_adv_win_scale_max = 31;
      38                 :            : static int ip_ttl_min = 1;
      39                 :            : static int ip_ttl_max = 255;
      40                 :            : static int tcp_syn_retries_min = 1;
      41                 :            : static int tcp_syn_retries_max = MAX_TCP_SYNCNT;
      42                 :            : static int ip_ping_group_range_min[] = { 0, 0 };
      43                 :            : static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX };
      44                 :            : 
      45                 :            : /* Update system visible IP port range */
      46                 :          0 : static void set_local_port_range(struct net *net, int range[2])
      47                 :            : {
      48                 :            :         write_seqlock(&net->ipv4.sysctl_local_ports.lock);
      49                 :          0 :         net->ipv4.sysctl_local_ports.range[0] = range[0];
      50                 :          0 :         net->ipv4.sysctl_local_ports.range[1] = range[1];
      51                 :            :         write_sequnlock(&net->ipv4.sysctl_local_ports.lock);
      52                 :          0 : }
      53                 :            : 
      54                 :            : /* Validate changes from /proc interface. */
      55                 :          0 : static int ipv4_local_port_range(struct ctl_table *table, int write,
      56                 :            :                                  void __user *buffer,
      57                 :            :                                  size_t *lenp, loff_t *ppos)
      58                 :            : {
      59                 :          2 :         struct net *net =
      60                 :          2 :                 container_of(table->data, struct net, ipv4.sysctl_local_ports.range);
      61                 :            :         int ret;
      62                 :            :         int range[2];
      63                 :          4 :         struct ctl_table tmp = {
      64                 :            :                 .data = &range,
      65                 :            :                 .maxlen = sizeof(range),
      66                 :          2 :                 .mode = table->mode,
      67                 :            :                 .extra1 = &ip_local_port_range_min,
      68                 :            :                 .extra2 = &ip_local_port_range_max,
      69                 :            :         };
      70                 :            : 
      71                 :          2 :         inet_get_local_port_range(net, &range[0], &range[1]);
      72                 :            : 
      73                 :          2 :         ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
      74                 :            : 
      75         [ -  + ]:          2 :         if (write && ret == 0) {
      76         [ #  # ]:          0 :                 if (range[1] < range[0])
      77                 :            :                         ret = -EINVAL;
      78                 :            :                 else
      79                 :          0 :                         set_local_port_range(net, range);
      80                 :            :         }
      81                 :            : 
      82                 :          0 :         return ret;
      83                 :            : }
      84                 :            : 
      85                 :            : 
      86                 :            : static void inet_get_ping_group_range_table(struct ctl_table *table, kgid_t *low, kgid_t *high)
      87                 :            : {
      88                 :            :         kgid_t *data = table->data;
      89                 :            :         struct net *net =
      90                 :            :                 container_of(table->data, struct net, ipv4.sysctl_ping_group_range);
      91                 :            :         unsigned int seq;
      92                 :            :         do {
      93                 :            :                 seq = read_seqbegin(&net->ipv4.sysctl_local_ports.lock);
      94                 :            : 
      95                 :          2 :                 *low = data[0];
      96                 :          2 :                 *high = data[1];
      97         [ -  + ]:          2 :         } while (read_seqretry(&net->ipv4.sysctl_local_ports.lock, seq));
      98                 :            : }
      99                 :            : 
     100                 :            : /* Update system visible IP port range */
     101                 :          0 : static void set_ping_group_range(struct ctl_table *table, kgid_t low, kgid_t high)
     102                 :            : {
     103                 :          0 :         kgid_t *data = table->data;
     104                 :            :         struct net *net =
     105                 :            :                 container_of(table->data, struct net, ipv4.sysctl_ping_group_range);
     106                 :            :         write_seqlock(&net->ipv4.sysctl_local_ports.lock);
     107                 :          0 :         data[0] = low;
     108                 :          0 :         data[1] = high;
     109                 :            :         write_sequnlock(&net->ipv4.sysctl_local_ports.lock);
     110                 :          0 : }
     111                 :            : 
     112                 :            : /* Validate changes from /proc interface. */
     113                 :          2 : static int ipv4_ping_group_range(struct ctl_table *table, int write,
     114                 :            :                                  void __user *buffer,
     115                 :            :                                  size_t *lenp, loff_t *ppos)
     116                 :            : {
     117                 :            :         struct user_namespace *user_ns = current_user_ns();
     118                 :            :         int ret;
     119                 :            :         gid_t urange[2];
     120                 :            :         kgid_t low, high;
     121                 :          4 :         struct ctl_table tmp = {
     122                 :            :                 .data = &urange,
     123                 :            :                 .maxlen = sizeof(urange),
     124                 :          2 :                 .mode = table->mode,
     125                 :            :                 .extra1 = &ip_ping_group_range_min,
     126                 :            :                 .extra2 = &ip_ping_group_range_max,
     127                 :            :         };
     128                 :            : 
     129                 :            :         inet_get_ping_group_range_table(table, &low, &high);
     130                 :          2 :         urange[0] = from_kgid_munged(user_ns, low);
     131                 :          0 :         urange[1] = from_kgid_munged(user_ns, high);
     132                 :          2 :         ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
     133                 :            : 
     134         [ -  + ]:          2 :         if (write && ret == 0) {
     135                 :          0 :                 low = make_kgid(user_ns, urange[0]);
     136                 :          0 :                 high = make_kgid(user_ns, urange[1]);
     137 [ #  # ][ #  # ]:          0 :                 if (!gid_valid(low) || !gid_valid(high) ||
                 [ #  # ]
     138         [ #  # ]:          0 :                     (urange[1] < urange[0]) || gid_lt(high, low)) {
     139                 :            :                         low = make_kgid(&init_user_ns, 1);
     140                 :            :                         high = make_kgid(&init_user_ns, 0);
     141                 :            :                 }
     142                 :          0 :                 set_ping_group_range(table, low, high);
     143                 :            :         }
     144                 :            : 
     145                 :          2 :         return ret;
     146                 :            : }
     147                 :            : 
     148                 :            : /* Validate changes from /proc interface. */
     149                 :          0 : static int proc_tcp_default_init_rwnd(ctl_table *ctl, int write,
     150                 :            :                                       void __user *buffer,
     151                 :            :                                       size_t *lenp, loff_t *ppos)
     152                 :            : {
     153                 :          2 :         int old_value = *(int *)ctl->data;
     154                 :          2 :         int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
     155                 :          2 :         int new_value = *(int *)ctl->data;
     156                 :            : 
     157 [ -  + ][ #  # ]:          2 :         if (write && ret == 0 && (new_value < 3 || new_value > 100))
     158                 :          0 :                 *(int *)ctl->data = old_value;
     159                 :            : 
     160                 :          0 :         return ret;
     161                 :            : }
     162                 :            : 
     163                 :          0 : static int proc_tcp_congestion_control(struct ctl_table *ctl, int write,
     164                 :            :                                        void __user *buffer, size_t *lenp, loff_t *ppos)
     165                 :            : {
     166                 :            :         char val[TCP_CA_NAME_MAX];
     167                 :          2 :         struct ctl_table tbl = {
     168                 :            :                 .data = val,
     169                 :            :                 .maxlen = TCP_CA_NAME_MAX,
     170                 :            :         };
     171                 :            :         int ret;
     172                 :            : 
     173                 :          2 :         tcp_get_default_congestion_control(val);
     174                 :            : 
     175                 :          2 :         ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
     176         [ -  + ]:          2 :         if (write && ret == 0)
     177                 :          0 :                 ret = tcp_set_default_congestion_control(val);
     178                 :          0 :         return ret;
     179                 :            : }
     180                 :            : 
     181                 :          0 : static int proc_tcp_available_congestion_control(struct ctl_table *ctl,
     182                 :            :                                                  int write,
     183                 :            :                                                  void __user *buffer, size_t *lenp,
     184                 :            :                                                  loff_t *ppos)
     185                 :            : {
     186                 :          2 :         struct ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX, };
     187                 :            :         int ret;
     188                 :            : 
     189                 :          2 :         tbl.data = kmalloc(tbl.maxlen, GFP_USER);
     190         [ +  - ]:          2 :         if (!tbl.data)
     191                 :            :                 return -ENOMEM;
     192                 :          2 :         tcp_get_available_congestion_control(tbl.data, TCP_CA_BUF_MAX);
     193                 :          2 :         ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
     194                 :          2 :         kfree(tbl.data);
     195                 :          2 :         return ret;
     196                 :            : }
     197                 :            : 
     198                 :          0 : static int proc_allowed_congestion_control(struct ctl_table *ctl,
     199                 :            :                                            int write,
     200                 :            :                                            void __user *buffer, size_t *lenp,
     201                 :            :                                            loff_t *ppos)
     202                 :            : {
     203                 :          2 :         struct ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX };
     204                 :            :         int ret;
     205                 :            : 
     206                 :          2 :         tbl.data = kmalloc(tbl.maxlen, GFP_USER);
     207         [ +  - ]:          2 :         if (!tbl.data)
     208                 :            :                 return -ENOMEM;
     209                 :            : 
     210                 :          2 :         tcp_get_allowed_congestion_control(tbl.data, tbl.maxlen);
     211                 :          2 :         ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
     212         [ -  + ]:          2 :         if (write && ret == 0)
     213                 :          0 :                 ret = tcp_set_allowed_congestion_control(tbl.data);
     214                 :          2 :         kfree(tbl.data);
     215                 :          2 :         return ret;
     216                 :            : }
     217                 :            : 
     218                 :          0 : static int proc_tcp_fastopen_key(struct ctl_table *ctl, int write,
     219                 :            :                                  void __user *buffer, size_t *lenp,
     220                 :            :                                  loff_t *ppos)
     221                 :            : {
     222                 :          2 :         struct ctl_table tbl = { .maxlen = (TCP_FASTOPEN_KEY_LENGTH * 2 + 10) };
     223                 :            :         struct tcp_fastopen_context *ctxt;
     224                 :            :         int ret;
     225                 :            :         u32  user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */
     226                 :            : 
     227                 :          2 :         tbl.data = kmalloc(tbl.maxlen, GFP_KERNEL);
     228         [ +  - ]:          2 :         if (!tbl.data)
     229                 :            :                 return -ENOMEM;
     230                 :            : 
     231                 :            :         rcu_read_lock();
     232                 :          2 :         ctxt = rcu_dereference(tcp_fastopen_ctx);
     233         [ -  + ]:          2 :         if (ctxt)
     234                 :          0 :                 memcpy(user_key, ctxt->key, TCP_FASTOPEN_KEY_LENGTH);
     235                 :            :         else
     236                 :          2 :                 memset(user_key, 0, sizeof(user_key));
     237                 :            :         rcu_read_unlock();
     238                 :            : 
     239                 :          2 :         snprintf(tbl.data, tbl.maxlen, "%08x-%08x-%08x-%08x",
     240                 :            :                 user_key[0], user_key[1], user_key[2], user_key[3]);
     241                 :          2 :         ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
     242                 :            : 
     243         [ -  + ]:          2 :         if (write && ret == 0) {
     244         [ #  # ]:          0 :                 if (sscanf(tbl.data, "%x-%x-%x-%x", user_key, user_key + 1,
     245                 :            :                            user_key + 2, user_key + 3) != 4) {
     246                 :            :                         ret = -EINVAL;
     247                 :            :                         goto bad_key;
     248                 :            :                 }
     249                 :            :                 /* Generate a dummy secret but don't publish it. This
     250                 :            :                  * is needed so we don't regenerate a new key on the
     251                 :            :                  * first invocation of tcp_fastopen_cookie_gen
     252                 :            :                  */
     253                 :          0 :                 tcp_fastopen_init_key_once(false);
     254                 :          0 :                 tcp_fastopen_reset_cipher(user_key, TCP_FASTOPEN_KEY_LENGTH);
     255                 :            :         }
     256                 :            : 
     257                 :            : bad_key:
     258                 :            :         pr_debug("proc FO key set 0x%x-%x-%x-%x <- 0x%s: %u\n",
     259                 :            :                user_key[0], user_key[1], user_key[2], user_key[3],
     260                 :            :                (char *)tbl.data, ret);
     261                 :          2 :         kfree(tbl.data);
     262                 :          2 :         return ret;
     263                 :            : }
     264                 :            : 
     265                 :            : static struct ctl_table ipv4_table[] = {
     266                 :            :         {
     267                 :            :                 .procname       = "tcp_timestamps",
     268                 :            :                 .data           = &sysctl_tcp_timestamps,
     269                 :            :                 .maxlen         = sizeof(int),
     270                 :            :                 .mode           = 0644,
     271                 :            :                 .proc_handler   = proc_dointvec
     272                 :            :         },
     273                 :            :         {
     274                 :            :                 .procname       = "tcp_window_scaling",
     275                 :            :                 .data           = &sysctl_tcp_window_scaling,
     276                 :            :                 .maxlen         = sizeof(int),
     277                 :            :                 .mode           = 0644,
     278                 :            :                 .proc_handler   = proc_dointvec
     279                 :            :         },
     280                 :            :         {
     281                 :            :                 .procname       = "tcp_sack",
     282                 :            :                 .data           = &sysctl_tcp_sack,
     283                 :            :                 .maxlen         = sizeof(int),
     284                 :            :                 .mode           = 0644,
     285                 :            :                 .proc_handler   = proc_dointvec
     286                 :            :         },
     287                 :            :         {
     288                 :            :                 .procname       = "tcp_retrans_collapse",
     289                 :            :                 .data           = &sysctl_tcp_retrans_collapse,
     290                 :            :                 .maxlen         = sizeof(int),
     291                 :            :                 .mode           = 0644,
     292                 :            :                 .proc_handler   = proc_dointvec
     293                 :            :         },
     294                 :            :         {
     295                 :            :                 .procname       = "ip_default_ttl",
     296                 :            :                 .data           = &sysctl_ip_default_ttl,
     297                 :            :                 .maxlen         = sizeof(int),
     298                 :            :                 .mode           = 0644,
     299                 :            :                 .proc_handler   = proc_dointvec_minmax,
     300                 :            :                 .extra1         = &ip_ttl_min,
     301                 :            :                 .extra2         = &ip_ttl_max,
     302                 :            :         },
     303                 :            :         {
     304                 :            :                 .procname       = "ip_nonlocal_bind",
     305                 :            :                 .data           = &sysctl_ip_nonlocal_bind,
     306                 :            :                 .maxlen         = sizeof(int),
     307                 :            :                 .mode           = 0644,
     308                 :            :                 .proc_handler   = proc_dointvec
     309                 :            :         },
     310                 :            :         {
     311                 :            :                 .procname       = "tcp_syn_retries",
     312                 :            :                 .data           = &sysctl_tcp_syn_retries,
     313                 :            :                 .maxlen         = sizeof(int),
     314                 :            :                 .mode           = 0644,
     315                 :            :                 .proc_handler   = proc_dointvec_minmax,
     316                 :            :                 .extra1         = &tcp_syn_retries_min,
     317                 :            :                 .extra2         = &tcp_syn_retries_max
     318                 :            :         },
     319                 :            :         {
     320                 :            :                 .procname       = "tcp_synack_retries",
     321                 :            :                 .data           = &sysctl_tcp_synack_retries,
     322                 :            :                 .maxlen         = sizeof(int),
     323                 :            :                 .mode           = 0644,
     324                 :            :                 .proc_handler   = proc_dointvec
     325                 :            :         },
     326                 :            :         {
     327                 :            :                 .procname       = "tcp_max_orphans",
     328                 :            :                 .data           = &sysctl_tcp_max_orphans,
     329                 :            :                 .maxlen         = sizeof(int),
     330                 :            :                 .mode           = 0644,
     331                 :            :                 .proc_handler   = proc_dointvec
     332                 :            :         },
     333                 :            :         {
     334                 :            :                 .procname       = "tcp_max_tw_buckets",
     335                 :            :                 .data           = &tcp_death_row.sysctl_max_tw_buckets,
     336                 :            :                 .maxlen         = sizeof(int),
     337                 :            :                 .mode           = 0644,
     338                 :            :                 .proc_handler   = proc_dointvec
     339                 :            :         },
     340                 :            :         {
     341                 :            :                 .procname       = "ip_early_demux",
     342                 :            :                 .data           = &sysctl_ip_early_demux,
     343                 :            :                 .maxlen         = sizeof(int),
     344                 :            :                 .mode           = 0644,
     345                 :            :                 .proc_handler   = proc_dointvec
     346                 :            :         },
     347                 :            :         {
     348                 :            :                 .procname       = "ip_dynaddr",
     349                 :            :                 .data           = &sysctl_ip_dynaddr,
     350                 :            :                 .maxlen         = sizeof(int),
     351                 :            :                 .mode           = 0644,
     352                 :            :                 .proc_handler   = proc_dointvec
     353                 :            :         },
     354                 :            :         {
     355                 :            :                 .procname       = "tcp_keepalive_time",
     356                 :            :                 .data           = &sysctl_tcp_keepalive_time,
     357                 :            :                 .maxlen         = sizeof(int),
     358                 :            :                 .mode           = 0644,
     359                 :            :                 .proc_handler   = proc_dointvec_jiffies,
     360                 :            :         },
     361                 :            :         {
     362                 :            :                 .procname       = "tcp_keepalive_probes",
     363                 :            :                 .data           = &sysctl_tcp_keepalive_probes,
     364                 :            :                 .maxlen         = sizeof(int),
     365                 :            :                 .mode           = 0644,
     366                 :            :                 .proc_handler   = proc_dointvec
     367                 :            :         },
     368                 :            :         {
     369                 :            :                 .procname       = "tcp_keepalive_intvl",
     370                 :            :                 .data           = &sysctl_tcp_keepalive_intvl,
     371                 :            :                 .maxlen         = sizeof(int),
     372                 :            :                 .mode           = 0644,
     373                 :            :                 .proc_handler   = proc_dointvec_jiffies,
     374                 :            :         },
     375                 :            :         {
     376                 :            :                 .procname       = "tcp_retries1",
     377                 :            :                 .data           = &sysctl_tcp_retries1,
     378                 :            :                 .maxlen         = sizeof(int),
     379                 :            :                 .mode           = 0644,
     380                 :            :                 .proc_handler   = proc_dointvec_minmax,
     381                 :            :                 .extra2         = &tcp_retr1_max
     382                 :            :         },
     383                 :            :         {
     384                 :            :                 .procname       = "tcp_retries2",
     385                 :            :                 .data           = &sysctl_tcp_retries2,
     386                 :            :                 .maxlen         = sizeof(int),
     387                 :            :                 .mode           = 0644,
     388                 :            :                 .proc_handler   = proc_dointvec
     389                 :            :         },
     390                 :            :         {
     391                 :            :                 .procname       = "tcp_fin_timeout",
     392                 :            :                 .data           = &sysctl_tcp_fin_timeout,
     393                 :            :                 .maxlen         = sizeof(int),
     394                 :            :                 .mode           = 0644,
     395                 :            :                 .proc_handler   = proc_dointvec_jiffies,
     396                 :            :         },
     397                 :            : #ifdef CONFIG_SYN_COOKIES
     398                 :            :         {
     399                 :            :                 .procname       = "tcp_syncookies",
     400                 :            :                 .data           = &sysctl_tcp_syncookies,
     401                 :            :                 .maxlen         = sizeof(int),
     402                 :            :                 .mode           = 0644,
     403                 :            :                 .proc_handler   = proc_dointvec
     404                 :            :         },
     405                 :            : #endif
     406                 :            :         {
     407                 :            :                 .procname       = "tcp_fastopen",
     408                 :            :                 .data           = &sysctl_tcp_fastopen,
     409                 :            :                 .maxlen         = sizeof(int),
     410                 :            :                 .mode           = 0644,
     411                 :            :                 .proc_handler   = proc_dointvec,
     412                 :            :         },
     413                 :            :         {
     414                 :            :                 .procname       = "tcp_fastopen_key",
     415                 :            :                 .mode           = 0600,
     416                 :            :                 .maxlen         = ((TCP_FASTOPEN_KEY_LENGTH * 2) + 10),
     417                 :            :                 .proc_handler   = proc_tcp_fastopen_key,
     418                 :            :         },
     419                 :            :         {
     420                 :            :                 .procname       = "tcp_tw_recycle",
     421                 :            :                 .data           = &tcp_death_row.sysctl_tw_recycle,
     422                 :            :                 .maxlen         = sizeof(int),
     423                 :            :                 .mode           = 0644,
     424                 :            :                 .proc_handler   = proc_dointvec
     425                 :            :         },
     426                 :            :         {
     427                 :            :                 .procname       = "tcp_abort_on_overflow",
     428                 :            :                 .data           = &sysctl_tcp_abort_on_overflow,
     429                 :            :                 .maxlen         = sizeof(int),
     430                 :            :                 .mode           = 0644,
     431                 :            :                 .proc_handler   = proc_dointvec
     432                 :            :         },
     433                 :            :         {
     434                 :            :                 .procname       = "tcp_stdurg",
     435                 :            :                 .data           = &sysctl_tcp_stdurg,
     436                 :            :                 .maxlen         = sizeof(int),
     437                 :            :                 .mode           = 0644,
     438                 :            :                 .proc_handler   = proc_dointvec
     439                 :            :         },
     440                 :            :         {
     441                 :            :                 .procname       = "tcp_rfc1337",
     442                 :            :                 .data           = &sysctl_tcp_rfc1337,
     443                 :            :                 .maxlen         = sizeof(int),
     444                 :            :                 .mode           = 0644,
     445                 :            :                 .proc_handler   = proc_dointvec
     446                 :            :         },
     447                 :            :         {
     448                 :            :                 .procname       = "tcp_max_syn_backlog",
     449                 :            :                 .data           = &sysctl_max_syn_backlog,
     450                 :            :                 .maxlen         = sizeof(int),
     451                 :            :                 .mode           = 0644,
     452                 :            :                 .proc_handler   = proc_dointvec
     453                 :            :         },
     454                 :            :         {
     455                 :            :                 .procname       = "ip_local_reserved_ports",
     456                 :            :                 .data           = NULL, /* initialized in sysctl_ipv4_init */
     457                 :            :                 .maxlen         = 65536,
     458                 :            :                 .mode           = 0644,
     459                 :            :                 .proc_handler   = proc_do_large_bitmap,
     460                 :            :         },
     461                 :            :         {
     462                 :            :                 .procname       = "igmp_max_memberships",
     463                 :            :                 .data           = &sysctl_igmp_max_memberships,
     464                 :            :                 .maxlen         = sizeof(int),
     465                 :            :                 .mode           = 0644,
     466                 :            :                 .proc_handler   = proc_dointvec
     467                 :            :         },
     468                 :            :         {
     469                 :            :                 .procname       = "igmp_max_msf",
     470                 :            :                 .data           = &sysctl_igmp_max_msf,
     471                 :            :                 .maxlen         = sizeof(int),
     472                 :            :                 .mode           = 0644,
     473                 :            :                 .proc_handler   = proc_dointvec
     474                 :            :         },
     475                 :            :         {
     476                 :            :                 .procname       = "inet_peer_threshold",
     477                 :            :                 .data           = &inet_peer_threshold,
     478                 :            :                 .maxlen         = sizeof(int),
     479                 :            :                 .mode           = 0644,
     480                 :            :                 .proc_handler   = proc_dointvec
     481                 :            :         },
     482                 :            :         {
     483                 :            :                 .procname       = "inet_peer_minttl",
     484                 :            :                 .data           = &inet_peer_minttl,
     485                 :            :                 .maxlen         = sizeof(int),
     486                 :            :                 .mode           = 0644,
     487                 :            :                 .proc_handler   = proc_dointvec_jiffies,
     488                 :            :         },
     489                 :            :         {
     490                 :            :                 .procname       = "inet_peer_maxttl",
     491                 :            :                 .data           = &inet_peer_maxttl,
     492                 :            :                 .maxlen         = sizeof(int),
     493                 :            :                 .mode           = 0644,
     494                 :            :                 .proc_handler   = proc_dointvec_jiffies,
     495                 :            :         },
     496                 :            :         {
     497                 :            :                 .procname       = "tcp_orphan_retries",
     498                 :            :                 .data           = &sysctl_tcp_orphan_retries,
     499                 :            :                 .maxlen         = sizeof(int),
     500                 :            :                 .mode           = 0644,
     501                 :            :                 .proc_handler   = proc_dointvec
     502                 :            :         },
     503                 :            :         {
     504                 :            :                 .procname       = "tcp_fack",
     505                 :            :                 .data           = &sysctl_tcp_fack,
     506                 :            :                 .maxlen         = sizeof(int),
     507                 :            :                 .mode           = 0644,
     508                 :            :                 .proc_handler   = proc_dointvec
     509                 :            :         },
     510                 :            :         {
     511                 :            :                 .procname       = "tcp_reordering",
     512                 :            :                 .data           = &sysctl_tcp_reordering,
     513                 :            :                 .maxlen         = sizeof(int),
     514                 :            :                 .mode           = 0644,
     515                 :            :                 .proc_handler   = proc_dointvec
     516                 :            :         },
     517                 :            :         {
     518                 :            :                 .procname       = "tcp_dsack",
     519                 :            :                 .data           = &sysctl_tcp_dsack,
     520                 :            :                 .maxlen         = sizeof(int),
     521                 :            :                 .mode           = 0644,
     522                 :            :                 .proc_handler   = proc_dointvec
     523                 :            :         },
     524                 :            :         {
     525                 :            :                 .procname       = "tcp_mem",
     526                 :            :                 .maxlen         = sizeof(sysctl_tcp_mem),
     527                 :            :                 .data           = &sysctl_tcp_mem,
     528                 :            :                 .mode           = 0644,
     529                 :            :                 .proc_handler   = proc_doulongvec_minmax,
     530                 :            :         },
     531                 :            :         {
     532                 :            :                 .procname       = "tcp_wmem",
     533                 :            :                 .data           = &sysctl_tcp_wmem,
     534                 :            :                 .maxlen         = sizeof(sysctl_tcp_wmem),
     535                 :            :                 .mode           = 0644,
     536                 :            :                 .proc_handler   = proc_dointvec_minmax,
     537                 :            :                 .extra1         = &one,
     538                 :            :         },
     539                 :            :         {
     540                 :            :                 .procname       = "tcp_notsent_lowat",
     541                 :            :                 .data           = &sysctl_tcp_notsent_lowat,
     542                 :            :                 .maxlen         = sizeof(sysctl_tcp_notsent_lowat),
     543                 :            :                 .mode           = 0644,
     544                 :            :                 .proc_handler   = proc_dointvec,
     545                 :            :         },
     546                 :            :         {
     547                 :            :                 .procname       = "tcp_rmem",
     548                 :            :                 .data           = &sysctl_tcp_rmem,
     549                 :            :                 .maxlen         = sizeof(sysctl_tcp_rmem),
     550                 :            :                 .mode           = 0644,
     551                 :            :                 .proc_handler   = proc_dointvec_minmax,
     552                 :            :                 .extra1         = &one,
     553                 :            :         },
     554                 :            :         {
     555                 :            :                 .procname       = "tcp_app_win",
     556                 :            :                 .data           = &sysctl_tcp_app_win,
     557                 :            :                 .maxlen         = sizeof(int),
     558                 :            :                 .mode           = 0644,
     559                 :            :                 .proc_handler   = proc_dointvec
     560                 :            :         },
     561                 :            :         {
     562                 :            :                 .procname       = "tcp_adv_win_scale",
     563                 :            :                 .data           = &sysctl_tcp_adv_win_scale,
     564                 :            :                 .maxlen         = sizeof(int),
     565                 :            :                 .mode           = 0644,
     566                 :            :                 .proc_handler   = proc_dointvec_minmax,
     567                 :            :                 .extra1         = &tcp_adv_win_scale_min,
     568                 :            :                 .extra2         = &tcp_adv_win_scale_max,
     569                 :            :         },
     570                 :            :         {
     571                 :            :                 .procname       = "tcp_tw_reuse",
     572                 :            :                 .data           = &sysctl_tcp_tw_reuse,
     573                 :            :                 .maxlen         = sizeof(int),
     574                 :            :                 .mode           = 0644,
     575                 :            :                 .proc_handler   = proc_dointvec
     576                 :            :         },
     577                 :            :         {
     578                 :            :                 .procname       = "tcp_frto",
     579                 :            :                 .data           = &sysctl_tcp_frto,
     580                 :            :                 .maxlen         = sizeof(int),
     581                 :            :                 .mode           = 0644,
     582                 :            :                 .proc_handler   = proc_dointvec
     583                 :            :         },
     584                 :            :         {
     585                 :            :                 .procname       = "tcp_low_latency",
     586                 :            :                 .data           = &sysctl_tcp_low_latency,
     587                 :            :                 .maxlen         = sizeof(int),
     588                 :            :                 .mode           = 0644,
     589                 :            :                 .proc_handler   = proc_dointvec
     590                 :            :         },
     591                 :            :         {
     592                 :            :                 .procname       = "tcp_no_metrics_save",
     593                 :            :                 .data           = &sysctl_tcp_nometrics_save,
     594                 :            :                 .maxlen         = sizeof(int),
     595                 :            :                 .mode           = 0644,
     596                 :            :                 .proc_handler   = proc_dointvec,
     597                 :            :         },
     598                 :            :         {
     599                 :            :                 .procname       = "tcp_moderate_rcvbuf",
     600                 :            :                 .data           = &sysctl_tcp_moderate_rcvbuf,
     601                 :            :                 .maxlen         = sizeof(int),
     602                 :            :                 .mode           = 0644,
     603                 :            :                 .proc_handler   = proc_dointvec,
     604                 :            :         },
     605                 :            :         {
     606                 :            :                 .procname       = "tcp_tso_win_divisor",
     607                 :            :                 .data           = &sysctl_tcp_tso_win_divisor,
     608                 :            :                 .maxlen         = sizeof(int),
     609                 :            :                 .mode           = 0644,
     610                 :            :                 .proc_handler   = proc_dointvec,
     611                 :            :         },
     612                 :            :         {
     613                 :            :                 .procname       = "tcp_congestion_control",
     614                 :            :                 .mode           = 0644,
     615                 :            :                 .maxlen         = TCP_CA_NAME_MAX,
     616                 :            :                 .proc_handler   = proc_tcp_congestion_control,
     617                 :            :         },
     618                 :            :         {
     619                 :            :                 .procname       = "tcp_mtu_probing",
     620                 :            :                 .data           = &sysctl_tcp_mtu_probing,
     621                 :            :                 .maxlen         = sizeof(int),
     622                 :            :                 .mode           = 0644,
     623                 :            :                 .proc_handler   = proc_dointvec,
     624                 :            :         },
     625                 :            :         {
     626                 :            :                 .procname       = "tcp_base_mss",
     627                 :            :                 .data           = &sysctl_tcp_base_mss,
     628                 :            :                 .maxlen         = sizeof(int),
     629                 :            :                 .mode           = 0644,
     630                 :            :                 .proc_handler   = proc_dointvec,
     631                 :            :         },
     632                 :            :         {
     633                 :            :                 .procname       = "tcp_workaround_signed_windows",
     634                 :            :                 .data           = &sysctl_tcp_workaround_signed_windows,
     635                 :            :                 .maxlen         = sizeof(int),
     636                 :            :                 .mode           = 0644,
     637                 :            :                 .proc_handler   = proc_dointvec
     638                 :            :         },
     639                 :            :         {
     640                 :            :                 .procname       = "tcp_limit_output_bytes",
     641                 :            :                 .data           = &sysctl_tcp_limit_output_bytes,
     642                 :            :                 .maxlen         = sizeof(int),
     643                 :            :                 .mode           = 0644,
     644                 :            :                 .proc_handler   = proc_dointvec
     645                 :            :         },
     646                 :            :         {
     647                 :            :                 .procname       = "tcp_challenge_ack_limit",
     648                 :            :                 .data           = &sysctl_tcp_challenge_ack_limit,
     649                 :            :                 .maxlen         = sizeof(int),
     650                 :            :                 .mode           = 0644,
     651                 :            :                 .proc_handler   = proc_dointvec
     652                 :            :         },
     653                 :            : #ifdef CONFIG_NET_DMA
     654                 :            :         {
     655                 :            :                 .procname       = "tcp_dma_copybreak",
     656                 :            :                 .data           = &sysctl_tcp_dma_copybreak,
     657                 :            :                 .maxlen         = sizeof(int),
     658                 :            :                 .mode           = 0644,
     659                 :            :                 .proc_handler   = proc_dointvec
     660                 :            :         },
     661                 :            : #endif
     662                 :            :         {
     663                 :            :                 .procname       = "tcp_slow_start_after_idle",
     664                 :            :                 .data           = &sysctl_tcp_slow_start_after_idle,
     665                 :            :                 .maxlen         = sizeof(int),
     666                 :            :                 .mode           = 0644,
     667                 :            :                 .proc_handler   = proc_dointvec
     668                 :            :         },
     669                 :            : #ifdef CONFIG_NETLABEL
     670                 :            :         {
     671                 :            :                 .procname       = "cipso_cache_enable",
     672                 :            :                 .data           = &cipso_v4_cache_enabled,
     673                 :            :                 .maxlen         = sizeof(int),
     674                 :            :                 .mode           = 0644,
     675                 :            :                 .proc_handler   = proc_dointvec,
     676                 :            :         },
     677                 :            :         {
     678                 :            :                 .procname       = "cipso_cache_bucket_size",
     679                 :            :                 .data           = &cipso_v4_cache_bucketsize,
     680                 :            :                 .maxlen         = sizeof(int),
     681                 :            :                 .mode           = 0644,
     682                 :            :                 .proc_handler   = proc_dointvec,
     683                 :            :         },
     684                 :            :         {
     685                 :            :                 .procname       = "cipso_rbm_optfmt",
     686                 :            :                 .data           = &cipso_v4_rbm_optfmt,
     687                 :            :                 .maxlen         = sizeof(int),
     688                 :            :                 .mode           = 0644,
     689                 :            :                 .proc_handler   = proc_dointvec,
     690                 :            :         },
     691                 :            :         {
     692                 :            :                 .procname       = "cipso_rbm_strictvalid",
     693                 :            :                 .data           = &cipso_v4_rbm_strictvalid,
     694                 :            :                 .maxlen         = sizeof(int),
     695                 :            :                 .mode           = 0644,
     696                 :            :                 .proc_handler   = proc_dointvec,
     697                 :            :         },
     698                 :            : #endif /* CONFIG_NETLABEL */
     699                 :            :         {
     700                 :            :                 .procname       = "tcp_available_congestion_control",
     701                 :            :                 .maxlen         = TCP_CA_BUF_MAX,
     702                 :            :                 .mode           = 0444,
     703                 :            :                 .proc_handler   = proc_tcp_available_congestion_control,
     704                 :            :         },
     705                 :            :         {
     706                 :            :                 .procname       = "tcp_allowed_congestion_control",
     707                 :            :                 .maxlen         = TCP_CA_BUF_MAX,
     708                 :            :                 .mode           = 0644,
     709                 :            :                 .proc_handler   = proc_allowed_congestion_control,
     710                 :            :         },
     711                 :            :         {
     712                 :            :                 .procname       = "tcp_thin_linear_timeouts",
     713                 :            :                 .data           = &sysctl_tcp_thin_linear_timeouts,
     714                 :            :                 .maxlen         = sizeof(int),
     715                 :            :                 .mode           = 0644,
     716                 :            :                 .proc_handler   = proc_dointvec
     717                 :            :         },
     718                 :            :         {
     719                 :            :                 .procname       = "tcp_thin_dupack",
     720                 :            :                 .data           = &sysctl_tcp_thin_dupack,
     721                 :            :                 .maxlen         = sizeof(int),
     722                 :            :                 .mode           = 0644,
     723                 :            :                 .proc_handler   = proc_dointvec
     724                 :            :         },
     725                 :            :         {
     726                 :            :                 .procname       = "tcp_early_retrans",
     727                 :            :                 .data           = &sysctl_tcp_early_retrans,
     728                 :            :                 .maxlen         = sizeof(int),
     729                 :            :                 .mode           = 0644,
     730                 :            :                 .proc_handler   = proc_dointvec_minmax,
     731                 :            :                 .extra1         = &zero,
     732                 :            :                 .extra2         = &four,
     733                 :            :         },
     734                 :            :         {
     735                 :            :                 .procname       = "tcp_min_tso_segs",
     736                 :            :                 .data           = &sysctl_tcp_min_tso_segs,
     737                 :            :                 .maxlen         = sizeof(int),
     738                 :            :                 .mode           = 0644,
     739                 :            :                 .proc_handler   = proc_dointvec_minmax,
     740                 :            :                 .extra1         = &zero,
     741                 :            :                 .extra2         = &gso_max_segs,
     742                 :            :         },
     743                 :            :         {
     744                 :            :                 .procname       = "tcp_autocorking",
     745                 :            :                 .data           = &sysctl_tcp_autocorking,
     746                 :            :                 .maxlen         = sizeof(int),
     747                 :            :                 .mode           = 0644,
     748                 :            :                 .proc_handler   = proc_dointvec_minmax,
     749                 :            :                 .extra1         = &zero,
     750                 :            :                 .extra2         = &one,
     751                 :            :         },
     752                 :            :         {
     753                 :            :                 .procname       = "tcp_default_init_rwnd",
     754                 :            :                 .data           = &sysctl_tcp_default_init_rwnd,
     755                 :            :                 .maxlen         = sizeof(int),
     756                 :            :                 .mode           = 0644,
     757                 :            :                 .proc_handler   = proc_tcp_default_init_rwnd
     758                 :            :         },
     759                 :            :         {
     760                 :            :                 .procname       = "udp_mem",
     761                 :            :                 .data           = &sysctl_udp_mem,
     762                 :            :                 .maxlen         = sizeof(sysctl_udp_mem),
     763                 :            :                 .mode           = 0644,
     764                 :            :                 .proc_handler   = proc_doulongvec_minmax,
     765                 :            :         },
     766                 :            :         {
     767                 :            :                 .procname       = "udp_rmem_min",
     768                 :            :                 .data           = &sysctl_udp_rmem_min,
     769                 :            :                 .maxlen         = sizeof(sysctl_udp_rmem_min),
     770                 :            :                 .mode           = 0644,
     771                 :            :                 .proc_handler   = proc_dointvec_minmax,
     772                 :            :                 .extra1         = &one
     773                 :            :         },
     774                 :            :         {
     775                 :            :                 .procname       = "udp_wmem_min",
     776                 :            :                 .data           = &sysctl_udp_wmem_min,
     777                 :            :                 .maxlen         = sizeof(sysctl_udp_wmem_min),
     778                 :            :                 .mode           = 0644,
     779                 :            :                 .proc_handler   = proc_dointvec_minmax,
     780                 :            :                 .extra1         = &one
     781                 :            :         },
     782                 :            :         { }
     783                 :            : };
     784                 :            : 
     785                 :            : static struct ctl_table ipv4_net_table[] = {
     786                 :            :         {
     787                 :            :                 .procname       = "icmp_echo_ignore_all",
     788                 :            :                 .data           = &init_net.ipv4.sysctl_icmp_echo_ignore_all,
     789                 :            :                 .maxlen         = sizeof(int),
     790                 :            :                 .mode           = 0644,
     791                 :            :                 .proc_handler   = proc_dointvec
     792                 :            :         },
     793                 :            :         {
     794                 :            :                 .procname       = "icmp_echo_ignore_broadcasts",
     795                 :            :                 .data           = &init_net.ipv4.sysctl_icmp_echo_ignore_broadcasts,
     796                 :            :                 .maxlen         = sizeof(int),
     797                 :            :                 .mode           = 0644,
     798                 :            :                 .proc_handler   = proc_dointvec
     799                 :            :         },
     800                 :            :         {
     801                 :            :                 .procname       = "icmp_ignore_bogus_error_responses",
     802                 :            :                 .data           = &init_net.ipv4.sysctl_icmp_ignore_bogus_error_responses,
     803                 :            :                 .maxlen         = sizeof(int),
     804                 :            :                 .mode           = 0644,
     805                 :            :                 .proc_handler   = proc_dointvec
     806                 :            :         },
     807                 :            :         {
     808                 :            :                 .procname       = "icmp_errors_use_inbound_ifaddr",
     809                 :            :                 .data           = &init_net.ipv4.sysctl_icmp_errors_use_inbound_ifaddr,
     810                 :            :                 .maxlen         = sizeof(int),
     811                 :            :                 .mode           = 0644,
     812                 :            :                 .proc_handler   = proc_dointvec
     813                 :            :         },
     814                 :            :         {
     815                 :            :                 .procname       = "icmp_ratelimit",
     816                 :            :                 .data           = &init_net.ipv4.sysctl_icmp_ratelimit,
     817                 :            :                 .maxlen         = sizeof(int),
     818                 :            :                 .mode           = 0644,
     819                 :            :                 .proc_handler   = proc_dointvec_ms_jiffies,
     820                 :            :         },
     821                 :            :         {
     822                 :            :                 .procname       = "icmp_ratemask",
     823                 :            :                 .data           = &init_net.ipv4.sysctl_icmp_ratemask,
     824                 :            :                 .maxlen         = sizeof(int),
     825                 :            :                 .mode           = 0644,
     826                 :            :                 .proc_handler   = proc_dointvec
     827                 :            :         },
     828                 :            :         {
     829                 :            :                 .procname       = "ping_group_range",
     830                 :            :                 .data           = &init_net.ipv4.sysctl_ping_group_range,
     831                 :            :                 .maxlen         = sizeof(gid_t)*2,
     832                 :            :                 .mode           = 0644,
     833                 :            :                 .proc_handler   = ipv4_ping_group_range,
     834                 :            :         },
     835                 :            :         {
     836                 :            :                 .procname       = "tcp_ecn",
     837                 :            :                 .data           = &init_net.ipv4.sysctl_tcp_ecn,
     838                 :            :                 .maxlen         = sizeof(int),
     839                 :            :                 .mode           = 0644,
     840                 :            :                 .proc_handler   = proc_dointvec
     841                 :            :         },
     842                 :            :         {
     843                 :            :                 .procname       = "ip_local_port_range",
     844                 :            :                 .maxlen         = sizeof(init_net.ipv4.sysctl_local_ports.range),
     845                 :            :                 .data           = &init_net.ipv4.sysctl_local_ports.range,
     846                 :            :                 .mode           = 0644,
     847                 :            :                 .proc_handler   = ipv4_local_port_range,
     848                 :            :         },
     849                 :            :         {
     850                 :            :                 .procname       = "ip_no_pmtu_disc",
     851                 :            :                 .data           = &init_net.ipv4.sysctl_ip_no_pmtu_disc,
     852                 :            :                 .maxlen         = sizeof(int),
     853                 :            :                 .mode           = 0644,
     854                 :            :                 .proc_handler   = proc_dointvec
     855                 :            :         },
     856                 :            :         {
     857                 :            :                 .procname       = "ip_forward_use_pmtu",
     858                 :            :                 .data           = &init_net.ipv4.sysctl_ip_fwd_use_pmtu,
     859                 :            :                 .maxlen         = sizeof(int),
     860                 :            :                 .mode           = 0644,
     861                 :            :                 .proc_handler   = proc_dointvec,
     862                 :            :         },
     863                 :            :         { }
     864                 :            : };
     865                 :            : 
     866                 :          0 : static __net_init int ipv4_sysctl_init_net(struct net *net)
     867                 :            : {
     868                 :            :         struct ctl_table *table;
     869                 :            : 
     870                 :            :         table = ipv4_net_table;
     871                 :            :         if (!net_eq(net, &init_net)) {
     872                 :            :                 int i;
     873                 :            : 
     874                 :            :                 table = kmemdup(table, sizeof(ipv4_net_table), GFP_KERNEL);
     875                 :            :                 if (table == NULL)
     876                 :            :                         goto err_alloc;
     877                 :            : 
     878                 :            :                 /* Update the variables to point into the current struct net */
     879                 :            :                 for (i = 0; i < ARRAY_SIZE(ipv4_net_table) - 1; i++)
     880                 :            :                         table[i].data += (void *)net - (void *)&init_net;
     881                 :            :         }
     882                 :            : 
     883                 :            :         /*
     884                 :            :          * Sane defaults - nobody may create ping sockets.
     885                 :            :          * Boot scripts should set this to distro-specific group.
     886                 :            :          */
     887                 :          0 :         net->ipv4.sysctl_ping_group_range[0] = make_kgid(&init_user_ns, 1);
     888                 :          0 :         net->ipv4.sysctl_ping_group_range[1] = make_kgid(&init_user_ns, 0);
     889                 :            : 
     890                 :            :         /*
     891                 :            :          * Set defaults for local port range
     892                 :            :          */
     893                 :          0 :         seqlock_init(&net->ipv4.sysctl_local_ports.lock);
     894                 :          0 :         net->ipv4.sysctl_local_ports.range[0] =  32768;
     895                 :          0 :         net->ipv4.sysctl_local_ports.range[1] =  61000;
     896                 :            : 
     897                 :          0 :         net->ipv4.ipv4_hdr = register_net_sysctl(net, "net/ipv4", table);
     898         [ #  # ]:          0 :         if (net->ipv4.ipv4_hdr == NULL)
     899                 :            :                 goto err_reg;
     900                 :            : 
     901                 :            :         return 0;
     902                 :            : 
     903                 :            : err_reg:
     904                 :            :         if (!net_eq(net, &init_net))
     905                 :            :                 kfree(table);
     906                 :            : err_alloc:
     907                 :            :         return -ENOMEM;
     908                 :            : }
     909                 :            : 
     910                 :          0 : static __net_exit void ipv4_sysctl_exit_net(struct net *net)
     911                 :            : {
     912                 :            :         struct ctl_table *table;
     913                 :            : 
     914                 :          0 :         table = net->ipv4.ipv4_hdr->ctl_table_arg;
     915                 :          0 :         unregister_net_sysctl_table(net->ipv4.ipv4_hdr);
     916                 :          0 :         kfree(table);
     917                 :          0 : }
     918                 :            : 
     919                 :            : static __net_initdata struct pernet_operations ipv4_sysctl_ops = {
     920                 :            :         .init = ipv4_sysctl_init_net,
     921                 :            :         .exit = ipv4_sysctl_exit_net,
     922                 :            : };
     923                 :            : 
     924                 :          0 : static __init int sysctl_ipv4_init(void)
     925                 :            : {
     926                 :            :         struct ctl_table_header *hdr;
     927                 :            :         struct ctl_table *i;
     928                 :            : 
     929         [ #  # ]:          0 :         for (i = ipv4_table; i->procname; i++) {
     930         [ #  # ]:          0 :                 if (strcmp(i->procname, "ip_local_reserved_ports") == 0) {
     931                 :          0 :                         i->data = sysctl_local_reserved_ports;
     932                 :          0 :                         break;
     933                 :            :                 }
     934                 :            :         }
     935         [ #  # ]:          0 :         if (!i->procname)
     936                 :            :                 return -EINVAL;
     937                 :            : 
     938                 :          0 :         hdr = register_net_sysctl(&init_net, "net/ipv4", ipv4_table);
     939         [ #  # ]:          0 :         if (hdr == NULL)
     940                 :            :                 return -ENOMEM;
     941                 :            : 
     942         [ #  # ]:          0 :         if (register_pernet_subsys(&ipv4_sysctl_ops)) {
     943                 :          0 :                 unregister_net_sysctl_table(hdr);
     944                 :          0 :                 return -ENOMEM;
     945                 :            :         }
     946                 :            : 
     947                 :            :         return 0;
     948                 :            : }
     949                 :            : 
     950                 :            : __initcall(sysctl_ipv4_init);

Generated by: LCOV version 1.9