Blame view

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