The patch titled sysctl: fix sys_sysctl interface of ipc sysctls has been added to the -mm tree. Its filename is sysctl-fix-sys_sysctl-interface-of-ipc-sysctls.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: sysctl: fix sys_sysctl interface of ipc sysctls From: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx> Currently there is a regression and the ipc sysctls don't show up in the binary sysctl namespace. This patch adds sysctl_ipc_data to read data/write from the appropriate namespace and deliver it in the expected manner. Signed-off-by: Eric W. Biederman <ebiederm@xxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- kernel/sysctl.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 50 insertions(+) diff -puN kernel/sysctl.c~sysctl-fix-sys_sysctl-interface-of-ipc-sysctls kernel/sysctl.c --- a/kernel/sysctl.c~sysctl-fix-sys_sysctl-interface-of-ipc-sysctls +++ a/kernel/sysctl.c @@ -143,6 +143,10 @@ static int sysctl_uts_string(ctl_table * void __user *oldval, size_t __user *oldlenp, void __user *newval, size_t newlen, void **context); +static int sysctl_ipc_data(ctl_table *table, int __user *name, int nlen, + void __user *oldval, size_t __user *oldlenp, + void __user *newval, size_t newlen, void **context); + #ifdef CONFIG_PROC_SYSCTL static int proc_do_cad_pid(ctl_table *table, int write, struct file *filp, void __user *buffer, size_t *lenp, loff_t *ppos); @@ -476,6 +480,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof (init_ipc_ns.shm_ctlmax), .mode = 0644, .proc_handler = &proc_ipc_doulongvec_minmax, + .strategy = sysctl_ipc_data, }, { .ctl_name = KERN_SHMALL, @@ -484,6 +489,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof (init_ipc_ns.shm_ctlall), .mode = 0644, .proc_handler = &proc_ipc_doulongvec_minmax, + .strategy = sysctl_ipc_data, }, { .ctl_name = KERN_SHMMNI, @@ -492,6 +498,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof (init_ipc_ns.shm_ctlmni), .mode = 0644, .proc_handler = &proc_ipc_dointvec, + .strategy = sysctl_ipc_data, }, { .ctl_name = KERN_MSGMAX, @@ -500,6 +507,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof (init_ipc_ns.msg_ctlmax), .mode = 0644, .proc_handler = &proc_ipc_dointvec, + .strategy = sysctl_ipc_data, }, { .ctl_name = KERN_MSGMNI, @@ -508,6 +516,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof (init_ipc_ns.msg_ctlmni), .mode = 0644, .proc_handler = &proc_ipc_dointvec, + .strategy = sysctl_ipc_data, }, { .ctl_name = KERN_MSGMNB, @@ -516,6 +525,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof (init_ipc_ns.msg_ctlmnb), .mode = 0644, .proc_handler = &proc_ipc_dointvec, + .strategy = sysctl_ipc_data, }, { .ctl_name = KERN_SEM, @@ -524,6 +534,7 @@ static ctl_table kern_table[] = { .maxlen = 4*sizeof (int), .mode = 0644, .proc_handler = &proc_ipc_dointvec, + .strategy = sysctl_ipc_data, }, #endif #ifdef CONFIG_MAGIC_SYSRQ @@ -2613,6 +2624,45 @@ static int sysctl_uts_string(ctl_table * return r; } +/* The generic sysctl ipc data routine. */ +static int sysctl_ipc_data(ctl_table *table, int __user *name, int nlen, + void __user *oldval, size_t __user *oldlenp, + void __user *newval, size_t newlen, void **context) +{ + size_t len; + void *data; + + /* Get out of I don't have a variable */ + if (!table->data || !table->maxlen) + return -ENOTDIR; + + data = get_ipc(table, 1); + if (!data) + return -ENOTDIR; + + if (oldval && oldlenp) { + if (get_user(len, oldlenp)) + return -EFAULT; + if (len) { + if (len > table->maxlen) + len = table->maxlen; + if (copy_to_user(oldval, data, len)) + return -EFAULT; + if (put_user(len, oldlenp)) + return -EFAULT; + } + } + + if (newval && newlen) { + if (newlen > table->maxlen) + newlen = table->maxlen; + + if (copy_from_user(data, newval, newlen)) + return -EFAULT; + } + return 1; +} + #else /* CONFIG_SYSCTL_SYSCALL */ _ Patches currently in -mm which might be from ebiederm@xxxxxxxxxxxx are origin.patch x86-64-calling-clear_bss-before-set_intr_gate-with-early_idt_handler.patch x86-64-change-the-size-for-interrupt-array-to-nr_vectors.patch make-fs-proc-basecproc_pid_instantiate-static.patch add-process_session-helper-routine.patch rename-struct-namespace-to-struct-mnt_namespace.patch add-an-identifier-to-nsproxy.patch rename-struct-pspace-to-struct-pid_namespace.patch add-pid_namespace-to-nsproxy.patch use-current-nsproxy-pid_ns.patch add-child-reaper-to-pid_namespace.patch sysctl-simplify-sysctl_uts_string.patch sysctl-implement-sysctl_uts_string.patch sysctl-simplify-ipc-ns-specific-sysctls.patch sysctl-fix-sys_sysctl-interface-of-ipc-sysctls.patch updated-i386-cleanup-apic-code.patch updated-i386-rework-local-apic-calibration.patch updated-dynticks-fix-nmi-watchdog.patch clockevents-core-check-for-clock-event-device-handler-being-non-null-before-calling-it.patch pidhash-temporary-debug-checks.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html