From: John Reiser <jreiser@BitWagon.com>
To: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Andi Kleen <ak@suse.de>, Ingo Molnar <mingo@elte.hu>,
Arjan van de Ven <arjan@infradead.org>,
Paul Mundt <lethal@linux-sh.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org
Subject: Re: + fully-honor-vdso_enabled.patch added to -mm tree
Date: Fri, 02 Mar 2007 13:06:46 -0800 [thread overview]
Message-ID: <45E891E6.7090807@BitWagon.com> (raw)
In-Reply-To: <20070301175207.GA849@tv-sign.ru>
Oleg Nesterov wrote:
> John Reiser wrote:
>>+ switch (vdso_enabled) {
>>+ case 0: /* none */
>>+ return 0;
>
>
> This means we don't initialize mm->context.vdso and ->sysenter_return.
>
> Is it ok? For example, setup_rt_frame() uses VDSO_SYM(&__kernel_rt_sigreturn),
> sysenter_past_esp pushes ->sysenter_return on stack.
Paul Mundt has commented on setup_rt_frame() and provided a patch which
bullet-proofs that area. I will include that patch into the next revision.
The value of ->sysenter_return is interpreted in user space by the
sysexit instruction; nobody else cares what the value is. The kernel
is not required to provide a good value when vdso_enabled is zero,
because the kernel has not told the process that sysenter is valid
(by setting AT_SYSINFO.) The kernel requires specific register values
for sysenter+sysexit and these values may change at the whim of the
kernel, so correct code must follow the kernel's protocol.
glibc uses sysenter only when AT_SYSINFO is present. User code can
screw up even when vdso_enabled is non-zero, by overwriting or re-
mapping the vdso page (clobber memory at the destination of sysexit.)
Both context.vdso and sysenter_return could be set to zero whenever
vdso_enabled is zero; those two values might even be defaulted.
I'll add such a change to the next revision of the patch, if you'll
defend it against claims of "unnecessary code."
>
> Note also that load_elf_binary does
>
> arch_setup_additional_pages()
> create_elf_tables()
>
> , looks like application can crash after exec if vdso_enabled changes from 0
> to 1 in between.
Correct. Changing vdso_enabled from 0 to non-zero must be prepared
to lose this race if it is not prevented. Ordinarily it won't matter
because the administrator will perform such changes at a "quiet" time.
--
John Reiser, jreiser@BitWagon.com
next prev parent reply other threads:[~2007-03-02 21:07 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-01 17:52 + fully-honor-vdso_enabled.patch added to -mm tree Oleg Nesterov
2007-03-02 3:48 ` Paul Mundt
2007-03-02 19:32 ` Oleg Nesterov
2007-03-02 21:19 ` John Reiser
2007-03-03 17:38 ` Oleg Nesterov
2007-03-02 21:06 ` John Reiser [this message]
2007-03-02 22:18 ` Oleg Nesterov
2007-03-05 10:12 ` Paul Mundt
2007-03-05 10:54 ` Oleg Nesterov
2007-03-05 10:56 ` Paul Mundt
2007-03-02 22:19 ` Chuck Ebbert
2007-03-02 23:11 ` Oleg Nesterov
2007-03-02 23:33 ` John Reiser
-- strict thread matches above, loose matches on Subject: below --
2007-03-01 5:33 akpm
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=45E891E6.7090807@BitWagon.com \
--to=jreiser@bitwagon.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=arjan@infradead.org \
--cc=lethal@linux-sh.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oleg@tv-sign.ru \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.