Re: [PATCH v3 00/10] livepatch,module: Remove .klp.arch and module_disable_ro()

From: Joe Lawrence
Date: Mon Apr 27 2020 - 08:22:14 EST


On 4/25/20 7:07 AM, Josh Poimboeuf wrote:
v3:
- klp: split klp_write_relocations() into object/section specific
functions [joe]
- s390: fix plt/got writes [joe]
- s390: remove text_mutex usage [mbenes]
- x86: do text_poke_sync() before releasing text_mutex [peterz]
- split x86 text_mutex changes into separate patch [mbenes]

v2:
- add vmlinux.ko check [peterz]
- remove 'klp_object' forward declaration [mbenes]
- use text_mutex [jeyu]
- fix documentation TOC [jeyu]
- fix s390 issues [mbenes]
- upstream kpatch-build now supports this
(though it's only enabled for Linux >= 5.8)

These patches add simplifications and improvements for some issues Peter
found six months ago, as part of his non-writable text code (W^X)
cleanups.

Highlights:

- Remove the livepatch arch-specific .klp.arch sections, which were used
to do paravirt patching and alternatives patching for livepatch
replacement code.

- Add support for jump labels in patched code.

- Remove the last module_disable_ro() usage.

For more background, see this thread:

https://lkml.kernel.org/r/20191021135312.jbbxsuipxldocdjk@treble

This has been tested with kpatch-build integration tests and klp-convert
selftests.


Hi Josh,

I've added some late module patching tests for klp-convert as well as extended the existing ones. I'll put them on-top of v3 and give it some test runs today (x86, ppc64le, s390x) and report back.

BTW, this may be out of scope for this patchset, but is it a large amount of work to support clearing klp-relocations on target module unload? ie, this test case:

- (target module and livepatch loaded)
- rmmod target_mod
- modprobe target_mod << fails as reloc target is non-zero

IIRC, Miroslav had taken a stab at this last year, but I don't remember what the technical problems were then.

-- Joe