linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-mm <linux-mm@kvack.org>,
	pageexec@freemail.hu, Solar Designer <solar@openwall.com>,
	Eugene Teo <eteo@redhat.com>,
	Brad Spengler <spender@grsecurity.net>,
	Roland McGrath <roland@redhat.com>,
	Milton Miller <miltonm@bga.com>
Subject: [PATCH 2/5] exec: introduce "bool compat" argument
Date: Fri, 25 Feb 2011 18:52:49 +0100	[thread overview]
Message-ID: <20110225175249.GC19059@redhat.com> (raw)
In-Reply-To: <20110225175202.GA19059@redhat.com>

No functional changes, preparation to simplify the review.

And the new (and currently unused) "bool compat" argument to
get_arg_ptr(), count(), and copy_strings().

Add this argument to do_execve() as well, and rename it to
do_execve_common().

Reintroduce do_execve() as a trivial wrapper() on top of
do_execve_common(compat => false).

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---

 fs/exec.c |   33 +++++++++++++++++++++------------
 1 file changed, 21 insertions(+), 12 deletions(-)

--- 38/fs/exec.c~2_is_compat_arg	2011-02-25 18:04:50.000000000 +0100
+++ 38/fs/exec.c	2011-02-25 18:05:05.000000000 +0100
@@ -396,7 +396,7 @@ err:
 }
 
 static const char __user *
-get_arg_ptr(const char __user * const __user *argv, int argc)
+get_arg_ptr(const char __user * const __user *argv, int argc, bool compat)
 {
 	const char __user *ptr;
 
@@ -409,13 +409,13 @@ get_arg_ptr(const char __user * const __
 /*
  * count() counts the number of strings in array ARGV.
  */
-static int count(const char __user * const __user * argv, int max)
+static int count(const char __user * const __user *argv, int max, bool compat)
 {
 	int i = 0;
 
 	if (argv != NULL) {
 		for (;;) {
-			const char __user *p = get_arg_ptr(argv, i);
+			const char __user *p = get_arg_ptr(argv, i, compat);
 
 			if (!p)
 				break;
@@ -440,7 +440,7 @@ static int count(const char __user * con
  * ensures the destination page is created and not swapped out.
  */
 static int copy_strings(int argc, const char __user *const __user *argv,
-			struct linux_binprm *bprm)
+			struct linux_binprm *bprm, bool compat)
 {
 	struct page *kmapped_page = NULL;
 	char *kaddr = NULL;
@@ -453,7 +453,7 @@ static int copy_strings(int argc, const 
 		unsigned long pos;
 
 		ret = -EFAULT;
-		str = get_arg_ptr(argv, argc);
+		str = get_arg_ptr(argv, argc, compat);
 		if (IS_ERR(str))
 			goto out;
 
@@ -536,7 +536,8 @@ int copy_strings_kernel(int argc, const 
 	int r;
 	mm_segment_t oldfs = get_fs();
 	set_fs(KERNEL_DS);
-	r = copy_strings(argc, (const char __user *const  __user *)argv, bprm);
+	r = copy_strings(argc, (const char __user *const  __user *)argv,
+				bprm, false);
 	set_fs(oldfs);
 	return r;
 }
@@ -1387,10 +1388,10 @@ EXPORT_SYMBOL(search_binary_handler);
 /*
  * sys_execve() executes a new program.
  */
-int do_execve(const char * filename,
+static int do_execve_common(const char *filename,
 	const char __user *const __user *argv,
 	const char __user *const __user *envp,
-	struct pt_regs * regs)
+	struct pt_regs *regs, bool compat)
 {
 	struct linux_binprm *bprm;
 	struct file *file;
@@ -1432,11 +1433,11 @@ int do_execve(const char * filename,
 	if (retval)
 		goto out_file;
 
-	bprm->argc = count(argv, MAX_ARG_STRINGS);
+	bprm->argc = count(argv, MAX_ARG_STRINGS, compat);
 	if ((retval = bprm->argc) < 0)
 		goto out;
 
-	bprm->envc = count(envp, MAX_ARG_STRINGS);
+	bprm->envc = count(envp, MAX_ARG_STRINGS, compat);
 	if ((retval = bprm->envc) < 0)
 		goto out;
 
@@ -1449,11 +1450,11 @@ int do_execve(const char * filename,
 		goto out;
 
 	bprm->exec = bprm->p;
-	retval = copy_strings(bprm->envc, envp, bprm);
+	retval = copy_strings(bprm->envc, envp, bprm, compat);
 	if (retval < 0)
 		goto out;
 
-	retval = copy_strings(bprm->argc, argv, bprm);
+	retval = copy_strings(bprm->argc, argv, bprm, compat);
 	if (retval < 0)
 		goto out;
 
@@ -1497,6 +1498,14 @@ out_ret:
 	return retval;
 }
 
+int do_execve(const char *filename,
+	const char __user *const __user *argv,
+	const char __user *const __user *envp,
+	struct pt_regs *regs)
+{
+	return do_execve_common(filename, argv, envp, regs, false);
+}
+
 void set_binfmt(struct linux_binfmt *new)
 {
 	struct mm_struct *mm = current->mm;

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2011-02-25 18:01 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-25  3:26 [resend][PATCH 1/4] oom: remove totalpage normalization from oom_badness() KOSAKI Motohiro
2010-10-25  3:27 ` [resend][PATCH 2/4] Revert "oom: deprecate oom_adj tunable" KOSAKI Motohiro
2010-10-25 20:40   ` David Rientjes
2010-10-26 13:01     ` KOSAKI Motohiro
2010-10-26 19:37       ` David Rientjes
2010-11-01  7:06         ` KOSAKI Motohiro
2010-11-01 19:36           ` David Rientjes
2010-11-09  2:26             ` KOSAKI Motohiro
2010-11-09  3:28               ` KOSAKI Motohiro
2010-11-15  0:24                 ` KOSAKI Motohiro
2010-11-15  9:59                   ` David Rientjes
2010-11-09 23:33               ` David Rientjes
2010-11-09 23:35                 ` Alan Cox
2010-11-09 23:48                   ` David Rientjes
2010-11-09 23:55                     ` [patch] oom: document obsolete oom_adj tunable David Rientjes
2010-11-15  0:22                       ` KOSAKI Motohiro
2010-11-15 10:38                         ` David Rientjes
2010-11-23  7:16                           ` KOSAKI Motohiro
2010-11-14  5:07                 ` [resend][PATCH 2/4] Revert "oom: deprecate oom_adj tunable" KOSAKI Motohiro
2010-11-14 21:39                   ` David Rientjes
2010-11-23  7:16                     ` KOSAKI Motohiro
2010-11-28  1:41                       ` David Rientjes
2010-11-30 13:03                         ` KOSAKI Motohiro
2010-11-30 20:07                           ` David Rientjes
2010-10-25  3:28 ` [resend][PATCH 3/4] move cred_guard_mutex from task_struct to signal_struct KOSAKI Motohiro
2010-10-25 17:26   ` Roland McGrath
2010-10-25 17:42     ` Oleg Nesterov
2010-10-25 17:51       ` Roland McGrath
2010-10-26 13:04         ` KOSAKI Motohiro
2010-10-26 13:18           ` Roland McGrath
2010-10-25  3:29 ` [resend][PATCH 4/4] oom: don't ignore rss in nascent mm KOSAKI Motohiro
2010-10-25 11:28   ` pageexec
2010-10-26  7:25     ` KOSAKI Motohiro
2010-11-23 14:34   ` Oleg Nesterov
2010-11-24  0:24     ` KOSAKI Motohiro
2010-11-24 11:09       ` Oleg Nesterov
2010-11-25 11:06         ` KOSAKI Motohiro
2010-11-25 14:02           ` Oleg Nesterov
2010-11-25 19:36             ` Oleg Nesterov
2010-11-29  5:25               ` KOSAKI Motohiro
2010-11-29 11:33                 ` Oleg Nesterov
2010-11-29 18:23                   ` Oleg Nesterov
2010-11-30 19:54                     ` [PATCH 0/2] exec: more excessive argument size fixes for 2.6.37/stable Oleg Nesterov
2010-11-30 19:55                       ` [PATCH 1/2] exec: make argv/envp memory visible to oom-killer Oleg Nesterov
2010-12-01  0:12                         ` KOSAKI Motohiro
2010-12-01 18:07                           ` Oleg Nesterov
2010-11-30 19:56                       ` [PATCH 2/2] exec: copy-and-paste the fixes into compat_do_execve() paths Oleg Nesterov
2010-12-01  3:04                         ` KOSAKI Motohiro
2010-11-30 20:00                       ` [PATCH 0/4] exec: unify compat/non-compat code Oleg Nesterov
2010-11-30 20:00                         ` [PATCH 1/4] exec: introduce get_arg_ptr() helper Oleg Nesterov
2010-11-30 20:01                         ` [PATCH 2/4] exec: introduce "bool compat" argument Oleg Nesterov
2010-11-30 20:01                         ` [PATCH 3/4] exec: unify compat_do_execve() code Oleg Nesterov
2010-12-01 17:37                           ` (No subject header) Milton Miller
2010-12-01 18:27                             ` Oleg Nesterov
2011-02-25 17:52                               ` [PATCH 0/4 RESEND] exec: unify compat/non-compat code Oleg Nesterov
2011-02-25 17:52                                 ` [PATCH 1/5] exec: introduce get_arg_ptr() helper Oleg Nesterov
2011-02-25 17:52                                 ` Oleg Nesterov [this message]
2011-02-25 18:57                                   ` [PATCH 2/5] exec: introduce "bool compat" argument Linus Torvalds
2011-02-26 12:37                                     ` Oleg Nesterov
2011-02-25 17:53                                 ` [PATCH 3/5] exec: unify compat_do_execve() code Oleg Nesterov
2011-02-25 19:10                                   ` Linus Torvalds
2011-02-26 12:37                                     ` Oleg Nesterov
2011-02-26 12:57                                       ` Oleg Nesterov
2011-02-26 15:55                                       ` Linus Torvalds
2011-02-26 17:44                                         ` Oleg Nesterov
2011-03-01 20:47                                           ` [PATCH v2 0/5] exec: unify native/compat code Oleg Nesterov
2011-03-01 20:48                                             ` [PATCH v2 1/5] exec: introduce get_arg_ptr() helper Oleg Nesterov
2011-03-01 20:48                                             ` [PATCH v2 2/5] exec: introduce "bool compat" argument Oleg Nesterov
2011-03-01 20:48                                             ` [PATCH v2 3/5] exec: introduce conditional_user_ptr_t Oleg Nesterov
2011-03-01 20:49                                             ` [PATCH v2 4/5] exec: unify do_execve/compat_do_execve code Oleg Nesterov
2011-03-01 20:49                                             ` [PATCH v2 5/5] exec: document acct_arg_size() Oleg Nesterov
2011-03-01 21:39                                             ` [PATCH v2 0/5] exec: unify native/compat code Linus Torvalds
2011-03-02 16:26                                               ` [PATCH v3 0/4] " Oleg Nesterov
2011-03-02 16:27                                                 ` [PATCH v3 1/4] exec: introduce get_arg_ptr() helper Oleg Nesterov
2011-03-03  3:01                                                   ` KOSAKI Motohiro
2011-03-03 15:47                                                     ` Oleg Nesterov
2011-03-03 16:07                                                       ` Linus Torvalds
2011-03-05 20:30                                                         ` [PATCH v4 0/4] exec: unify native/compat code Oleg Nesterov
2011-03-05 20:31                                                           ` [PATCH v4 1/4] exec: introduce get_user_arg_ptr() helper Oleg Nesterov
2011-03-05 20:31                                                           ` [PATCH v4 2/4] exec: introduce struct user_arg_ptr Oleg Nesterov
2011-03-05 20:31                                                           ` [PATCH v4 3/4] exec: unify do_execve/compat_do_execve code Oleg Nesterov
2011-03-05 20:52                                                             ` Linus Torvalds
2011-03-05 21:20                                                               ` Oleg Nesterov
2011-03-05 20:31                                                           ` [PATCH v4 4/4] exec: document acct_arg_size() Oleg Nesterov
2011-03-06 12:04                                                           ` [PATCH v4 0/4] exec: unify native/compat code KOSAKI Motohiro
2011-03-06 17:01                                                             ` [PATCH v5 " Oleg Nesterov
2011-03-06 17:02                                                               ` [PATCH v5 1/4] exec: introduce get_user_arg_ptr() helper Oleg Nesterov
2011-03-06 17:02                                                               ` [PATCH v5 2/4] exec: introduce struct user_arg_ptr Oleg Nesterov
2011-03-06 17:02                                                               ` [PATCH v5 3/4] exec: unify do_execve/compat_do_execve code Oleg Nesterov
2011-03-06 17:03                                                               ` [PATCH v5 4/4] exec: document acct_arg_size() Oleg Nesterov
2011-03-02 16:27                                                 ` [PATCH v3 2/4] exec: introduce struct conditional_ptr Oleg Nesterov
2011-03-03  3:08                                                   ` KOSAKI Motohiro
2011-03-02 16:27                                                 ` [PATCH v3 3/4] exec: unify do_execve/compat_do_execve code Oleg Nesterov
2011-03-03  3:13                                                   ` KOSAKI Motohiro
2011-03-02 16:28                                                 ` [PATCH v3 4/4] exec: document acct_arg_size() Oleg Nesterov
2011-03-03  3:09                                                   ` KOSAKI Motohiro
2011-03-02 16:44                                                 ` [PATCH v3 0/4] exec: unify native/compat code Oleg Nesterov
2011-03-02 18:00                                                   ` Linus Torvalds
2011-03-02 19:40                                                     ` David Miller
2011-03-02 19:48                                                       ` Linus Torvalds
2011-03-02 19:54                                                         ` David Miller
2011-02-25 17:53                                 ` [PATCH 4/5] exec: unexport acct_arg_size() and get_arg_page() Oleg Nesterov
2011-02-25 17:54                                 ` [PATCH 5/5] exec: document acct_arg_size() Oleg Nesterov
2011-02-25 18:54                                 ` [PATCH 0/4 RESEND] exec: unify compat/non-compat code Linus Torvalds
2011-02-26 12:35                                   ` Oleg Nesterov
2010-11-30 20:01                         ` [PATCH 4/4] exec: unexport acct_arg_size() and get_arg_page() Oleg Nesterov
2010-12-01  3:09                         ` [PATCH 0/4] exec: unify compat/non-compat code KOSAKI Motohiro
2010-11-30  0:06                   ` [resend][PATCH 4/4] oom: don't ignore rss in nascent mm KOSAKI Motohiro
2010-10-25 20:37 ` [resend][PATCH 1/4] oom: remove totalpage normalization from oom_badness() David Rientjes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110225175249.GC19059@redhat.com \
    --to=oleg@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=eteo@redhat.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=miltonm@bga.com \
    --cc=pageexec@freemail.hu \
    --cc=roland@redhat.com \
    --cc=solar@openwall.com \
    --cc=spender@grsecurity.net \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).