linux/net/unix/sysctl_net_unix.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * NET4:        Sysctl interface to net af_unix subsystem.
   4 *
   5 * Authors:     Mike Shaver.
   6 */
   7
   8#include <linux/mm.h>
   9#include <linux/slab.h>
  10#include <linux/sysctl.h>
  11
  12#include <net/af_unix.h>
  13
  14static struct ctl_table unix_table[] = {
  15        {
  16                .procname       = "max_dgram_qlen",
  17                .data           = &init_net.unx.sysctl_max_dgram_qlen,
  18                .maxlen         = sizeof(int),
  19                .mode           = 0644,
  20                .proc_handler   = proc_dointvec
  21        },
  22        { }
  23};
  24
  25int __net_init unix_sysctl_register(struct net *net)
  26{
  27        struct ctl_table *table;
  28
  29        table = kmemdup(unix_table, sizeof(unix_table), GFP_KERNEL);
  30        if (table == NULL)
  31                goto err_alloc;
  32
  33        /* Don't export sysctls to unprivileged users */
  34        if (net->user_ns != &init_user_ns)
  35                table[0].procname = NULL;
  36
  37        table[0].data = &net->unx.sysctl_max_dgram_qlen;
  38        net->unx.ctl = register_net_sysctl(net, "net/unix", table);
  39        if (net->unx.ctl == NULL)
  40                goto err_reg;
  41
  42        return 0;
  43
  44err_reg:
  45        kfree(table);
  46err_alloc:
  47        return -ENOMEM;
  48}
  49
  50void unix_sysctl_unregister(struct net *net)
  51{
  52        struct ctl_table *table;
  53
  54        table = net->unx.ctl->ctl_table_arg;
  55        unregister_net_sysctl_table(net->unx.ctl);
  56        kfree(table);
  57}
  58