All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Ross Lagerwall <ross.lagerwall@citrix.com>
Cc: xen-devel@lists.xenproject.org,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Bertrand Marquis <bertrand.marquis@arm.com>,
	Michal Orzel <michal.orzel@amd.com>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Jan Beulich <jbeulich@suse.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] xen/livepatch: fixup relocations to replaced symbols
Date: Tue, 22 Jul 2025 17:30:39 +0200	[thread overview]
Message-ID: <aH-un8ZZ4M4bdY7J@macbook.local> (raw)
In-Reply-To: <CAG7k0Epu6XomC=b7eG8xgcVvXpmoTOUQdC7yD9LsmEHOKTv-gg@mail.gmail.com>

On Mon, Jul 21, 2025 at 04:51:33PM +0100, Ross Lagerwall wrote:
> On Wed, Jul 16, 2025 at 5:00 PM Roger Pau Monne <roger.pau@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?

Hm, it's kind of complicated (I'm not saying it's impossible).  I
think it will require renaming the replaced function symbols, and then
introducing new unresolved symbols that reference the existing
functions, and adjusting the relocations to point to those new
symbols.

Then Xen would resolve those symbols and the relocations would be
calculated using the old addresses.

You can not unconditionally replace all the relocations that point to
replacement symbols, as some of the relocations will need to point to
new vs old instances (just as this patch does, where not all
relocations are adjusted to point to the old addresses).

I can give it a try, but looks more complicated than the approach
here, as it requires crafting extra symbols to add to the payload, and
adjust relocations.

> This seems preferable to me rather than making the runtime code more
> complicated.
> 
> 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.

Indeed, storing pointers to newly introduced functions won't work,
that needs care, but it should be easier to spot by code review of the
livepatch.  Would be nice to get an automated way to prevent such
pointers from getting stored, but I can't think of a way to do it.

Thanks, Roger.


      parent reply	other threads:[~2025-07-22 15:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-16 16:00 [PATCH] xen/livepatch: fixup relocations to replaced symbols Roger Pau Monne
2025-07-16 16:31 ` Jan Beulich
2025-07-22 15:02   ` Roger Pau Monné
2025-07-22 15:56     ` Jan Beulich
2025-07-21 15:51 ` Ross Lagerwall
2025-07-21 15:58   ` Jan Beulich
2025-07-22 15:30   ` Roger Pau Monné [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aH-un8ZZ4M4bdY7J@macbook.local \
    --to=roger.pau@citrix.com \
    --cc=Volodymyr_Babchuk@epam.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=bertrand.marquis@arm.com \
    --cc=jbeulich@suse.com \
    --cc=julien@xen.org \
    --cc=michal.orzel@amd.com \
    --cc=ross.lagerwall@citrix.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.