public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andy Lutomirski <luto@myrealbox.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: Andi Kleen <ak@suse.de>,
	torvalds@osdl.org, linux-kernel@vger.kernel.org, akpm@osdl.org,
	arjanv@redhat.com, suresh.b.siddha@intel.com,
	jun.nakajima@intel.com
Subject: Re: [announce] [patch] NX (No eXecute) support for x86,   2.6.7-rc2-bk2
Date: Fri, 4 Jun 2004 08:26:15 -0700	[thread overview]
Message-ID: <200406040826.15427.luto@myrealbox.com> (raw)
In-Reply-To: <20040604092552.GA11034@elte.hu>

On Friday 04 June 2004 02:25, Ingo Molnar wrote:
> 
> * Andi Kleen <ak@suse.de> wrote:
> 
> > > The whole point of NX, though, is that it prevents certain classes of 
> > > exploits.  If a setuid binary is vulnerable to one of these, then Ingo's 
> > > patch "fixes" it.  Your approach breaks that.
> > 
> > Good point.
> > 
> > But that only applies to the NX personality bit. For the uname
> > emulation it is not an issue.
> > 
> > So maybe the dropping on exec should only zero a few selected
> > personality bits, but not all.
> 
> ok, how about the attached patch then? There's a PERS_DROP_ON_SUID mask
> that we drop upon setuid - all the other personality bits get inherited.
> 
> 	Ingo

This is wrong on SELinux (and presumably with other LSMs). It also does
unexpected things if you fail to exec a setuid executable.

Here's a (completely untested, applies-with-some-offset-on-non-mm) version
that's less wrong.

Note the less.  It will at least do funny things to your audit log on
SELinux -- I don't like it _that_ much.

--Andy


 fs/binfmt_elf.c             |   22 ++++++++++++++--------
 fs/exec.c                   |    3 +++
 include/asm-i386/elf.h      |    3 ++-
 include/linux/personality.h |    3 +++
 4 files changed, 22 insertions(+), 9 deletions(-)

--- 2.6.7-rc1-mm1/fs/binfmt_elf.c~ingo	2004-05-28 09:02:06.000000000 -0700
+++ 2.6.7-rc1-mm1/fs/binfmt_elf.c	2004-06-04 08:13:33.192127641 -0700
@@ -487,7 +487,7 @@ static int load_elf_binary(struct linux_
   	struct exec interp_ex;
 	char passed_fileno[6];
 	struct files_struct *files;
-	int executable_stack = EXSTACK_DEFAULT;
+	int executable_stack;
 	
 	/* Get the exec-header */
 	elf_ex = *((struct elfhdr *) bprm->buf);
@@ -613,13 +613,19 @@ static int load_elf_binary(struct linux_
 	}
 
 	elf_ppnt = elf_phdata;
-	for (i = 0; i < elf_ex.e_phnum; i++, elf_ppnt++)
-		if (elf_ppnt->p_type == PT_GNU_STACK) {
-			if (elf_ppnt->p_flags & PF_X)
-				executable_stack = EXSTACK_ENABLE_X;
-			else
-				executable_stack = EXSTACK_DISABLE_X;
-		}
+	if (current->personality & ADDR_SPACE_EXECUTABLE)
+		executable_stack = EXSTACK_ENABLE_X;
+	else {
+		executable_stack = EXSTACK_DEFAULT;
+		for (i = 0; i < elf_ex.e_phnum; i++, elf_ppnt++)
+			if (elf_ppnt->p_type == PT_GNU_STACK) {
+				if (elf_ppnt->p_flags & PF_X)
+					executable_stack = EXSTACK_ENABLE_X;
+				else
+					executable_stack = EXSTACK_DISABLE_X;
+				break;
+			}
+	}
 
 	/* Some simple consistency checks for the interpreter */
 	if (elf_interpreter) {
--- 2.6.7-rc1-mm1/fs/exec.c~ingo	2004-06-04 08:12:26.347465895 -0700
+++ 2.6.7-rc1-mm1/fs/exec.c	2004-06-04 08:19:43.226203330 -0700
@@ -934,6 +934,9 @@ void compute_creds(struct linux_binprm *
 	unsafe = unsafe_exec(current);
 	security_bprm_apply_creds(bprm, unsafe);
 	task_unlock(current);
+
+	if (security_bprm_secureexec(bprm))
+		current->personality &= ~PERS_DROP_ON_SUID;
 }
 
 EXPORT_SYMBOL(compute_creds);
--- 2.6.7-rc1-mm1/include/linux/personality.h~ingo	2004-05-09 19:32:37.000000000 -0700
+++ 2.6.7-rc1-mm1/include/linux/personality.h	2004-06-04 08:13:33.166133605 -0700
@@ -30,6 +30,7 @@ extern int abi_fake_utsname;
  */
 enum {
 	MMAP_PAGE_ZERO =	0x0100000,
+	ADDR_SPACE_EXECUTABLE =	0x0200000,
 	ADDR_LIMIT_32BIT =	0x0800000,
 	SHORT_INODE =		0x1000000,
 	WHOLE_SECONDS =		0x2000000,
@@ -37,6 +38,8 @@ enum {
 	ADDR_LIMIT_3GB = 	0x8000000,
 };
 
+#define PERS_DROP_ON_SUID (MMAP_PAGE_ZERO|ADDR_SPACE_EXECUTABLE)
+
 /*
  * Personality types.
  *
--- 2.6.7-rc1-mm1/include/asm-i386/elf.h~ingo	2004-05-09 19:32:53.000000000 -0700
+++ 2.6.7-rc1-mm1/include/asm-i386/elf.h	2004-06-04 08:13:33.182129935 -0700
@@ -117,7 +117,8 @@ typedef struct user_fxsr_struct elf_fpxr
 #define AT_SYSINFO_EHDR		33
 
 #ifdef __KERNEL__
-#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
+/* child inherits the personality of the parent */
+#define SET_PERSONALITY(ex, ibcs2) do { } while (0)
 
 extern int dump_task_regs (struct task_struct *, elf_gregset_t *);
 extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *);


  reply	other threads:[~2004-06-04 15:29 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-02 20:50 [announce] [patch] NX (No eXecute) support for x86, 2.6.7-rc2-bk2 Ingo Molnar
2004-06-02 21:00 ` Christoph Hellwig
2004-06-02 21:07   ` Ingo Molnar
2004-06-02 21:13 ` Linus Torvalds
2004-06-02 21:17   ` Arjan van de Ven
2004-06-02 21:31     ` Doug McNaught
2004-06-08  8:46       ` Jakub Jelinek
2004-06-03  1:12     ` Joel Becker
2004-06-03  1:27       ` Andi Kleen
2004-06-03  6:24       ` Arjan van de Ven
2004-06-03 20:37     ` jlnance
2004-06-03  7:21   ` Ingo Molnar
2004-06-03 12:44     ` Ingo Molnar
2004-06-03 15:54       ` Andi Kleen
2004-06-03 23:01         ` Andy Lutomirski
2004-06-03 23:08           ` Andi Kleen
2004-06-03 23:54             ` Andy Lutomirski
2004-06-04  0:05               ` Andy Lutomirski
2004-06-04  9:25             ` Ingo Molnar
2004-06-04 15:26               ` Andy Lutomirski [this message]
2004-06-04 15:36                 ` Linus Torvalds
2004-06-04 15:41                   ` Arjan van de Ven
2004-06-04 15:47                     ` Linus Torvalds
2004-06-04 15:51                       ` Arjan van de Ven
2004-06-04 16:02                         ` Linus Torvalds
2004-06-04 16:13                           ` Andi Kleen
2004-06-04 16:37                             ` Arjan van de Ven
2004-06-04 16:40                               ` Christoph Hellwig
2004-06-04 17:27                                 ` David Mosberger
2004-06-04 17:30                                 ` Andi Kleen
2004-06-08  9:07                             ` Jakub Jelinek
2004-06-08  9:14                               ` Andi Kleen
2004-06-08  9:19                                 ` Arjan van de Ven
2004-06-04 16:51                           ` Ulrich Drepper
2004-06-08 17:15                             ` Bill Davidsen
2004-06-04 18:11                         ` Gerhard Mack
2004-06-04 18:12                           ` Arjan van de Ven
2004-06-04 16:06                   ` Ingo Molnar
2004-06-04 17:20                     ` Ingo Molnar
2004-06-04 17:22                       ` Ingo Molnar
2004-06-04 17:32                         ` Ingo Molnar
2004-06-03 19:24       ` Suresh Siddha
2004-06-03 20:37         ` Andi Kleen
2004-06-03 22:58           ` Suresh Siddha
2004-06-03 23:06             ` Andi Kleen
2004-06-04  9:30             ` Ingo Molnar
2004-06-03 12:57     ` Brian Gerst
2004-06-04  9:39       ` Ingo Molnar
2004-06-04 10:41         ` Christoph Hellwig
2004-06-04 10:48           ` William Lee Irwin III
2004-06-03 16:21     ` Ulrich Drepper
2004-06-03 19:30   ` Kurt Garloff
2004-06-02 21:43 ` Andi Kleen
2004-06-03  0:11 ` Rusty Russell
2004-06-03  0:17   ` Jeff Garzik
2004-06-03  7:24   ` Ingo Molnar
2004-06-03  8:47   ` Ingo Molnar
2004-06-03  8:53   ` Ingo Molnar
2004-06-04  0:04     ` Rusty Russell
2004-06-03  9:07 ` Ingo Molnar
2004-06-03 14:36 ` Gerhard Mack
2004-06-03 16:22   ` Arjan van de Ven
2004-06-04  9:36   ` Ingo Molnar
2004-06-04 11:59     ` Stephen Wille Padnos
     [not found] <22L0f-5Ci-11@gated-at.bofh.it>
     [not found] ` <22O7J-8dw-11@gated-at.bofh.it>
     [not found]   ` <22Wf4-5Xv-23@gated-at.bofh.it>
2004-06-03  9:43     ` Andi Kleen
  -- strict thread matches above, loose matches on Subject: below --
2004-06-04 18:01 Nakajima, Jun

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=200406040826.15427.luto@myrealbox.com \
    --to=luto@myrealbox.com \
    --cc=ak@suse.de \
    --cc=akpm@osdl.org \
    --cc=arjanv@redhat.com \
    --cc=jun.nakajima@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=suresh.b.siddha@intel.com \
    --cc=torvalds@osdl.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