public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Ingo Molnar <mingo@redhat.com>, Jiri Kosina <jkosina@suse.cz>,
	Seth Jennings <sjenning@redhat.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/3] sched: add sched_task_call()
Date: Tue, 17 Feb 2015 19:15:41 +0100	[thread overview]
Message-ID: <20150217181541.GP5029@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20150217141211.GC11861@treble.redhat.com>

On Tue, Feb 17, 2015 at 08:12:11AM -0600, Josh Poimboeuf wrote:
> On Tue, Feb 17, 2015 at 10:24:50AM +0100, Peter Zijlstra wrote:
> > So far stack unwinding has basically been a best effort debug output
> > kind of thing, you're wanting to make the integrity of the kernel depend
> > on it.
> > 
> > You require an absolute 100% correctness of the stack unwinder -- where
> > today it is; as stated above; a best effort debug output thing.
> > 
> > That is a _big_ change.
> 
> True, this does seem to be the first attempt to rely on the correctness
> of the stack walking code.
> 
> > Has this been properly considered; has all the asm of the relevant
> > architectures been audited? Are you planning on maintaining that level
> > of audit for all new patches?
> 
> I agree, the unwinder needs to be 100% correct.  Currently we only
> support x86_64.  Luckily, in general, stacks are very well defined and
> walking the stack of a sleeping task should be straightforward.  I don't
> think it would be too hard to ensure the stack unwinder is right for
> other architectures as we port them.

I would not be too sure about that, the x86 framepointer thing is not
universal. IIRC some have to have some form of in-kernel dwarf
unwinding.

And I'm assuming you're hard relying on CONFIG_FRAMEPOINTER here,
because otherwise x86 stacks are a mess too.

So even with CONFIG_FRAMEPOINTER, things like copy_to/from_user, which
are implemented in asm, don't honour that. So if one of those faults and
the fault handler sleeps, you'll miss say your
'copy_user_enhanced_fast_string' entry.

Then again, those asm functions don't have function trace bits either,
so you can't patch them to begin with I suppose.

Here's to hoping you don't have to..

> > Because the way you propose to do things, we'll end up with silent but
> > deadly fail if the unwinder is less than 100% correct. No way to easily
> > debug that, no warns, just silent corruption.
> 
> That's a good point.  There's definitely room for additional error
> checking in the x86 stack walking code.  A couple of ideas:
> 
> - make sure it starts from a __schedule() call at the top
> - make sure we actually reach the bottom of the stack
> - make sure each stack frame's return address is immediately after a
>   call instruction
> 
> If we hit any of those errors, we can bail out, unregister with ftrace
> and restore the system to its original state.

And then hope you can get a better trace next time around? Or will you
fall-back to an alternative method of patching?

> > Are you really really sure you want to go do this?
> 
> Basically, yes.  We've had a lot of conversations about many different
> variations of how to do this over the past year, and this is by far the
> best approach we've come up with.

For some reason I'm thinking jikos is going to disagree with you on that
:-)

I'm further thinking we don't actually need 2 (or more) different means
of live patching in the kernel. So you all had better sit down (again)
and come up with something you all agree on.

> FWIW, we've been doing something similar with kpatch and stop_machine()
> over the last 1+ years, and have run into zero problems with that
> approach.

Could be you've just been lucky...


  reply	other threads:[~2015-02-17 18:15 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-16 18:52 [PATCH 0/3] prevent /proc/<pid>/stack garbage for running tasks Josh Poimboeuf
2015-02-16 18:52 ` [PATCH 1/3] sched: add sched_task_call() Josh Poimboeuf
2015-02-16 20:44   ` Peter Zijlstra
2015-02-16 22:05     ` Josh Poimboeuf
2015-02-17  9:24       ` Peter Zijlstra
2015-02-17 14:12         ` Josh Poimboeuf
2015-02-17 18:15           ` Peter Zijlstra [this message]
2015-02-17 21:25             ` Josh Poimboeuf
2015-02-18 15:21               ` Peter Zijlstra
2015-02-18 17:12                 ` Josh Poimboeuf
2015-02-19  0:20                   ` Peter Zijlstra
2015-02-19  4:17                     ` Josh Poimboeuf
2015-02-19 10:16                       ` Peter Zijlstra
2015-02-19 16:24                         ` Josh Poimboeuf
2015-02-19 16:33                           ` Vojtech Pavlik
2015-02-19 17:03                             ` Josh Poimboeuf
2015-02-19 17:08                               ` Jiri Kosina
2015-02-19 17:19                               ` Vojtech Pavlik
2015-02-19 17:32                                 ` Josh Poimboeuf
2015-02-19 17:48                                   ` Vojtech Pavlik
2015-02-19 20:40                                   ` Vojtech Pavlik
2015-02-19 21:42                                     ` Josh Poimboeuf
2015-02-20  7:46                                       ` Jiri Kosina
2015-02-20  8:49                                         ` Jiri Kosina
2015-02-20  9:50                                           ` Ingo Molnar
2015-02-20 10:02                                             ` Jiri Kosina
2015-02-20 10:44                                               ` live patching design (was: Re: [PATCH 1/3] sched: add sched_task_call()) Ingo Molnar
2015-02-20 10:58                                                 ` Jiri Kosina
2015-02-20 19:49                                                   ` Ingo Molnar
2015-02-20 21:46                                                     ` Vojtech Pavlik
2015-02-20 22:08                                                       ` Josh Poimboeuf
2015-02-21 18:30                                                         ` Ingo Molnar
2015-02-22  8:52                                                           ` Jiri Kosina
2015-02-22 10:17                                                             ` Ingo Molnar
2015-02-22 19:18                                                               ` Jiri Kosina
2015-02-23 12:43                                                           ` Jiri Kosina
2015-02-24 10:37                                                             ` Ingo Molnar
2015-02-21 18:18                                                       ` Ingo Molnar
2015-02-21 18:57                                                         ` Jiri Kosina
2015-02-21 19:16                                                           ` Ingo Molnar
2015-02-21 19:31                                                             ` Jiri Kosina
2015-02-21 19:48                                                               ` Ingo Molnar
2015-02-21 20:10                                                                 ` Jiri Kosina
2015-02-21 20:53                                                                   ` Jiri Kosina
2015-02-22  8:46                                                                   ` Ingo Molnar
2015-02-22  9:08                                                                     ` Jiri Kosina
2015-02-22  9:46                                                                     ` live kernel upgrades (was: live kernel patching design) Ingo Molnar
2015-02-22 10:34                                                                       ` Ingo Molnar
2015-02-22 10:48                                                                       ` Ingo Molnar
2015-02-22 19:13                                                                         ` Jiri Kosina
2015-02-22 23:01                                                                           ` Andrew Morton
2015-02-23  0:18                                                                             ` Dave Airlie
2015-02-23  0:44                                                                               ` Arjan van de Ven
2015-02-23  8:17                                                                                 ` Jiri Kosina
2015-02-23 10:42                                                                                   ` Richard Weinberger
2015-02-23 11:08                                                                                     ` Vojtech Pavlik
2015-02-23 11:50                                                                                 ` Pavel Machek
2015-02-24  9:16                                                                                 ` Ingo Molnar
2015-02-24 12:28                                                                                   ` Jiri Slaby
2015-03-05  0:51                                                                                     ` Ingo Molnar
2015-02-23  6:35                                                                             ` Vojtech Pavlik
2015-02-24  9:44                                                                               ` Ingo Molnar
2015-02-24 12:12                                                                                 ` Vojtech Pavlik
2015-02-24 10:53                                                                           ` Ingo Molnar
2015-02-24 12:19                                                                             ` Vojtech Pavlik
2015-02-22 14:37                                                                       ` Josh Poimboeuf
2015-02-22 16:40                                                                         ` Josh Poimboeuf
2015-02-22 19:03                                                                           ` Jiri Kosina
2015-02-24 10:23                                                                         ` Ingo Molnar
2015-02-24 11:10                                                                           ` Petr Mladek
2015-02-24 12:36                                                                           ` Vojtech Pavlik
2015-02-23 11:39                                                                       ` Pavel Machek
2015-02-24 10:25                                                                         ` Ingo Molnar
2015-02-24 12:11                                                                       ` Jiri Slaby
2015-02-24 13:18                                                                         ` live kernel upgrades Pavel Emelyanov
2015-02-20 16:12                                             ` [PATCH 1/3] sched: add sched_task_call() Josh Poimboeuf
2015-02-20 20:08                                               ` Ingo Molnar
2015-02-20 21:22                                                 ` Josh Poimboeuf
2015-02-20 17:05                                           ` Josh Poimboeuf
2015-02-19 21:26                                   ` Jiri Kosina
2015-02-19 21:38                                     ` Jiri Kosina
2015-02-19 23:11                                     ` Josh Poimboeuf
2015-02-16 18:52 ` [PATCH 2/3] stacktrace: add save_stack_trace_tsk_safe() Josh Poimboeuf
2015-02-18  0:13   ` Andrew Morton
2015-02-20  9:32     ` Jiri Kosina
2015-02-16 18:52 ` [PATCH 3/3] proc: fix /proc/<pid>/stack for running tasks Josh Poimboeuf

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=20150217181541.GP5029@twins.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=jkosina@suse.cz \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=sjenning@redhat.com \
    /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