On 21.07.2025 17:51, Ross Lagerwall wrote:
> On Wed, Jul 16, 2025 at 5:00 PM Roger Pau Monne <roger....@citrix.com> 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).
>>
> 
> Would it be possible to fix this at build time instead by generating the
> payload such that relocations to changed functions always point at the
> Xen function rather than the included function?

How would you express the difference in the object file? If that's possible
(without problematic heuristics), ...

> This seems preferable to me rather than making the runtime code more
> complicated.

... I agree this would be quite a bit better.

Jan

> Of course, neither approach would fix all cases - if the function is
> completely new calling it would still page-fault after reverting the
> live patch - so the usual care needs to be taken when creating live
> patches.
> 
> Ross


Reply via email to