From: Chuck Ebbert <76306.1226@compuserve.com>
To: "andrea@cpushare.com" <andrea@cpushare.com>
Cc: Linus Torvalds <torvalds@osdl.org>, Andrew Morton <akpm@osdl.org>,
Arjan van de Ven <arjan@infradead.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [test patch] seccomp: add code to disable TSC when enabling seccomp
Date: Fri, 14 Jul 2006 02:02:55 -0400 [thread overview]
Message-ID: <200607140205_MC3-1-C4F5-E9D4@compuserve.com> (raw)
In-Reply-To: <20060714020257.GC18774@opteron.random>
On Fri, 14 Jul 2006 04:02:57 +0200, andrea@cpushare.com wrote:
> > Also, what prevents this flag from being set on a running process?
> > If that happens the CPU state and flag could get out of sync and
> > this could cause problems because of the way the current code tests
> > the flag.
>
> Yes, there could be a tiny race where if the controller and seccomp
> tasks run on two different CPUs: the seccomp task may write to the
> pipe, and then read, but the read may not actually stop anywhere,
> because the second CPU may have enabled seccomp and answered faster
> than the first cpu. So there's tiny window for the TSC not to be
> disabled synchronously at the start of the seccomp computations (and
> if there are multiple seccomp tasks running the new ones could let the
> old ones run a timeslice with the tsc enabled).
But it looks like the mismatch could persist indefinitely: if a seccomp
task inherits the wrong cr4 flag it could pass it on to another, or back
to the original one and so on. I think this is the only safe way:
if (test_tsk_thread_flag(next_p, TIF_NOTSC) ||
test_tsk_thread_flag(prev_p, TIF_NOTSC)) {
/* Flip TSC disable bit if necessary. */
unsigned int cr4 = read_cr4();
if (test_tsk_thread_flag(next_p, TIF_NOTSC)) {
if (!(cr4 & X86_CR4_TSD))
write_cr4(cr4 | X86_CR4_TSD);
} else
write_cr4(cr4 & ~X86_CR4_TSD);
}
(Testing TSD in the 'else' path is not worth the trouble.)
> To fix the tiny window if it's the current task writing to self, we
> should also update the cr4 before returning from base.c. If it was a
> different task it's more complicated (we would need to send a forced
> sigstop, and wait the task->state to change, but then we go into the
> ptrace parallelism I truly don't want to deal with in any way in
> seccomp context). The whole point of seccomp is to be simple. So my
> suggestion is either we ignore the tiny window, or we do it only from
> the current task. If I've to deal with any sigstop then I could use
> ptrace or utrace in the first place ;).
The tiny window shouldn't be a problem, should it? Just what is the
risk to begin with, and how much harder is it to exploit in such a
small window?
--
Chuck
"You can't read a newspaper if you can't read." --George W. Bush
next reply other threads:[~2006-07-14 6:06 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-14 6:02 Chuck Ebbert [this message]
2006-07-14 6:30 ` andrea
-- strict thread matches above, loose matches on Subject: below --
2006-07-13 20:11 Chuck Ebbert
2006-07-14 2:02 ` andrea
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=200607140205_MC3-1-C4F5-E9D4@compuserve.com \
--to=76306.1226@compuserve.com \
--cc=akpm@osdl.org \
--cc=andrea@cpushare.com \
--cc=arjan@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--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
all inboxes | Powered by JetHome®