linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Fix issue with alternatives/paravirt patches
@ 2016-07-06  2:34 Jessica Yu
  2016-07-06  2:34 ` [PATCH 1/2] livepatch: use arch_klp_init_object_loaded() to finish arch-specific tasks Jessica Yu
                   ` (4 more replies)
  0 siblings, 5 replies; 15+ messages in thread
From: Jessica Yu @ 2016-07-06  2:34 UTC (permalink / raw)
  To: Josh Poimboeuf, Miroslav Benes, Petr Mladek, Jiri Kosina,
	Chris J Arges, Eugene Shatokhin
  Cc: live-patching, x86, linux-kernel, Jessica Yu

Hi,

A few months ago, Chris Arges reported a bug involving alternatives/paravirt
patching that was discussed here [1] and here [2]. To briefly summarize the
bug, patch modules that contained .altinstructions or .parainstructions
sections would break because these alternative/paravirt patches would be
applied first by the module loader (see x86 module_finalize()), then
livepatch would later clobber these patches when applying per-object
relocations. This lead to crashes and unpredictable behavior.

One conclusion we reached from our last discussion was that we will
need to introduce some arch-specific code to address this problem.
This patchset presents a possible fix for the bug by adding a new
arch-specific arch_klp_init_object_loaded() function that by default
does nothing but can be overridden by different arches.

To fix this issue for x86, since we can access a patch module's Elf
sections through mod->klp_info, we can simply delay the calls to
apply_paravirt() and apply_alternatives() to arch_klp_init_object_loaded(),
which is called after relocations have been written for an object.
In addition, for patch modules, .parainstructions and .altinstructions are
prefixed by ".klp.arch.${objname}" so that the module loader ignores them
and livepatch can apply them manually.

Currently for kpatch, we don't support including jump table sections in
the patch module, and supporting .smp_locks is currently broken, so we
don't consider those sections (for now).

I did some light testing with some patches to kvm and verified that the
original issue reported in [2] was fixed.

Based on linux-next.

[1] http://thread.gmane.org/gmane.linux.kernel/2185604/
[2] https://github.com/dynup/kpatch/issues/580

Jessica Yu (2):
  livepatch: use arch_klp_init_object_loaded() to finish arch-specific tasks
  livepatch/x86: apply alternatives and paravirt patches after relocations

 arch/x86/kernel/Makefile    |  1 +
 arch/x86/kernel/livepatch.c | 66 +++++++++++++++++++++++++++++++++++++++++++++
 include/linux/livepatch.h   |  3 +++
 kernel/livepatch/core.c     | 12 +++++++--
 4 files changed, 80 insertions(+), 2 deletions(-)
 create mode 100644 arch/x86/kernel/livepatch.c

-- 
2.4.3

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2016-07-21  8:48 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-06  2:34 [PATCH 0/2] Fix issue with alternatives/paravirt patches Jessica Yu
2016-07-06  2:34 ` [PATCH 1/2] livepatch: use arch_klp_init_object_loaded() to finish arch-specific tasks Jessica Yu
2016-07-06  2:35 ` [PATCH 2/2] livepatch/x86: apply alternatives and paravirt patches after relocations Jessica Yu
2016-07-08 15:44   ` Josh Poimboeuf
2016-07-07 15:56 ` [PATCH 0/2] Fix issue with alternatives/paravirt patches Petr Mladek
2016-07-07 22:53   ` Josh Poimboeuf
2016-07-12 11:55     ` Miroslav Benes
2016-07-12 14:01       ` Josh Poimboeuf
2016-07-13  1:18         ` Jessica Yu
2016-07-07 23:51   ` Jessica Yu
2016-07-08  5:22 ` [PATCH 0/2] " Christopher Arges
2016-07-08 16:57   ` Jessica Yu
2016-07-12 12:06 ` [PATCH 0/2] " Miroslav Benes
2016-07-21  5:10   ` Jessica Yu
2016-07-21  8:48     ` Miroslav Benes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).