// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (C) 2007 IBM Corporation
*
* Author: Cedric Le Goater <clg@fr.ibm.com>
*/ #include <linux/nsproxy.h>
#include <linux/ipc_namespace.h>
#include <linux/sysctl.h> #ifdef CONFIG_PROC_SYSCTL
static void *get_mq(struct ctl_table *table)
{
char *which = table->data;
struct ipc_namespace *ipc_ns = current->nsproxy->ipc_ns;
which = (which - (char *)&init_ipc_ns) + (char *)ipc_ns;
return which;
} static int proc_mq_dointvec(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
struct ctl_table mq_table;
memcpy(&mq_table, table, sizeof(mq_table));
mq_table.data = get_mq(table); return proc_dointvec(&mq_table, write, buffer, lenp, ppos);
} static int proc_mq_dointvec_minmax(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
struct ctl_table mq_table;
memcpy(&mq_table, table, sizeof(mq_table));
mq_table.data = get_mq(table); return proc_dointvec_minmax(&mq_table, write, buffer,
lenp, ppos);
}
#else
#define proc_mq_dointvec NULL
#define proc_mq_dointvec_minmax NULL
#endif static int msg_max_limit_min = MIN_MSGMAX;
static int msg_max_limit_max = HARD_MSGMAX; static int msg_maxsize_limit_min = MIN_MSGSIZEMAX;
static int msg_maxsize_limit_max = HARD_MSGSIZEMAX; static struct ctl_table mq_sysctls[] = {
{
.procname = "queues_max",
.data = &init_ipc_ns.mq_queues_max,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_mq_dointvec,
},
{
.procname = "msg_max",
.data = &init_ipc_ns.mq_msg_max,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_mq_dointvec_minmax,
.extra1 = &msg_max_limit_min,
.extra2 = &msg_max_limit_max,
},
{
.procname = "msgsize_max",
.data = &init_ipc_ns.mq_msgsize_max,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_mq_dointvec_minmax,
.extra1 = &msg_maxsize_limit_min,
.extra2 = &msg_maxsize_limit_max,
},
{
.procname = "msg_default",
.data = &init_ipc_ns.mq_msg_default,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_mq_dointvec_minmax,
.extra1 = &msg_max_limit_min,
.extra2 = &msg_max_limit_max,
},
{
.procname = "msgsize_default",
.data = &init_ipc_ns.mq_msgsize_default,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_mq_dointvec_minmax,
.extra1 = &msg_maxsize_limit_min,
.extra2 = &msg_maxsize_limit_max,
},
{}
}; static struct ctl_table mq_sysctl_dir[] = {
{
.procname = "mqueue",
.mode = 0555,
.child = mq_sysctls,
},
{}
}; static struct ctl_table mq_sysctl_root[] = {
{
.procname = "fs",
.mode = 0555,
.child = mq_sysctl_dir,
},
{}
}; struct ctl_table_header *mq_register_sysctl_table(void)
{
return register_sysctl_table(mq_sysctl_root);
}

  

最新文章

  1. Hibernate之全面认识
  2. Diamond使用向导
  3. python 学习笔记八 进程和线程 (进阶篇)
  4. Effective Java 18 Prefer interfaces to abstract classes
  5. Oracle笔记 十一、PL/SQL函数和触发器
  6. Linux C —— 多线程
  7. 【转】 UINavigationItem UINavigationBar 关系分析
  8. Android 开发 对话框Dialog dismiss和hide方法的区别
  9. c++冒泡排序的模板函数设计
  10. linux 搭建Tomcat
  11. What is a good EPUB reader on Linux
  12. design pattern Builder 生成器设计模式
  13. linux安装和配置 mysql、redis 过程中遇到的问题记录(转)
  14. nginx配置文件详细解读
  15. 消息队列比较-rabbitmq/kafka/rocketmq/ONS
  16. Nastya Is Buying Lunch
  17. 潭州课堂25班:Ph201805201 django 项目 第十五课 用户注册功能后台实现 (课堂笔记)
  18. Linux 进程一直占用单核CPU分析
  19. 教程+资源,python scrapy实战爬取知乎最性感妹子的爆照合集(12G)!
  20. {python}完成完整的温度转换程序 猜数字游戏(猜价格,猜年龄等) 解析身份证号、学号不同片段的含义

热门文章

  1. Canal——增量同步MySQL数据到ElasticSearch
  2. 前端学习之JavaScript(1)
  3. LeetCode.1184-公交车站之间的距离(Distance Between Bus Stops)
  4. 在vue中使用Normalize初始化样式
  5. httpContext.User.Identity.IsAuthenticated 总是为fasle
  6. Cpython全局解释器锁原理剖析
  7. 宝塔配置composer默认的PHP版本
  8. Kafka如何实现每秒上百万的高并发写入
  9. Linux就该这么学——新手必须掌握的命令之文件编辑命令组
  10. 1-python django的创建