git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 2.0-pre4
[linux-2.6.git]
/
kernel
/
sysctl.c
diff --git
a/kernel/sysctl.c
b/kernel/sysctl.c
index
2810362
..
8f87d99
100644
(file)
--- a/
kernel/sysctl.c
+++ b/
kernel/sysctl.c
@@
-41,6
+41,7
@@
#include <linux/limits.h>
#include <linux/dcache.h>
#include <linux/syscalls.h>
#include <linux/limits.h>
#include <linux/dcache.h>
#include <linux/syscalls.h>
+#include <linux/vserver/cvirt.h>
#include <asm/uaccess.h>
#include <asm/processor.h>
#include <asm/uaccess.h>
#include <asm/processor.h>
@@
-227,6
+228,7
@@
static ctl_table kern_table[] = {
.maxlen = sizeof(system_utsname.sysname),
.mode = 0444,
.proc_handler = &proc_doutsstring,
.maxlen = sizeof(system_utsname.sysname),
.mode = 0444,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
.strategy = &sysctl_string,
},
{
@@
-236,6
+238,7
@@
static ctl_table kern_table[] = {
.maxlen = sizeof(system_utsname.release),
.mode = 0444,
.proc_handler = &proc_doutsstring,
.maxlen = sizeof(system_utsname.release),
.mode = 0444,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
.strategy = &sysctl_string,
},
{
@@
-245,6
+248,7
@@
static ctl_table kern_table[] = {
.maxlen = sizeof(system_utsname.version),
.mode = 0444,
.proc_handler = &proc_doutsstring,
.maxlen = sizeof(system_utsname.version),
.mode = 0444,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
.strategy = &sysctl_string,
},
{
@@
-254,6
+258,7
@@
static ctl_table kern_table[] = {
.maxlen = sizeof(system_utsname.nodename),
.mode = 0644,
.proc_handler = &proc_doutsstring,
.maxlen = sizeof(system_utsname.nodename),
.mode = 0644,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
.strategy = &sysctl_string,
},
{
@@
-263,6
+268,7
@@
static ctl_table kern_table[] = {
.maxlen = sizeof(system_utsname.domainname),
.mode = 0644,
.proc_handler = &proc_doutsstring,
.maxlen = sizeof(system_utsname.domainname),
.mode = 0644,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
.strategy = &sysctl_string,
},
{
@@
-1389,16
+1395,22
@@
static ssize_t proc_writesys(struct file * file, const char __user * buf,
int proc_dostring(ctl_table *table, int write, struct file *filp,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
int proc_dostring(ctl_table *table, int write, struct file *filp,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
- size_t len;
+ size_t len
, maxlen
;
char __user *p;
char c;
char __user *p;
char c;
-
+ void *data;
+
+ data = table->data;
+ maxlen = table->maxlen;
+ if (table->virt_handler)
+ table->virt_handler(table, write, filp->f_xid, &data, &maxlen);
+
if (!table->data || !table->maxlen || !*lenp ||
(*ppos && !write)) {
*lenp = 0;
return 0;
}
if (!table->data || !table->maxlen || !*lenp ||
(*ppos && !write)) {
*lenp = 0;
return 0;
}
-
+
if (write) {
len = 0;
p = buffer;
if (write) {
len = 0;
p = buffer;
@@
-1409,20
+1421,20
@@
int proc_dostring(ctl_table *table, int write, struct file *filp,
break;
len++;
}
break;
len++;
}
- if (len >=
table->
maxlen)
- len =
table->
maxlen-1;
- if(copy_from_user(
table->
data, buffer, len))
+ if (len >= maxlen)
+ len = maxlen-1;
+ if(copy_from_user(data, buffer, len))
return -EFAULT;
return -EFAULT;
- ((char *)
table->
data)[len] = 0;
+ ((char *) data)[len] = 0;
*ppos += *lenp;
} else {
*ppos += *lenp;
} else {
- len = strlen(
table->
data);
- if (len >
table->
maxlen)
- len =
table->
maxlen;
+ len = strlen(data);
+ if (len > maxlen)
+ len = maxlen;
if (len > *lenp)
len = *lenp;
if (len)
if (len > *lenp)
len = *lenp;
if (len)
- if(copy_to_user(buffer,
table->
data, len))
+ if(copy_to_user(buffer, data, len))
return -EFAULT;
if (len < *lenp) {
if(put_user('\n', ((char __user *) buffer) + len))
return -EFAULT;
if (len < *lenp) {
if(put_user('\n', ((char __user *) buffer) + len))