解釈のIPC ipc_sysctl.cソース

// SPDX-ライセンス-識別子:GPL-2.0-のみ
/ * 
 *著作権(C)2007 
 * 
 *著者:エリックBiederman <[email protected]> 
 * / 

の#include <linuxの/ module.h> 
の#include <linuxの/ ipc.h> 
の#include <linuxの/ nsproxy.h> 
の#include <linuxの/ sysctl.h> 
の#include <linuxの/ uaccess.h> 
の#include <linuxの/ ipc_namespace.h> 
の#include <linuxの/ msg.h> 
# "util.h"含む

静的ボイド* get_ipc(構造体ctl_table *テーブル)
{ 
	CHAR * =卓上>データを、
	構造体ipc_namespace * ipc_ns =の電流> nsproxy-> ipc_ns。
	これ=(どの- (CHAR *)&init_ipc_ns)+(CHAR *)ipc_ns。
	これを返します。

静的INT proc_ipc_dointvec(構造体ctl_table *テーブル、INT書き込み、
	ボイド__user *バッファ、size_tの* lenp、loff_t *するPPO)
{ 
	構造体ctl_table ipc_table。

	memcpy(&ipc_table、テーブル、はsizeof(ipc_table))。
	ipc_table.data = get_ipc(表)。

	戻りproc_dointvec(&ipc_table、書き込み、バッファ、lenp、するPPO)。
} 

静的INT proc_ipc_dointvec_minmax(構造体ctl_table *テーブル、INT書き込み、
	ボイド__user *バッファ、size_tの* lenp、loff_t *するPPO)
{ 
	構造体ctl_table ipc_table。

	memcpy(&ipc_table、テーブル、はsizeof(ipc_table))。
	ipc_table.data = get_ipc(表)。

	戻りproc_dointvec_minmax(&ipc_table、書き込み、バッファ、lenp、するPPO)。
}

静的INT proc_ipc_dointvec_minmax_orphans(構造体ctl_table *テーブル、INT書き込み、
	ボイド__user *バッファ、size_tの* lenp、loff_t *するPPO)
{ 
	構造体ipc_namespace * NS =電流- > nsproxy-> ipc_ns。
	INT ERR = proc_ipc_dointvec_minmax(テーブル、書き込み、バッファ、lenp、するPPO)。

	(ERR <0)であれば
		、戻りERR。
	もし(NS-> shm_rmid_forced)
		shm_destroy_orphaned(NS); 
	ERRを返します。
} 

静的INT proc_ipc_doulongvec_minmax(構造体ctl_table *テーブル、INT書き込み、
	ボイド__user *バッファ、size_tの* lenp、loff_t *するPPO)
{ 
	構造体ctl_table ipc_table。
	memcpy(&ipc_table、テーブル、はsizeof(ipc_table))。
	ipc_table.data = get_ipc(表)。

	戻りproc_doulongvec_minmax(&ipc_table、書き込み、バッファ、
					lenp、するPPO)。
} 

静的INT proc_ipc_auto_msgmni(構造体ctl_table *テーブル、INT書き込み、
	ボイド__user *バッファ、size_tの* lenp、loff_t *するPPO)
{ 
	構造体ctl_table ipc_table。
	int型ダミー= 0; 

	memcpy(&ipc_table、テーブル、はsizeof(ipc_table))。
	ipc_table.data =&ダミー。

	(書き込み)の場合
		pr_info_once(「auto_msgmniへの書き込みは効果がありません」); 

	戻りproc_dointvec_minmax(&ipc_table、書き込み、バッファ、lenp、するPPO)。
} 

静的INT proc_ipc_sem_dointvec(構造体ctl_table *テーブル、INT書き込み、
	ボイド__user *バッファ、size_tの* lenp、loff_t *するPPO)
{ 
	int型RET、SEMMNI。
	構造体ipc_namespace * NS =の電流> nsproxy-> ipc_ns。

	SEMMNI = NS-> sem_ctls [3]。
	RET = proc_ipc_dointvec(テーブル、書き込み、バッファ、lenp、するPPO)。

	もし(RET!)
		RET = sem_check_semmni(電流- > nsproxy-> ipc_ns); 

	/ * 
	 *エラーが発生した場合はSEMMNI値をリセットします。
	 * / 
	IF(RET)
		NS-> sem_ctls [3] = SEMMNI。
	RETを返します。
} 

の#else 
の#define proc_ipc_doulongvec_minmax NULL 
の#define proc_ipc_dointvec NULL 
の#define proc_ipc_dointvec_minmax NULL 
の#define proc_ipc_dointvec_minmax_orphans NULL 
の#define proc_ipc_auto_msgmni NULL 
の#define proc_ipc_sem_dointvec NULL 
#endifの

INT ipc_mni = IPCMNI。
int型ipc_mni_shift = IPCMNI_SHIFT。
int型ipc_min_cycle = RADIX_TREE_MAP_SIZE。

静的構造体ctl_table ipc_kern_table [] = { 
	{ 
		.procname = "SHMMAX"、
		.DATA =&init_ipc_ns.shm_ctlmax、
		.maxlen =はsizeof(init_ipc_ns.shm_ctlmax)、
		.mode = 0644、
		.proc_handler = proc_ipc_doulongvec_minmax、
	}、
	{ 
		.procname = " SHMALL」、
		.DATA =&init_ipc_ns.shm_ctlall、
		.maxlen =はsizeof(init_ipc_ns.shm_ctlall)、
		.mode = 0644、
		.proc_handler = proc_ipc_doulongvec_minmax、
	}、
	{ 
		.procname = "SHMMNI"、
		.DATA =&init_ipc_ns.shm_ctlmni、
		.maxlen = sizeof(init_ipc_ns.shm_ctlmni)、 
		.mode = 0644、 
		.proc_handler = proc_ipc_dointvec_minmax、
		.extra1 = SYSCTL_ZERO、
		.extra2 =&ipc_mni、
	}、
	{ 
		.procname = "shm_rmid_forced"、
		.DATA =&init_ipc_ns.shm_rmid_forced、
		.maxlen =はsizeof(init_ipc_ns.shm_rmid_forced)、
		.mode = 0644、
		.proc_handler = proc_ipc_dointvec_minmax_orphans、
		.extra1 = SYSCTL_ZERO、
		.extra2 = SYSCTL_ONE、
	}、
	{ 
		.procname = "MSGMAX"、
		.DATA =&init_ipc_ns.msg_ctlmax、
		.maxlen =はsizeof(init_ipc_ns.msg_ctlmax)、
		.mode = 0644、 proc_handler = proc_ipc_dointvec_minmax、
		.extra1 = SYSCTL_ZERO、
		.extra2 = SYSCTL_INT_MAX、
	}、
	{ 
		.procname = "MSGMNI"、
		.DATA =&init_ipc_ns.msg_ctlmni、
		.maxlen =はsizeof(init_ipc_ns.msg_ctlmni)、
		.mode = 0644、
		.proc_handler = proc_ipc_dointvec_minmax、
		.extra1 = SYSCTL_ZERO、
		.extra2 = &ipc_mni、
	}、
	{ 
		.procname = "auto_msgmni"、
		.DATA = NULL、
		.maxlen =はsizeof(INT)、
		.mode = 0644、
		.proc_handler = proc_ipc_auto_msgmni、
		.extra1 = SYSCTL_ZERO、
		.extra2 = SYSCTL_ONE、
	}、
	{ 
		.procname = "MSGMNB"、
		.DATA =&init_ipc_ns.msg_ctlmnb、
		.maxlen =はsizeof(init_ipc_ns.msg_ctlmnb)、 
		.extra2 = SYSCTL_INT_MAX、
	}、
	{ 
		.mode = 0644、
		.proc_handler = proc_ipc_dointvec_minmax、
		.extra1 = SYSCTL_ZERO、
		.extra2 = SYSCTL_INT_MAX、
	}、
	{ 
		.procname = "SEM"、
		.DATA =&init_ipc_ns.sem_ctls、
		.maxlen = 4 *はsizeof(INT)、
		.mode = 0644、
		.proc_handler = proc_ipc_sem_dointvec、
	}、
CONFIG_CHECKPOINT_RESTORE IFDEF 
	{ 
		.procname = "sem_next_id"、
		.DATA =&init_ipc_ns.ids [IPC_SEM_IDS] .next_id、
		.maxlen =はsizeof(init_ipc_ns.ids [IPC_SEM_IDS] .next_id)、
		.mode = 0644、
		.proc_handler = proc_ipc_dointvec_minmax、
		.extra1 = SYSCTL_ZERO、
		.procnameは"msg_next_id"、= 
		、.DATA =&init_ipc_ns.ids [IPC_MSG_IDS]は.next_id 
		.maxlen =はsizeof(init_ipc_ns.ids [IPC_MSG_IDS] .next_id)、
		.mode = 0644、
		.proc_handler = proc_ipc_dointvec_minmax、
		.extra1 = SYSCTL_ZERO、 extra2 = SYSCTL_INT_MAX、
	}、
	{ 
		.procname = "shm_next_id"、
		.DATA =&init_ipc_ns.ids [IPC_SHM_IDS] .next_id、
		.maxlen =はsizeof(init_ipc_ns.ids [IPC_SHM_IDS] .next_id)、
		.mode = 0644、
		.proc_handler = proc_ipc_dointvec_minmax 、
		.extra1 = SYSCTL_ZERO、
		.extra2 = SYSCTL_INT_MAX、
	}、
#endifの
	{} 
}。

静的構造体ctl_table ipc_root_table [] = {
	{ 
		.procname = "カーネル"、
		.mode = 0555、
		.child = ipc_kern_table、 
	}、
	{}
}。

静的INT __init ipc_sysctl_init(ボイド)
{ 
	register_sysctl_table(ipc_root_table)。
	0を返します。
} 

device_initcall(ipc_sysctl_init)。

静的INT __init ipc_mni_extend(CHAR * STR)
{ 
	ipc_mni = IPCMNI_EXTEND。
	ipc_mni_shift = IPCMNI_EXTEND_SHIFT。
	ipc_min_cycle = IPCMNI_EXTEND_MIN_CYCLE。
	pr_info( "IPCMNIは%dに拡張する\ n"、ipc_mni)。
	0を返します。
} 
early_param( "ipcmni_extend"、ipc_mni_extend)。

  

おすすめ

転載: www.cnblogs.com/still-smile/p/12040607.html
IPC