All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Fix issue with alternatives/paravirt patches
@ 2016-07-21  5:23 Jessica Yu
  2016-07-21  5:23 ` [PATCH v2 1/2] livepatch: use arch_klp_init_object_loaded() to finish arch-specific tasks Jessica Yu
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Jessica Yu @ 2016-07-21  5:23 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.

v1 here:
http://lkml.kernel.org/g/1467772500-26092-1-git-send-email-jeyu@redhat.com

v2:
 - add BUILD_BUG_ON() check in arch_klp_init_object_loaded (x86)

[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 | 65 +++++++++++++++++++++++++++++++++++++++++++++
 include/linux/livepatch.h   |  3 +++
 kernel/livepatch/core.c     | 12 +++++++--
 4 files changed, 79 insertions(+), 2 deletions(-)
 create mode 100644 arch/x86/kernel/livepatch.c

-- 
2.5.5

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

end of thread, other threads:[~2016-08-02 19:35 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-21  5:23 [PATCH v2 0/2] Fix issue with alternatives/paravirt patches Jessica Yu
2016-07-21  5:23 ` [PATCH v2 1/2] livepatch: use arch_klp_init_object_loaded() to finish arch-specific tasks Jessica Yu
2016-08-02  8:25   ` Miroslav Benes
2016-07-21  5:24 ` [PATCH v2 2/2] livepatch/x86: apply alternatives and paravirt patches after relocations Jessica Yu
2016-08-02  8:59   ` Miroslav Benes
2016-08-02 12:59     ` Petr Mladek
2016-08-02 13:02     ` Jiri Kosina
2016-07-26 20:59 ` [PATCH v2 0/2] Fix issue with alternatives/paravirt patches Josh Poimboeuf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.