exec: unify do_execve/compat_do_execve code
authorOleg Nesterov <oleg@redhat.com>
Sun, 6 Mar 2011 17:02:54 +0000 (18:02 +0100)
committerOleg Nesterov <oleg@redhat.com>
Sat, 9 Apr 2011 13:53:56 +0000 (15:53 +0200)
commit0e028465d18b7c6797fcbdea632299d16097c5cd
treed03a1f0f688e9c4a780b2a1a3ef8354378b0ad42
parentba2d01629d0d167598cfea85adc7926822bbfc45
exec: unify do_execve/compat_do_execve code

Add the appropriate members into struct user_arg_ptr and teach
get_user_arg_ptr() to handle is_compat = T case correctly.

This allows us to remove the compat_do_execve() code from fs/compat.c
and reimplement compat_do_execve() as the trivial wrapper on top of
do_execve_common(is_compat => true).

In fact, this fixes another (minor) bug. "compat_uptr_t str" can
overflow after "str += len" in compat_copy_strings() if a 64bit
application execs via sys32_execve().

Unexport acct_arg_size() and get_arg_page(), fs/compat.c doesn't
need them any longer.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Tested-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
fs/compat.c
fs/exec.c
include/linux/binfmts.h