[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [livepatch-build-tools part3 v2 3/3] create-diff-object: Strip all undefined entires of known size

  • To: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>
  • From: "Wieczorkiewicz, Pawel" <wipawel@xxxxxxxxx>
  • Date: Mon, 19 Aug 2019 10:55:52 +0000
  • Accept-language: en-US
  • Cc: "Pohlack, Martin" <mpohlack@xxxxxxxxx>, "Wieczorkiewicz, Pawel" <wipawel@xxxxxxxxx>, Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>, xen-devel <xen-devel@xxxxxxxxxxxxx>
  • Delivery-date: Mon, 19 Aug 2019 10:56:17 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHVTegE+r4JLwWYmk2CwRCfIRe536b963kAgARyDAA=
  • Thread-topic: [livepatch-build-tools part3 v2 3/3] create-diff-object: Strip all undefined entires of known size

On 16. Aug 2019, at 17:02, Ross Lagerwall <ross.lagerwall@xxxxxxxxxx> wrote:

On 8/8/19 1:51 PM, Pawel Wieczorkiewicz wrote:
The patched ELF object file contains all sections and symbols as
resulted from the compilation. However, certain symbols may not be
copied over to the resulting object file, due to being unchanged or
not included for other reasons.
In such situation the resulting object file has the entire sections
copied along (with all their entries unchanged), while some of the
corresponding symbols are not copied along at all.
This leads to having incorrect undefined (STN_UNDEF) entries in the
final hotpatch ELF file.
The newly added function livepatch_strip_undefined_elements() detects
and removes all undefined RELA entries as well as their corresponding
PROGBITS section entries.
Since the sections may contain elements of unknown size (sh.sh_entsize
== 0), perform the strip only on sections with well defined entry
After replacing the stripped rela list, it is assumed that the next
invocation of the kpatch_rebuild_rela_section_data() will adjust all
section header parameters according to the current state.

The code in this patch seems to be very similar (i.e. somewhat copy-and-pasted) to kpatch_regenerate_special_section() which prunes the rela list and rebuilds the corresponding text section according to the predicate should_keep_rela_group(). The intent of the function also seems to be the same (only keep elements that are needed).

In what situations does the existing function not do the right thing?

Can should_keep_rela_group() be updated instead?

Yes, the code is largely based on the kpatch_regenerate_special_section(). However, the livepatch_strip_undefined_elements() and kpatch_regenerate_special_section() have different "granularity" and different scope.
1. Scope
- livepatch_strip_undefined_elements(): all RELA sections
kpatch_regenerate_special_section(): special RELA sections

2. "granularity"
- livepatch_strip_undefined_elements(): all relas to be checked
kpatch_regenerate_special_section(): all relas in a group are copied

I think it should be possible to create a common function with the base functionality that could take most of the common code in and then be used from within both of the functions.
However, I did not want to touch existing functionality and I am afraid the changes may result in a pretty convoluted code.

If you think it is still worth it, I can give it a shot.

Ross Lagerwall

Best Regards,
Pawel Wieczorkiewicz

Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Ralf Herbrich
Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
Sitz: Berlin
Ust-ID: DE 289 237 879

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.