[Bug 1639924] Re: Kernel livepatch support for for s390x
Dimitri John Ledkov
1639924 at bugs.launchpad.net
Wed Feb 15 10:11:57 UTC 2023
kpatch was updated in lunar, and canonical-livepatch-service has a
backport of that in their PPAs to build livepatches on jammy.
** Changed in: kpatch (Ubuntu Jammy)
Status: Confirmed => Invalid
** Changed in: kpatch (Ubuntu Kinetic)
Status: Confirmed => Invalid
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-11 in Ubuntu.
https://bugs.launchpad.net/bugs/1639924
Title:
Kernel livepatch support for for s390x
Status in Ubuntu on IBM z Systems:
In Progress
Status in gcc-11 package in Ubuntu:
Fix Released
Status in kpatch package in Ubuntu:
Fix Released
Status in linux package in Ubuntu:
Fix Released
Status in gcc-11 source package in Jammy:
Fix Released
Status in kpatch source package in Jammy:
Invalid
Status in linux source package in Jammy:
Confirmed
Status in gcc-11 source package in Kinetic:
Fix Released
Status in kpatch source package in Kinetic:
Invalid
Status in linux source package in Kinetic:
Fix Released
Bug description:
[ Impact ]
* kpatch upstream has gained support for more architectures which we
would like to enable on LTS release. Since building livepatches using
the kpatch tooling makes the most sense on LTS kernels.
* This SRU is to enable s390x builds of kpatch on kinetic & jammy.
* Separately linux kernel patches for s390x will also be backported
to the GA kernel, whilst hwe-5.19 kernel already has all bugfixes to
support livepatches.
[ Test Plan ]
* Attempt to run and load sample integration livepatches from the
kpatch integration source code, against v5.15 & v5.19 kernels. These
should succeed on:
- amd64 jammy v5.15
- amd64 & s390x jammy v5.19
- amd64 & s390x kinetic v5.19
[ Where problems could occur ]
* The newly generated livepatches produced by this kpatch may have
different content (more or less sections/sybmols/relocations/etc), but
remain compatible with all prior kernels and tool-chains.
* This is a fairly large upstream update to the tooling.
* One command line option to kpatch-build is no longer supported
'-e', instead long form command line option must be used '--oot-
module'. And '--ott-module-src' becomes mandatory in such cases,
previously '--sourcedire' was required.
Additional command line options added '--oot-module-src, -R|--non-
replace'.
'--skip-gcc-check' is still supported but prints warnings, it is
deprecated in favour of '--skip-compiler-check'.
kpatch-cc utility is added, which is a toolchain wrapper.
Thus adjustments might be needed to scripts used to invoke and create
kpatch modules.
* Majority of non-test/non-doc changes are to do with:
- add support for s390x and 32bit powerpc
- add support for newer kernels and compilers (support & bugfixes to various sections and symbols)
- more strict checking and bugfixes w.r.t. livepatch generation
- refactoring and better build support for cross-compiled modules, compilation for various linux distributions, and code cleanups.
* Some of the fixes from these new upstream releases have already been
cherry-picked in the kpatch, but others might soon be needed on x84,
i.e. to support gcc-12 built kernels.
$ git log --no-merges --oneline v0.8.0..v0.9.7 -- kmod/ kpatch-
build/ > shortlog.txt
d46fea98ef kpatch-build: strengthen conditions for changed sections
9fac261ed0 kpatch-build: rela section could disappear after patched
fe45029b4d kpatch-build: fix KBUILD_MODNAME for OOT modules
8cc0fedefb kpatch-build: use err.h instead of error.h for musl support
07433e98c0 kpatch-cc: fix stripping of source tree prefix
33368a88cd create-diff-object: add support for .return_sites section (x86)
e921c557f9 macros: tweak syscall patching macros
a1171b112e create-diff-object: Create missing section symbol
0308d52bcd kpatch/s390: Enable kpatch build support
b0330ab18e kpatch/s390: Add additional bundled symbols.
eb4a85f778 kpatch/s390: Add exclusion lists
f0d00a9290 kpatch/s390: Add initial support for kpatch
10002f5aa6 kpatch/s390: Add gcc prerequisite flags for kpatch
c6d0b5450b lookup: fix symtab parsing
52863dace0 create-diff-object: fix endianness in kpatch_no_sibling_calls_ppc64le()
017015a725 create-diff-object: make kpatch_check_relocations() more precise
f0e3da336c create-diff-object: fix string extraction
86d5208b46 create-diff-object: error on symbol conversion failure
325bccd89d create-diff-object: skip conversion for sections which never have symbols
8508abd3b1 create-diff-object: allow converstion of empty symbols
8d5a628bde create-diff-object: add extra check for symbol conversion edge case
01427d50a1 create-diff-object: move addend math to a new function
bec6488af6 create-diff-object: add rela_insn() error check
6b1895a6b7 create-diff-object: convert rela_insn() to take normal 'sec'
bf212f7750 create-diff-object: error on unsupported rela in symbol conversion
3f8e1062cc create-diff-object: support R_X86_64_NONE in kpatch_replace_sections_syms()
79f45d1b0a create-diff-object: fix kpatch_replace_sections_syms() for non-text
61e46094b5 create-diff-object: convert function return types to 'bool'
c24d135f40 create-diff-object: rename "sec" -> "relasec" for rela sections
3b63456817 kpatch-elf: convert functions to static
0c5a1e7753 kpatch-build: make xtrace output less verbose
2784f5056b kpatch-build: add support for openEuler
3392049665 kpatch-build: remove duplicated use_klp_arch
e9c0b67862 macros: add syscall patching macros
c2e73c2cbc create-diff-object: ensure debug sections don't use dynrelas
305ff8a5d8 create-diff-object: include .LCx string literal symbols
b700732f5d create-diff-object: add "_printk" to the __LINE__ detection
79fd60b28d create-diff-object: check arg2 and arg3 on all arches for line detection
f7b27f2fec kpatch-build: Increase name length limit to 55 chars
e6b1664d0e create-diff-object.c: add s390 support for __LINE__ detection
a6920b9381 create-diff-object: fix endian issues in insn_is_load_immediate()
1152e58244 create-diff-object: support __LINE__ detection for btrfs macros
fea0192104 kpatch-build: Allow setting kernel version if --sourcedir and --vmlinux are used
af672577b3 create-diff-object: use toc_rela() in kpatch_line_macro_change_only()
81296117f4 create-diff-object: unify kpatch_line_macro_change_only()
4ba6f1fbc9 create-diff-object: include __dyndbg section when referenced by jump table
8d81cc8517 kpatch-elf: symtab_shndx support
4d8c8102de Fix sym->type condition in locals_match()
4c0e4898d9 create-diff-object: detect architecture from input ELF file
394a907a37 create-diff-object: move kpatch_find_func_profiling_calls definition
0decc79d0b kpatch-build: introduce ability to ignore distro-specific checks
fd0457b9f3 kpatch-build: add cross-compilation support
c4286ee2cb create-diff-object: add support for .retpoline_sites section
9ee9f7a3ec kpatch-build: Add missing allocation failure checks
bdc43561e9 kpatch-build: combine find_special_section_data() variants
34fcfd4d56 kpatch-build: source kernel .config instead of grepping
89a871fff9 Fix oot-module builds
aa85922ec6 Do not unset KBUILD_EXTRA_SYMBOLS
4a7dab17c8 Allow OOT modules to be built with non-distro kernels
6c4c8c0a2d create-diff-object: update for __already_done
f5175a402b kpatch-build: save environment varibles to file
6673c693d6 kmod/patch: clean only rebuildable objs
607ee53e1e livepatch-patch-hook: add comments
4f51ee7fa3 create-diff-object: support ppc64le relative jump labels
cb23c601f6 kpatch-build: Handle error in create-klp-module
ef0ce9715a create-diff-object: fix use after free in kpatch-check-relocations()
70b8fe8f95 kpatch-build: Do not check KLP_REPLACE for kpatch.ko-based patches
eaaced1912 add openEuler build support
99542e864e create-diff-object: rename arguments in most correlate/compare functions
22e16619e0 create-diff-object: base->orig renames
e2b50d7b66 create-diff-object: make locals_match() and maybe_discarded_sym() return bool
720768767d Switch to per-file lookup table pointers.
db442d1405 Make lookup_symbol() accept struct symbol as an argument
56471ffc7c kpatch-build: Support CONFIG_PRINTK_INDEX, part 2
6cf50a6fca create-diff-object: Support CONFIG_PRINTK_INDEX, part 1
ea0470baa7 create-diff-object: change kpatch_line_macro_change_only() return type to bool
a02668a0f7 kmod: remove redundant -mcmodel=large on ppc64le
624e5e3b82 kmod: pass CFLAGS_MODULE to module build
5622e3cc3d Make sure section symbols exist
a26b2af2a3 kpatch-build: set EXTRAVERSION and not localversion for RH kernels
ba3defa060 create-diff-object: Check that the section has a secsym
17dcebf077 kpatch-build: enable klp with replace option by default
d9f49e850a kpatch-build: drop klp.arch support in RHEL-8.4
81f9ca4833 create-diff-object: Fix out-of-range relocation check
fa5a95cafd create-diff-object: Fix out-of-range relocation error message
7be75549ba kpatch-build: add support for static calls
6d466fa76f kpatch-build: drop klp.arch support in RHEL-8.4
f9d2ec1d77 kpatch-build: fix kernel_is_rhel() for rhel-8 z-stream kernels
1b5a17f934 create-build-diff: support for .cold functions with no id suffix
fc4a56f6b2 kpatch-build: check existance of Makefile.modfinal
4cc2f06279 kpatch-build: workaround pahole and CONFIG_DEBUG_INFO_BTF_MODULES
6c83b642a4 create-diff-object: make digit tail optional in kpatch_mengled_strcmp
b6e1d071ff create-diff-object: consider '.L' symbols not static local
fddc6242c6 create-diff-object: support both gcc and clang style of static variables
38c2d7315d create-diff-object: clang __UNIQUE_ID symbol support
488f30c31b create-diff-object: .L.str* symbols support
41de9e763a kpatch-build: clang support
f951c1a92e kpatch-build: apply 'cp -f ... || die' pattern
e25450f5a8 kpatch-build: workaround pahole and CONFIG_DEBUG_INFO_BTF
387914b683 kpatch-gcc: powerpc - skip vdso files
04021bbfd5 kmod/patch: add kpatch.lds as a dependency for $(KPATCH_NAME).o
b8d4611edb kmod: convert __section to __kpatch_section
aea2cb96d6 create-diff-object: fix __dyndbg section inclusion
ef420050e3 kpatch-elf: pass new ELF output file mode to kpatch_write_output_elf()
25f12681fa create-diff-object: cleanup maybe-uninitialized compiler complaints
08056febfd kpatch-build: Check Final module symbols for loadability
e9600c5513 kpatch-build: Check exported symbol version changes
b4c2753684 kpatch-build: Create module symbol version file once
b311112702 deal with the deadlock may occur in stop_machine context.
6531a7e075 kpatch-build: avoid modpost .output.o.cmd complaints
ea647e50ae kpatch-build/Makefile: Fail build on unsupported architectures
17ec03ef95 Keep build.log on --skip-cleanup
ed849a9b3e create-diff-object: Ignore changes to .altinstr_aux
abd2ff81c7 create-diff-object: change rela_equal() to return bool
514acc32e9 create-diff-object: improve jump label warnings
b381a0cc0b lookup: Add __UNIQUE_ID_ to maybe_discarded_sym list
67aa131137 gcc-plugin: GCC 10 - update local/non local insn names
92c42039bf gcc-plugin: abort building klp module on error
fde1a75b7f gcc-plugin: Fix build failure with GCC 10
b958ed601c create-diff-object: Add ppc64le mcount support
9bb75659e2 kpatch-build: Detect R_X86_64_64 dynrelas with large addends
15067fcd64 kmod/core: apply dynrela addend for R_X86_64_64
c1caee1468 create-diff-object: Ignore kpatch_ignored functions/sections missing ftrace hook
1991ff0018 create-diff-object: add support for .klp.arch removal
3982b329bc kpatch-build: drop support for old non-.klp.arch kernels
e80562a8cb kpatch-build: add kpatch.ko deprecation warning
d97de8d554 kpatch-build: readability cleanups
4e0db559c1 lookup: fix Module.symvers reading for newer kernels
89e8574027 create-diff-object: show all jump labels before reporting failure
0a3e6c5f42 create-diff-object: refactor dynrela conversion
d2089a4d72 create-diff-object: rename lookup 'result' -> 'symbol'
ae9f1c17b1 lookup: add duplicate symbol checks
3064cf3c60 lookup: add 'objname' to lookup table and lookup results
7e1f2b0e07 lookup: convert lookup functions to return bool
6cc03f9599 lookup: rename 'pos' to 'sympos'
cd121422d9 lookup: rename 'value' -> 'addr'
5fad6599a4 lookup: remove unused testing code
e4d37dad5d lookup: Skip .dynsym table in symtab_read()
7e48138185 lookup: Simplify first loop in symtab_read()
74c9c99931 create-diff-object: reduce indentation in kpatch_create_patches_sections()
b548ba153f kpatch-build: Look for local static variables in child functions
42128ff78c kpatch-build: Include .part. symbols as child function
b502e5b1cc kpatch-build: Allow function to have multiple child functions
af1fe267c5 create-diff-object: Avoid unnecessary parent symbol inclusion
fbfc8f9bec create-diff-object: Handle ppc64le toc with only constants
687e2caabc create-diff-object: Don't strip callback section symbols
37e950a653 create-kpatch-module: Fix -Wconversion warnings
ea9e708df0 create-klp-module: Fix -Wconversion warnings
f67c2ebce0 kpatch-elf: Fix -Wconversion warnings
5f68db22e5 create-diff-object: Fix -Wconversion warnings
a0c608de70 kpatch-build/Makefile: Skip build insn/plugin with -Wconversion
4e4a8d99da kpatch-build: add -Wconversion/-Wno-sign-conversion CFLAGS
f5f5479614 create-diff-object: fix relocations used for ZERO_PAGE(0)
61c55d9e52 kpatch-build: replace all '-' to '_' in KOBJFILE_NAME
68530e4c2b kpatch-build: Make local static twining stricter
19baa5b7c7 create-diff-object: process debug sections last
852bad5e8d create-diff-object: Use new helpers for static local correlation
e49e3a59c2 create-diff-object: Rename elements getting correlated
49a9adaf74 create-diff-object: Correlate objects related to a section at once
770f529225 kpatch-elf: Ensure stale references are not used
3a1a73f08c Make symvers reading code more flexible.
a02842fb69 kpatch-elf: Free sections in elf teardown
935f199875 create-diff-object: simplify mangled function correlation
e9755413ed kpatch-build: use whole word filename matching in find_parent_obj()
878bac379f create-diff-object: Simplify relocation processing
bd4fae25f9 create-diff-object: Add const to unmodified rela_insn arguments
50476c94cc create-diff-object: Check ELF headers earlier
2499eb2bdc Revert "create-diff-object: Check for *_fixup sections changes"
aabdf9c9c9 Fix parent matches for kernels newer than 5.3
ed5091b16f kpatch-build: Check if /etc/os-release exists
e4525ce311 kpatch-build: sanity check patched filenames
36120b9b08 kmod/patch: check for RHEL8 when setting HAVE_SIMPLE_ENABLE
e187de3fe4 kpatch-build: update core file error message
* This will be a potentially disruptive SRU, however it is required
to introduce building livepatches for the LTS v5.15 GA kernel on
s390x, and to continue support building kpatches on an LTS release for
the hwe based kernels. Kinetic update is required to not regress
support for kpatch building upon upgrades (even though that's not
provided by canonical).
[ Other Info ]
* Anything else you think is useful to include
* Anticipate questions from users, SRU, +1 maintenance, security teams and the Technical Board
* and address these questions in advance
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-z-systems/+bug/1639924/+subscriptions
More information about the foundations-bugs
mailing list