From: Christoph Hellwig <hch@ns.caldera.de>
To: viro@math.psu.edu (Alexander Viro)
Cc: marcelo@conectiva.com.br, torvalds@transmeta.com,
linux-kernel@vger.kernel.org, davem@redhat.com
Subject: Re: [PATCH] fix to oopsable race in binfmt_elf.c
Date: Sun, 30 Dec 2001 13:53:24 +0100 [thread overview]
Message-ID: <200112301253.fBUCrOx28796@ns.caldera.de> (raw)
In-Reply-To: <Pine.GSO.4.21.0112291655390.7103-100000@weyl.math.psu.edu>
In article <Pine.GSO.4.21.0112291655390.7103-100000@weyl.math.psu.edu> you wrote:
> Changing current->fs requires task_lock(current) if old value
> is non-NULL. Otherwise we are risking oops on access to /proc/<pid>/{cwd,root}
The code this is in is sparc64-specific and rather bad. The attached
patch has been submitted to Linus & Marcelo several times in the past.
It replaces this personality forth and back hack with the much cleaner
early setting of the personality. I need this for Linux-ABI on i386 and
unlike the old version it allows finding interpreters for alternative
roots for more personalities than just the sparc PER_SVR4, which really
should be PER_SOLARIS, btw as real SVR4 exists on sparc..
Christoph
--
Of course it doesn't work. We've performed a software upgrade.
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre1/fs/binfmt_elf.c linux/fs/binfmt_elf.c
--- ../master/linux-2.4.14-pre1/fs/binfmt_elf.c Thu Oct 25 19:05:47 2001
+++ linux/fs/binfmt_elf.c Thu Oct 25 19:18:28 2001
@@ -505,30 +505,10 @@
#if 0
printk("Using ELF interpreter %s\n", elf_interpreter);
#endif
-#ifdef __sparc__
- if (ibcs2_interpreter) {
- unsigned long old_pers = current->personality;
- struct exec_domain *old_domain = current->exec_domain;
- struct exec_domain *new_domain;
- struct fs_struct *old_fs = current->fs, *new_fs;
- get_exec_domain(old_domain);
- atomic_inc(&old_fs->count);
-
- set_personality(PER_SVR4);
- interpreter = open_exec(elf_interpreter);
-
- new_domain = current->exec_domain;
- new_fs = current->fs;
- current->personality = old_pers;
- current->exec_domain = old_domain;
- current->fs = old_fs;
- put_exec_domain(new_domain);
- put_fs_struct(new_fs);
- } else
-#endif
- {
- interpreter = open_exec(elf_interpreter);
- }
+
+ SET_PERSONALITY(elf_ex, ibcs2_interpreter);
+
+ interpreter = open_exec(elf_interpreter);
retval = PTR_ERR(interpreter);
if (IS_ERR(interpreter))
goto out_free_interp;
@@ -602,10 +582,6 @@
current->flags &= ~PF_FORKNOEXEC;
elf_entry = (unsigned long) elf_ex.e_entry;
- /* Do this immediately, since STACK_TOP as used in setup_arg_pages
- may depend on the personality. */
- SET_PERSONALITY(elf_ex, ibcs2_interpreter);
-
/* Do this so that we can load the interpreter, if need be. We will
change some of these later */
current->mm->rss = 0;
prev parent reply other threads:[~2001-12-30 12:54 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-12-29 21:59 Alexander Viro
2001-12-30 12:53 ` Christoph Hellwig [this message]
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=200112301253.fBUCrOx28796@ns.caldera.de \
--to=hch@ns.caldera.de \
--cc=davem@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=marcelo@conectiva.com.br \
--cc=torvalds@transmeta.com \
--cc=viro@math.psu.edu \
/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
all inboxes | Powered by JetHome®