Re: [RFC PATCH 6/9] livepatch: create per-task consistency model

Josh Poimboeuf
2015-02-12T15:49:23Z

On Thu, Feb 12, 2015 at 02:26:42PM +0100, Jiri Slaby wrote:
> On 02/12/2015, 04:21 AM, Josh Poimboeuf wrote:
> > Ingo, Peter,
> >
> > Would you have any objections to making task_rq_lock/unlock() non-static
> > (or moving them to kernel/sched/sched.h) so they can be called by the
> > livepatch code?
> >
> > To provide some background, I'm looking for a way to temporarily prevent
> > a sleeping task from running while its stack is examined, to decide
> > whether it can be safely switched to the new patching "universe". For
> > more details see klp_transition_task() in the patch below.
> >
> > Using task_rq_lock() is the most straightforward way I could find to
> > achieve that.
>
> Hi, I cannot speak whether it is the proper way or not.
>
> But if so, would it make sense to do the opposite: expose an API to walk
> through the processes' stack and make the decision? Concretely, move
> parts of klp_stacktrace_address_verify_func to sched.c or somewhere in
> kernel/sched/ and leave task_rq_lock untouched.

Yeah, it makes sense in theory. But I'm not sure how to do that in a
way that prevents races when switching the task's universe. I think we
need the rq locked for both the stack walk and the universe switch.

In general, I agree it would be good to find a way to keep the rq
locking functions in sched.c.

--
Josh