On 16.07.2025 18:00, Roger Pau Monne wrote:
> In a livepatch payload relocations will refer to included functions.  If
> that function happens to be a replacement for an existing Xen function, the
> relocations on the livepatch payload will use the newly introduced symbol,
> rather than the old one.  This is usually fine, but if the result of the
> relocation is stored for later use (for example in the domain struct),
> usages of this address will lead to a page-fault once the livepatch is
> reverted.
> 
> Implement a second pass over relocations once the list of replaced
> functions has been loaded, and fixup any references to replaced functions
> to use the old symbol address instead of the new one.  There are some
> sections that must be special cased to continue using the new symbol
> address, as those instances must reference the newly added livepatch
> content (for example the alternative patch sites).

This is what I was fearing, when you first mentioned the problem (and the
plan) to me. What I don't see is why you do your fixing up regardless of
relocation type. Relative relocations within the payload ought to be fine
to not override? At which point some of the special casing may already no
longer be necessary.

(Later) Except that if code uses PC-relative addressing to determine a
pointer to store into some struct, that'll appear as a relative relocation
type, too. But then you may have a bigger problem: When referencing and
referenced code are in the same section and in the same translation unit,
the assembler could avoid emitting a relocation altogether. You would see
nothing to fix up ...

Jan

Reply via email to