--- linux-2.6.12.2/arch/i386/kernel/sys_i386.c 2004-08-14 12:56:23 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/i386/kernel/sys_i386.c 2005-07-02 22:38:30 +0200 @@ -217,7 +218,7 @@ asmlinkage int sys_uname(struct old_utsn if (!name) return -EFAULT; down_read(&uts_sem); - err=copy_to_user(name, &system_utsname, sizeof (*name)); + err=copy_to_user(name, vx_new_utsname(), sizeof (*name)); up_read(&uts_sem); return err?-EFAULT:0; } --- linux-2.6.12.2/arch/i386/kernel/sys_i386.c 2004-08-14 12:56:23 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/i386/kernel/sys_i386.c 2005-07-02 22:38:30 +0200 @@ -225,6 +226,7 @@ asmlinkage int sys_uname(struct old_utsn asmlinkage int sys_olduname(struct oldold_utsname __user * name) { int error; + struct new_utsname *ptr; if (!name) return -EFAULT; --- linux-2.6.12.2/arch/i386/kernel/sys_i386.c 2004-08-14 12:56:23 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/i386/kernel/sys_i386.c 2005-07-02 22:38:30 +0200 @@ -233,15 +235,16 @@ asmlinkage int sys_olduname(struct oldol down_read(&uts_sem); - error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN); + ptr = vx_new_utsname(); + error = __copy_to_user(&name->sysname,ptr->sysname,__OLD_UTS_LEN); error |= __put_user(0,name->sysname+__OLD_UTS_LEN); - error |= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN); + error |= __copy_to_user(&name->nodename,ptr->nodename,__OLD_UTS_LEN); error |= __put_user(0,name->nodename+__OLD_UTS_LEN); - error |= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN); + error |= __copy_to_user(&name->release,ptr->release,__OLD_UTS_LEN); error |= __put_user(0,name->release+__OLD_UTS_LEN); - error |= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN); + error |= __copy_to_user(&name->version,ptr->version,__OLD_UTS_LEN); error |= __put_user(0,name->version+__OLD_UTS_LEN); - error |= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN); + error |= __copy_to_user(&name->machine,ptr->machine,__OLD_UTS_LEN); error |= __put_user(0,name->machine+__OLD_UTS_LEN); up_read(&uts_sem); --- linux-2.6.12.2/arch/mips/kernel/linux32.c 2005-06-22 02:37:55 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/mips/kernel/linux32.c 2005-07-02 22:38:30 +0200 @@ -1199,7 +1199,7 @@ asmlinkage long sys32_newuname(struct ne int ret = 0; down_read(&uts_sem); - if (copy_to_user(name,&system_utsname,sizeof *name)) + if (copy_to_user(name, vx_new_utsname(), sizeof *name)) ret = -EFAULT; up_read(&uts_sem); --- linux-2.6.12.2/arch/mips/kernel/syscall.c 2005-06-22 02:37:55 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/mips/kernel/syscall.c 2005-07-02 22:38:30 +0200 @@ -210,7 +211,7 @@ out: */ asmlinkage int sys_uname(struct old_utsname * name) { - if (name && !copy_to_user(name, &system_utsname, sizeof (*name))) + if (name && !copy_to_user(name, vx_new_utsname(), sizeof (*name))) return 0; return -EFAULT; } --- linux-2.6.12.2/arch/mips/kernel/syscall.c 2005-06-22 02:37:55 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/mips/kernel/syscall.c 2005-07-02 22:38:30 +0200 @@ -221,21 +222,23 @@ asmlinkage int sys_uname(struct old_utsn asmlinkage int sys_olduname(struct oldold_utsname * name) { int error; + struct new_utsname *ptr; if (!name) return -EFAULT; if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname))) return -EFAULT; - error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN); + ptr = vx_new_utsname(); + error = __copy_to_user(&name->sysname,ptr->sysname,__OLD_UTS_LEN); error -= __put_user(0,name->sysname+__OLD_UTS_LEN); - error -= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN); + error -= __copy_to_user(&name->nodename,ptr->nodename,__OLD_UTS_LEN); error -= __put_user(0,name->nodename+__OLD_UTS_LEN); - error -= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN); + error -= __copy_to_user(&name->release,ptr->release,__OLD_UTS_LEN); error -= __put_user(0,name->release+__OLD_UTS_LEN); - error -= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN); + error -= __copy_to_user(&name->version,ptr->version,__OLD_UTS_LEN); error -= __put_user(0,name->version+__OLD_UTS_LEN); - error -= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN); + error -= __copy_to_user(&name->machine,ptr->machine,__OLD_UTS_LEN); error = __put_user(0,name->machine+__OLD_UTS_LEN); error = error ? -EFAULT : 0; --- linux-2.6.12.2/arch/mips/kernel/syscall.c 2005-06-22 02:37:55 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/mips/kernel/syscall.c 2005-07-02 22:38:30 +0200 @@ -261,10 +264,10 @@ asmlinkage int _sys_sysmips(int cmd, lon return -EFAULT; down_write(&uts_sem); - strncpy(system_utsname.nodename, nodename, len); + strncpy(vx_new_uts(nodename), nodename, len); nodename[__NEW_UTS_LEN] = '\0'; - strlcpy(system_utsname.nodename, nodename, - sizeof(system_utsname.nodename)); + strlcpy(vx_new_uts(nodename), nodename, + sizeof(vx_new_uts(nodename))); up_write(&uts_sem); return 0; } --- linux-2.6.12.2/arch/ppc/kernel/syscalls.c 2005-06-22 02:37:56 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/ppc/kernel/syscalls.c 2005-07-02 22:38:30 +0200 @@ -229,7 +230,7 @@ int sys_uname(struct old_utsname __user int err = -EFAULT; down_read(&uts_sem); - if (name && !copy_to_user(name, &system_utsname, sizeof (*name))) + if (name && !copy_to_user(name, vx_new_utsname(), sizeof (*name))) err = 0; up_read(&uts_sem); return err; --- linux-2.6.12.2/arch/ppc/kernel/syscalls.c 2005-06-22 02:37:56 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/ppc/kernel/syscalls.c 2005-07-02 22:38:30 +0200 @@ -238,6 +239,7 @@ int sys_uname(struct old_utsname __user int sys_olduname(struct oldold_utsname __user * name) { int error; + struct new_utsname *ptr; if (!name) return -EFAULT; --- linux-2.6.12.2/arch/ppc/kernel/syscalls.c 2005-06-22 02:37:56 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/ppc/kernel/syscalls.c 2005-07-02 22:38:30 +0200 @@ -245,15 +247,16 @@ int sys_olduname(struct oldold_utsname _ return -EFAULT; down_read(&uts_sem); - error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN); + ptr = vx_new_utsname(); + error = __copy_to_user(&name->sysname,ptr->sysname,__OLD_UTS_LEN); error -= __put_user(0,name->sysname+__OLD_UTS_LEN); - error -= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN); + error -= __copy_to_user(&name->nodename,ptr->nodename,__OLD_UTS_LEN); error -= __put_user(0,name->nodename+__OLD_UTS_LEN); - error -= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN); + error -= __copy_to_user(&name->release,ptr->release,__OLD_UTS_LEN); error -= __put_user(0,name->release+__OLD_UTS_LEN); - error -= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN); + error -= __copy_to_user(&name->version,ptr->version,__OLD_UTS_LEN); error -= __put_user(0,name->version+__OLD_UTS_LEN); - error -= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN); + error -= __copy_to_user(&name->machine,ptr->machine,__OLD_UTS_LEN); error = __put_user(0,name->machine+__OLD_UTS_LEN); up_read(&uts_sem); --- linux-2.6.12.2/arch/ppc64/kernel/sys_ppc32.c 2005-06-22 02:37:58 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/ppc64/kernel/sys_ppc32.c 2005-07-02 22:38:30 +0200 @@ -1138,7 +1138,7 @@ asmlinkage int sys32_uname(struct old_ut int err = 0; down_read(&uts_sem); - if (copy_to_user(name, &system_utsname, sizeof(*name))) + if (copy_to_user(name, vx_new_utsname(), sizeof(*name))) err = -EFAULT; up_read(&uts_sem); if (!err && personality(current->personality) == PER_LINUX32) { --- linux-2.6.12.2/arch/ppc64/kernel/sys_ppc32.c 2005-06-22 02:37:58 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/ppc64/kernel/sys_ppc32.c 2005-07-02 22:38:30 +0200 @@ -1153,20 +1153,22 @@ asmlinkage int sys32_uname(struct old_ut asmlinkage int sys32_olduname(struct oldold_utsname __user * name) { int error; + struct new_utsname *ptr; if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname))) return -EFAULT; down_read(&uts_sem); - error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN); + ptr = vx_new_utsname(); + error = __copy_to_user(&name->sysname,ptr->sysname,__OLD_UTS_LEN); error |= __put_user(0,name->sysname+__OLD_UTS_LEN); - error |= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN); + error |= __copy_to_user(&name->nodename,ptr->nodename,__OLD_UTS_LEN); error |= __put_user(0,name->nodename+__OLD_UTS_LEN); - error |= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN); + error |= __copy_to_user(&name->release,ptr->release,__OLD_UTS_LEN); error |= __put_user(0,name->release+__OLD_UTS_LEN); - error |= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN); + error |= __copy_to_user(&name->version,ptr->version,__OLD_UTS_LEN); error |= __put_user(0,name->version+__OLD_UTS_LEN); - error |= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN); + error |= __copy_to_user(&name->machine,ptr->machine,__OLD_UTS_LEN); error |= __put_user(0,name->machine+__OLD_UTS_LEN); if (personality(current->personality) == PER_LINUX32) { /* change "ppc64" to "ppc" */ --- linux-2.6.12.2/arch/sparc/kernel/sys_sparc.c 2005-06-22 02:37:59 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/sparc/kernel/sys_sparc.c 2005-07-02 22:38:30 +0200 @@ -470,13 +471,13 @@ asmlinkage int sys_getdomainname(char __ down_read(&uts_sem); - nlen = strlen(system_utsname.domainname) + 1; + nlen = strlen(vx_new_uts(domainname)) + 1; if (nlen < len) len = nlen; if (len > __NEW_UTS_LEN) goto done; - if (copy_to_user(name, system_utsname.domainname, len)) + if (copy_to_user(name, vx_new_uts(domainname), len)) goto done; err = 0; done: --- linux-2.6.12.2/arch/sparc64/kernel/sys_sparc.c 2005-03-02 12:38:25 +0100 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/sparc64/kernel/sys_sparc.c 2005-07-02 22:38:30 +0200 @@ -468,13 +469,13 @@ asmlinkage long sys_getdomainname(char _ down_read(&uts_sem); - nlen = strlen(system_utsname.domainname) + 1; + nlen = strlen(vx_new_uts(domainname)) + 1; if (nlen < len) len = nlen; if (len > __NEW_UTS_LEN) goto done; - if (copy_to_user(name, system_utsname.domainname, len)) + if (copy_to_user(name, vx_new_uts(domainname), len)) goto done; err = 0; done: --- linux-2.6.12.2/arch/um/kernel/syscall_kern.c 2005-06-22 02:38:00 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/um/kernel/syscall_kern.c 2005-07-02 22:38:30 +0200 @@ -108,7 +110,7 @@ long sys_uname(struct old_utsname * name if (!name) return -EFAULT; down_read(&uts_sem); - err=copy_to_user(name, &system_utsname, sizeof (*name)); + err=copy_to_user(name, vx_new_utsname(), sizeof (*name)); up_read(&uts_sem); return err?-EFAULT:0; } --- linux-2.6.12.2/arch/um/kernel/syscall_kern.c 2005-06-22 02:38:00 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/um/kernel/syscall_kern.c 2005-07-02 22:38:30 +0200 @@ -116,6 +118,7 @@ long sys_uname(struct old_utsname * name long sys_olduname(struct oldold_utsname * name) { long error; + struct new_utsname *ptr; if (!name) return -EFAULT; --- linux-2.6.12.2/arch/um/kernel/syscall_kern.c 2005-06-22 02:38:00 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/um/kernel/syscall_kern.c 2005-07-02 22:38:30 +0200 @@ -124,19 +127,20 @@ long sys_olduname(struct oldold_utsname down_read(&uts_sem); - error = __copy_to_user(&name->sysname,&system_utsname.sysname, + ptr = vx_new_utsname(); + error = __copy_to_user(&name->sysname,ptr->sysname, __OLD_UTS_LEN); error |= __put_user(0,name->sysname+__OLD_UTS_LEN); - error |= __copy_to_user(&name->nodename,&system_utsname.nodename, + error |= __copy_to_user(&name->nodename,ptr->nodename, __OLD_UTS_LEN); error |= __put_user(0,name->nodename+__OLD_UTS_LEN); - error |= __copy_to_user(&name->release,&system_utsname.release, + error |= __copy_to_user(&name->release,ptr->release, __OLD_UTS_LEN); error |= __put_user(0,name->release+__OLD_UTS_LEN); - error |= __copy_to_user(&name->version,&system_utsname.version, + error |= __copy_to_user(&name->version,ptr->version, __OLD_UTS_LEN); error |= __put_user(0,name->version+__OLD_UTS_LEN); - error |= __copy_to_user(&name->machine,&system_utsname.machine, + error |= __copy_to_user(&name->machine,ptr->machine, __OLD_UTS_LEN); error |= __put_user(0,name->machine+__OLD_UTS_LEN); --- linux-2.6.12.2/arch/x86_64/ia32/sys_ia32.c 2005-06-22 02:38:01 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/x86_64/ia32/sys_ia32.c 2005-07-02 22:38:30 +0200 @@ -859,6 +859,7 @@ asmlinkage long sys32_mmap2(unsigned lon asmlinkage long sys32_olduname(struct oldold_utsname __user * name) { int error; + struct new_utsname *ptr; if (!name) return -EFAULT; --- linux-2.6.12.2/arch/x86_64/ia32/sys_ia32.c 2005-06-22 02:38:01 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/x86_64/ia32/sys_ia32.c 2005-07-02 22:38:30 +0200 @@ -867,13 +868,14 @@ asmlinkage long sys32_olduname(struct ol down_read(&uts_sem); - error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN); + ptr = vx_new_utsname(); + error = __copy_to_user(&name->sysname,ptr->sysname,__OLD_UTS_LEN); __put_user(0,name->sysname+__OLD_UTS_LEN); - __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN); + __copy_to_user(&name->nodename,ptr->nodename,__OLD_UTS_LEN); __put_user(0,name->nodename+__OLD_UTS_LEN); - __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN); + __copy_to_user(&name->release,ptr->release,__OLD_UTS_LEN); __put_user(0,name->release+__OLD_UTS_LEN); - __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN); + __copy_to_user(&name->version,ptr->version,__OLD_UTS_LEN); __put_user(0,name->version+__OLD_UTS_LEN); { char *arch = "x86_64"; --- linux-2.6.12.2/arch/x86_64/ia32/sys_ia32.c 2005-06-22 02:38:01 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/x86_64/ia32/sys_ia32.c 2005-07-02 22:38:30 +0200 @@ -896,7 +898,7 @@ long sys32_uname(struct old_utsname __us if (!name) return -EFAULT; down_read(&uts_sem); - err=copy_to_user(name, &system_utsname, sizeof (*name)); + err=copy_to_user(name, vx_new_utsname(), sizeof (*name)); up_read(&uts_sem); if (personality(current->personality) == PER_LINUX32) err |= copy_to_user(&name->machine, "i686", 5); --- linux-2.6.12.2/arch/x86_64/kernel/sys_x86_64.c 2005-06-22 02:38:01 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/arch/x86_64/kernel/sys_x86_64.c 2005-07-02 22:38:30 +0200 @@ -145,7 +146,7 @@ asmlinkage long sys_uname(struct new_uts { int err; down_read(&uts_sem); - err = copy_to_user(name, &system_utsname, sizeof (*name)); + err = copy_to_user(name, vx_new_utsname(), sizeof (*name)); up_read(&uts_sem); if (personality(current->personality) == PER_LINUX32) err |= copy_to_user(&name->machine, "i686", 5); --- linux-2.6.12.2/fs/nfs/nfsroot.c 2005-06-22 02:38:37 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/fs/nfs/nfsroot.c 2005-07-02 22:38:30 +0200 @@ -301,7 +307,7 @@ static int __init root_nfs_name(char *na /* Override them by options set on kernel command-line */ root_nfs_parse(name, buf); - cp = system_utsname.nodename; + cp = vx_new_uts(nodename); if (strlen(buf) + strlen(cp) > NFS_MAXPATHLEN) { printk(KERN_ERR "Root-NFS: Pathname for remote directory too long.\n"); return -1; --- linux-2.6.12.2/kernel/sys.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sys.c 2005-07-02 22:38:30 +0200 @@ -1370,7 +1384,7 @@ asmlinkage long sys_newuname(struct new_ int errno = 0; down_read(&uts_sem); - if (copy_to_user(name,&system_utsname,sizeof *name)) + if (copy_to_user(name, vx_new_utsname(), sizeof *name)) errno = -EFAULT; up_read(&uts_sem); return errno; --- linux-2.6.12.2/kernel/sys.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sys.c 2005-07-02 22:38:30 +0200 @@ -1381,15 +1395,17 @@ asmlinkage long sys_sethostname(char __u int errno; char tmp[__NEW_UTS_LEN]; - if (!capable(CAP_SYS_ADMIN)) + if (!capable(CAP_SYS_ADMIN) && !vx_ccaps(VXC_SET_UTSNAME)) return -EPERM; if (len < 0 || len > __NEW_UTS_LEN) return -EINVAL; down_write(&uts_sem); errno = -EFAULT; if (!copy_from_user(tmp, name, len)) { - memcpy(system_utsname.nodename, tmp, len); - system_utsname.nodename[len] = 0; + char *ptr = vx_new_uts(nodename); + + memcpy(ptr, tmp, len); + ptr[len] = 0; errno = 0; } up_write(&uts_sem); --- linux-2.6.12.2/kernel/sys.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sys.c 2005-07-02 22:38:30 +0200 @@ -1401,15 +1417,17 @@ asmlinkage long sys_sethostname(char __u asmlinkage long sys_gethostname(char __user *name, int len) { int i, errno; + char *ptr; if (len < 0) return -EINVAL; down_read(&uts_sem); - i = 1 + strlen(system_utsname.nodename); + ptr = vx_new_uts(nodename); + i = 1 + strlen(ptr); if (i > len) i = len; errno = 0; - if (copy_to_user(name, system_utsname.nodename, i)) + if (copy_to_user(name, ptr, i)) errno = -EFAULT; up_read(&uts_sem); return errno; --- linux-2.6.12.2/kernel/sys.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sys.c 2005-07-02 22:38:30 +0200 @@ -1426,7 +1444,7 @@ asmlinkage long sys_setdomainname(char _ int errno; char tmp[__NEW_UTS_LEN]; - if (!capable(CAP_SYS_ADMIN)) + if (!capable(CAP_SYS_ADMIN) && !vx_ccaps(VXC_SET_UTSNAME)) return -EPERM; if (len < 0 || len > __NEW_UTS_LEN) return -EINVAL; --- linux-2.6.12.2/kernel/sys.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sys.c 2005-07-02 22:38:30 +0200 @@ -1434,8 +1452,10 @@ asmlinkage long sys_setdomainname(char _ down_write(&uts_sem); errno = -EFAULT; if (!copy_from_user(tmp, name, len)) { - memcpy(system_utsname.domainname, tmp, len); - system_utsname.domainname[len] = 0; + char *ptr = vx_new_uts(domainname); + + memcpy(ptr, tmp, len); + ptr[len] = 0; errno = 0; } up_write(&uts_sem); --- linux-2.6.12.2/kernel/sysctl.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sysctl.c 2005-07-02 22:38:30 +0200 @@ -228,6 +230,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof(system_utsname.sysname), .mode = 0444, .proc_handler = &proc_doutsstring, + .virt_handler = &vx_uts_virt_handler, .strategy = &sysctl_string, }, { --- linux-2.6.12.2/kernel/sysctl.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sysctl.c 2005-07-02 22:38:30 +0200 @@ -237,6 +240,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof(system_utsname.release), .mode = 0444, .proc_handler = &proc_doutsstring, + .virt_handler = &vx_uts_virt_handler, .strategy = &sysctl_string, }, { --- linux-2.6.12.2/kernel/sysctl.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sysctl.c 2005-07-02 22:38:30 +0200 @@ -246,6 +250,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof(system_utsname.version), .mode = 0444, .proc_handler = &proc_doutsstring, + .virt_handler = &vx_uts_virt_handler, .strategy = &sysctl_string, }, { --- linux-2.6.12.2/kernel/sysctl.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sysctl.c 2005-07-02 22:38:30 +0200 @@ -255,6 +260,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof(system_utsname.nodename), .mode = 0644, .proc_handler = &proc_doutsstring, + .virt_handler = &vx_uts_virt_handler, .strategy = &sysctl_string, }, { --- linux-2.6.12.2/kernel/sysctl.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/sysctl.c 2005-07-02 22:38:30 +0200 @@ -264,6 +270,7 @@ static ctl_table kern_table[] = { .maxlen = sizeof(system_utsname.domainname), .mode = 0644, .proc_handler = &proc_doutsstring, + .virt_handler = &vx_uts_virt_handler, .strategy = &sysctl_string, }, { diff -NurpP --minimal linux-2.6.12.2-vs2.0-rc6.1/drivers/char/random.c linux-2.6.12.2-vs2.0-rc6.2/drivers/char/random.c --- linux-2.6.12.2-vs2.0-rc6.1/drivers/char/random.c 2005-06-22 02:38:04 +0200 +++ linux-2.6.12.2-vs2.0-rc6.2/drivers/char/random.c 2005-07-12 01:18:13 +0200 @@ -1174,7 +1174,7 @@ static char sysctl_bootid[16]; static int proc_do_uuid(ctl_table *table, int write, struct file *filp, void __user *buffer, size_t *lenp, loff_t *ppos) { - ctl_table fake_table; + ctl_table fake_table = {0}; unsigned char buf[64], tmp_uuid[16], *uuid; uuid = table->data; diff -NurpP --minimal linux-2.6.12.2-vs2.0-rc6.1/kernel/sysctl.c linux-2.6.12.2-vs2.0-rc6.2/kernel/sysctl.c --- linux-2.6.12.2-vs2.0-rc6.1/kernel/sysctl.c 2005-07-02 22:38:30 +0200 +++ linux-2.6.12.2-vs2.0-rc6.2/kernel/sysctl.c 2005-07-12 01:21:45 +0200 @@ -1414,8 +1414,6 @@ int proc_dostring(ctl_table *table, int 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)) { @@ -1423,6 +1421,9 @@ int proc_dostring(ctl_table *table, int return 0; } + if (table->virt_handler) + table->virt_handler(table, write, filp->f_xid, &data, &maxlen); + if (write) { len = 0; p = buffer;