linux/net/unix/sysctl_net_unix.c
<<
>>
Prefs
   1/*
   2 * NET4:        Sysctl interface to net af_unix subsystem.
   3 *
   4 * Authors:     Mike Shaver.
   5 *
   6 *              This program is free software; you can redistribute it and/or
   7 *              modify it under the terms of the GNU General Public License
   8 *              as published by the Free Software Foundation; either version
   9 *              2 of the License, or (at your option) any later version.
  10 */
  11
  12#include <linux/mm.h>
  13#include <linux/slab.h>
  14#include <linux/sysctl.h>
  15
  16#include <net/af_unix.h>
  17
  18static struct ctl_table unix_table[] = {
  19        {
  20                .procname       = "max_dgram_qlen",
  21                .data           = &init_net.unx.sysctl_max_dgram_qlen,
  22                .maxlen         = sizeof(int),
  23                .mode           = 0644,
  24                .proc_handler   = proc_dointvec
  25        },
  26        { }
  27};
  28
  29int __net_init unix_sysctl_register(struct net *net)
  30{
  31        struct ctl_table *table;
  32
  33        table = kmemdup(unix_table, sizeof(unix_table), GFP_KERNEL);
  34        if (table == NULL)
  35                goto err_alloc;
  36
  37        /* Don't export sysctls to unprivileged users */
  38        if (net->user_ns != &init_user_ns)
  39                table[0].procname = NULL;
  40
  41        table[0].data = &net->unx.sysctl_max_dgram_qlen;
  42        net->unx.ctl = register_net_sysctl(net, "net/unix", table);
  43        if (net->unx.ctl == NULL)
  44                goto err_reg;
  45
  46        return 0;
  47
  48err_reg:
  49        kfree(table);
  50err_alloc:
  51        return -ENOMEM;
  52}
  53
  54void unix_sysctl_unregister(struct net *net)
  55{
  56        struct ctl_table *table;
  57
  58        table = net->unx.ctl->ctl_table_arg;
  59        unregister_net_sysctl_table(net->unx.ctl);
  60        kfree(table);
  61}
  62