Thread (7 messages) 7 messages, 5 authors, 2016-03-24

Re: [PATCH/RFC] ppc64 livepatch: frameless klp_return_helper using odd TOC

From: Torsten Duwe <hidden>
Date: 2016-03-24 10:28:14
Also in: lkml

On Thu, Mar 24, 2016 at 03:44:55PM +0530, Kamalesh Babulal wrote:
* Torsten Duwe [off-list ref] [2016-03-23 16:58:58]:
quoted
Since nobody liked the extra stack frame nor its workarounds, here is
the next attempt. Assumptions:

1. Heuristics are bad. The better they are, the more subtly the
   way they might fail.

2. The TOC pointer is usually dividable by 4, if not by 8. An odd
   value never occurs.

Conclusively, this patch unambiguously creates an odd TOC value when
an ftraced function's global entry point is used. Ftrace_caller will
then immediately fix it, and alongside gather the information whether
the made call was local or global.

In case of live patching this information is furthermore used to decide
whether a klp_return_helper needs to be inserted or not.
CAVEAT: any frameless klp_return_helper does not play well with
sibling calls! There's an emergency exit that might work, at worst
it will cause an oops, but it surely avoids a lockup.
At least the live patching modules on ppc64le will need to be compiled
using the -fno-optimize-sibling-calls compiler flag!

Thanks go to Michael Matz and Richard Biener for reassurance about
heuristics and pointers to the compiler flag.

Signed-off-by: Torsten Duwe <redacted>
Hi Torsten,

Should this patch be applied over Petr Mladek's v4 ?
Yes. Just omit the changes it makes to entry_64.S and use this instead.

	Torsten
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help