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

Commit 9216dfad authored by Christoph Lameter's avatar Christoph Lameter Committed by Linus Torvalds
Browse files

[PATCH] move_pages: fix 32 -> 64 bit compat function



The definition of the third parameter is a pointer to an array of virtual
addresses which give us some trouble.  The existing code calculated the
wrong address in the array since I used void to avoid having to specify a
type.

I now use the correct type "compat_uptr_t __user *" in the definition of
the function in kernel/compat.c.

However, I used __u32 in syscalls.h.  Would have to include compat.h there
in order to provide the same definition which would generate an ugly
include situation.

On both ia64 and x86_64 compat_uptr_t is u32. So this works although
parameter declarations differ.

Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 1b2db9fb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -522,7 +522,7 @@ asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages,
				int __user *status,
				int flags);
asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page,
				void __user *pages,
				__u32 __user *pages,
				const int __user *nodes,
				int __user *status,
				int flags);
+2 −2
Original line number Diff line number Diff line
@@ -938,7 +938,7 @@ asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp)

#ifdef CONFIG_NUMA
asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_pages,
		void __user *pages32,
		compat_uptr_t __user *pages32,
		const int __user *nodes,
		int __user *status,
		int flags)
@@ -950,7 +950,7 @@ asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_pages,
	for (i = 0; i < nr_pages; i++) {
		compat_uptr_t p;

		if (get_user(p, (compat_uptr_t *)(pages32 + i)) ||
		if (get_user(p, pages32 + i) ||
			put_user(compat_ptr(p), pages + i))
			return -EFAULT;
	}