Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2cf09666 authored by Al Viro's avatar Al Viro
Browse files

make SYSCALL_DEFINE<n>-generated wrappers do asmlinkage_protect



... and switch i386 to HAVE_SYSCALL_WRAPPERS, killing open-coded
uses of asmlinkage_protect() in a bunch of syscalls.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 22d1a35d
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -27,8 +27,8 @@ asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
long sys_rt_sigreturn(void);
long sys_rt_sigreturn(void);


/* kernel/tls.c */
/* kernel/tls.c */
asmlinkage int sys_set_thread_area(struct user_desc __user *);
asmlinkage long sys_set_thread_area(struct user_desc __user *);
asmlinkage int sys_get_thread_area(struct user_desc __user *);
asmlinkage long sys_get_thread_area(struct user_desc __user *);


/* X86_32 only */
/* X86_32 only */
#ifdef CONFIG_X86_32
#ifdef CONFIG_X86_32
+5 −9
Original line number Original line Diff line number Diff line
@@ -3,13 +3,13 @@
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/user.h>
#include <linux/user.h>
#include <linux/regset.h>
#include <linux/regset.h>
#include <linux/syscalls.h>


#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <asm/desc.h>
#include <asm/desc.h>
#include <asm/ldt.h>
#include <asm/ldt.h>
#include <asm/processor.h>
#include <asm/processor.h>
#include <asm/proto.h>
#include <asm/proto.h>
#include <asm/syscalls.h>


#include "tls.h"
#include "tls.h"


@@ -89,11 +89,9 @@ int do_set_thread_area(struct task_struct *p, int idx,
	return 0;
	return 0;
}
}


asmlinkage int sys_set_thread_area(struct user_desc __user *u_info)
SYSCALL_DEFINE1(set_thread_area, struct user_desc __user *, u_info)
{
{
	int ret = do_set_thread_area(current, -1, u_info, 1);
	return do_set_thread_area(current, -1, u_info, 1);
	asmlinkage_protect(1, ret, u_info);
	return ret;
}
}




@@ -139,11 +137,9 @@ int do_get_thread_area(struct task_struct *p, int idx,
	return 0;
	return 0;
}
}


asmlinkage int sys_get_thread_area(struct user_desc __user *u_info)
SYSCALL_DEFINE1(get_thread_area, struct user_desc __user *, u_info)
{
{
	int ret = do_get_thread_area(current, -1, u_info);
	return do_get_thread_area(current, -1, u_info);
	asmlinkage_protect(1, ret, u_info);
	return ret;
}
}


int regset_tls_active(struct task_struct *target,
int regset_tls_active(struct task_struct *target,
+3 −2
Original line number Original line Diff line number Diff line
@@ -5,6 +5,7 @@


#include <linux/percpu.h>
#include <linux/percpu.h>
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/syscalls.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <os.h>
#include <os.h>
#include <skas.h>
#include <skas.h>
@@ -274,7 +275,7 @@ static int get_tls_entry(struct task_struct *task, struct user_desc *info,
	goto out;
	goto out;
}
}


int sys_set_thread_area(struct user_desc __user *user_desc)
SYSCALL_DEFINE1(set_thread_area, struct user_desc __user *, user_desc)
{
{
	struct user_desc info;
	struct user_desc info;
	int idx, ret;
	int idx, ret;
@@ -322,7 +323,7 @@ int ptrace_set_thread_area(struct task_struct *child, int idx,
	return set_tls_entry(child, &info, idx, 0);
	return set_tls_entry(child, &info, idx, 0);
}
}


int sys_get_thread_area(struct user_desc __user *user_desc)
SYSCALL_DEFINE1(get_thread_area, struct user_desc __user *, user_desc)
{
{
	struct user_desc info;
	struct user_desc info;
	int idx, ret;
	int idx, ret;
+0 −2
Original line number Original line Diff line number Diff line
@@ -1790,7 +1790,5 @@ SYSCALL_DEFINE5(io_getevents, aio_context_t, ctx_id,
			ret = read_events(ioctx, min_nr, nr, events, timeout);
			ret = read_events(ioctx, min_nr, nr, events, timeout);
		put_ioctx(ioctx);
		put_ioctx(ioctx);
	}
	}

	asmlinkage_protect(5, ret, ctx_id, min_nr, nr, events, timeout);
	return ret;
	return ret;
}
}
+4 −20
Original line number Original line Diff line number Diff line
@@ -197,10 +197,7 @@ static long do_sys_ftruncate(unsigned int fd, loff_t length, int small)


SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length)
SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length)
{
{
	long ret = do_sys_ftruncate(fd, length, 1);
	return do_sys_ftruncate(fd, length, 1);
	/* avoid REGPARM breakage on x86: */
	asmlinkage_protect(2, ret, fd, length);
	return ret;
}
}


#ifdef CONFIG_COMPAT
#ifdef CONFIG_COMPAT
@@ -219,10 +216,7 @@ SYSCALL_DEFINE2(truncate64, const char __user *, path, loff_t, length)


SYSCALL_DEFINE2(ftruncate64, unsigned int, fd, loff_t, length)
SYSCALL_DEFINE2(ftruncate64, unsigned int, fd, loff_t, length)
{
{
	long ret = do_sys_ftruncate(fd, length, 0);
	return do_sys_ftruncate(fd, length, 0);
	/* avoid REGPARM breakage on x86: */
	asmlinkage_protect(2, ret, fd, length);
	return ret;
}
}
#endif /* BITS_PER_LONG == 32 */
#endif /* BITS_PER_LONG == 32 */


@@ -961,29 +955,19 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)


SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
{
	long ret;

	if (force_o_largefile())
	if (force_o_largefile())
		flags |= O_LARGEFILE;
		flags |= O_LARGEFILE;


	ret = do_sys_open(AT_FDCWD, filename, flags, mode);
	return do_sys_open(AT_FDCWD, filename, flags, mode);
	/* avoid REGPARM breakage on x86: */
	asmlinkage_protect(3, ret, filename, flags, mode);
	return ret;
}
}


SYSCALL_DEFINE4(openat, int, dfd, const char __user *, filename, int, flags,
SYSCALL_DEFINE4(openat, int, dfd, const char __user *, filename, int, flags,
		umode_t, mode)
		umode_t, mode)
{
{
	long ret;

	if (force_o_largefile())
	if (force_o_largefile())
		flags |= O_LARGEFILE;
		flags |= O_LARGEFILE;


	ret = do_sys_open(dfd, filename, flags, mode);
	return do_sys_open(dfd, filename, flags, mode);
	/* avoid REGPARM breakage on x86: */
	asmlinkage_protect(4, ret, dfd, filename, flags, mode);
	return ret;
}
}


#ifndef __alpha__
#ifndef __alpha__
Loading