mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-01 12:04:08 +00:00
sysctl: x86 Use the compat_sys_sysctl
Now that we have a generic 32bit compatibility implementation there is no need for x86 to implement it's own. Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Acked-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
This commit is contained in:
parent
03102a4ded
commit
c3359fbce4
3 changed files with 1 additions and 62 deletions
|
@ -653,7 +653,7 @@ ia32_sys_call_table:
|
||||||
.quad compat_sys_writev
|
.quad compat_sys_writev
|
||||||
.quad sys_getsid
|
.quad sys_getsid
|
||||||
.quad sys_fdatasync
|
.quad sys_fdatasync
|
||||||
.quad sys32_sysctl /* sysctl */
|
.quad compat_sys_sysctl /* sysctl */
|
||||||
.quad sys_mlock /* 150 */
|
.quad sys_mlock /* 150 */
|
||||||
.quad sys_munlock
|
.quad sys_munlock
|
||||||
.quad sys_mlockall
|
.quad sys_mlockall
|
||||||
|
|
|
@ -434,62 +434,6 @@ asmlinkage long sys32_rt_sigqueueinfo(int pid, int sig,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SYSCTL_SYSCALL
|
|
||||||
struct sysctl_ia32 {
|
|
||||||
unsigned int name;
|
|
||||||
int nlen;
|
|
||||||
unsigned int oldval;
|
|
||||||
unsigned int oldlenp;
|
|
||||||
unsigned int newval;
|
|
||||||
unsigned int newlen;
|
|
||||||
unsigned int __unused[4];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
asmlinkage long sys32_sysctl(struct sysctl_ia32 __user *args32)
|
|
||||||
{
|
|
||||||
struct sysctl_ia32 a32;
|
|
||||||
mm_segment_t old_fs = get_fs();
|
|
||||||
void __user *oldvalp, *newvalp;
|
|
||||||
size_t oldlen;
|
|
||||||
int __user *namep;
|
|
||||||
long ret;
|
|
||||||
|
|
||||||
if (copy_from_user(&a32, args32, sizeof(a32)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We need to pre-validate these because we have to disable
|
|
||||||
* address checking before calling do_sysctl() because of
|
|
||||||
* OLDLEN but we can't run the risk of the user specifying bad
|
|
||||||
* addresses here. Well, since we're dealing with 32 bit
|
|
||||||
* addresses, we KNOW that access_ok() will always succeed, so
|
|
||||||
* this is an expensive NOP, but so what...
|
|
||||||
*/
|
|
||||||
namep = compat_ptr(a32.name);
|
|
||||||
oldvalp = compat_ptr(a32.oldval);
|
|
||||||
newvalp = compat_ptr(a32.newval);
|
|
||||||
|
|
||||||
if ((oldvalp && get_user(oldlen, (int __user *)compat_ptr(a32.oldlenp)))
|
|
||||||
|| !access_ok(VERIFY_WRITE, namep, 0)
|
|
||||||
|| !access_ok(VERIFY_WRITE, oldvalp, 0)
|
|
||||||
|| !access_ok(VERIFY_WRITE, newvalp, 0))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
set_fs(KERNEL_DS);
|
|
||||||
lock_kernel();
|
|
||||||
ret = do_sysctl(namep, a32.nlen, oldvalp, (size_t __user *)&oldlen,
|
|
||||||
newvalp, (size_t) a32.newlen);
|
|
||||||
unlock_kernel();
|
|
||||||
set_fs(old_fs);
|
|
||||||
|
|
||||||
if (oldvalp && put_user(oldlen, (int __user *)compat_ptr(a32.oldlenp)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* warning: next two assume little endian */
|
/* warning: next two assume little endian */
|
||||||
asmlinkage long sys32_pread(unsigned int fd, char __user *ubuf, u32 count,
|
asmlinkage long sys32_pread(unsigned int fd, char __user *ubuf, u32 count,
|
||||||
u32 poslo, u32 poshi)
|
u32 poslo, u32 poshi)
|
||||||
|
|
|
@ -51,11 +51,6 @@ asmlinkage long sys32_sched_rr_get_interval(compat_pid_t,
|
||||||
asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *, compat_size_t);
|
asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *, compat_size_t);
|
||||||
asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *);
|
asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *);
|
||||||
|
|
||||||
#ifdef CONFIG_SYSCTL_SYSCALL
|
|
||||||
struct sysctl_ia32;
|
|
||||||
asmlinkage long sys32_sysctl(struct sysctl_ia32 __user *);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32);
|
asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32);
|
||||||
asmlinkage long sys32_pwrite(unsigned int, char __user *, u32, u32, u32);
|
asmlinkage long sys32_pwrite(unsigned int, char __user *, u32, u32, u32);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue