|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 6/8] xen/livepatch: Support new altcall scheme
On Wed, Apr 23, 2025 at 02:02:35AM +0100, Andrew Cooper wrote:
> The new altcall scheme uses an .alt_call_sites section. Wire this up in very
> much the same way as the .altinstructions section, although there is less
> sanity checking necessary.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
One nit/comment below.
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> CC: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>
> ---
> xen/arch/x86/alternative.c | 6 ++++
> xen/common/livepatch.c | 58 ++++++++++++++++++++++++++++++
> xen/include/xen/alternative-call.h | 8 +++--
> 3 files changed, 70 insertions(+), 2 deletions(-)
>
> diff --git a/xen/arch/x86/alternative.c b/xen/arch/x86/alternative.c
> index f6594e21a14c..22af224f08f7 100644
> --- a/xen/arch/x86/alternative.c
> +++ b/xen/arch/x86/alternative.c
> @@ -479,6 +479,12 @@ int apply_alternatives(struct alt_instr *start, struct
> alt_instr *end)
> {
> return _apply_alternatives(start, end, true);
> }
> +
> +int livepatch_apply_alt_calls(const struct alt_call *start,
> + const struct alt_call *end)
> +{
> + return apply_alt_calls(start, end);
> +}
> #endif
>
> #define ALT_INSNS (1U << 0)
> diff --git a/xen/common/livepatch.c b/xen/common/livepatch.c
> index 6ce77bf021b7..be9b7e367553 100644
> --- a/xen/common/livepatch.c
> +++ b/xen/common/livepatch.c
> @@ -905,6 +905,64 @@ static int prepare_payload(struct payload *payload,
> #endif
> }
>
> + sec = livepatch_elf_sec_by_name(elf, ".alt_call_sites");
> + if ( sec )
> + {
> +#ifdef CONFIG_ALTERNATIVE_CALL
> + const struct alt_call *a, *start, *end;
> +
> + if ( !section_ok(elf, sec, sizeof(*a)) )
> + return -EINVAL;
> +
> + /* Tolerate an empty .alt_call_sites section... */
> + if ( sec->sec->sh_size == 0 )
You could possibly move this check to the outer `if` condition, and
avoid the alt_call_done label?
As even in the !CONFIG_ALTERNATIVE_CALL case skipping an empty section
would be OK.
Thanks, Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |