|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 07/20] arm/x86: Add ALTERNATIVE and HAS_EX_TABLE
On Tue, Sep 06, 2016 at 04:36:40PM -0400, Konrad Rzeszutek Wilk wrote:
> On Thu, Aug 25, 2016 at 08:56:07AM -0600, Jan Beulich wrote:
> > >>> On 25.08.16 at 15:58, <andrew.cooper3@xxxxxxxxxx> wrote:
> > > On 25/08/16 14:37, Konrad Rzeszutek Wilk wrote:
> > >
> > >> x86 implements all of them by default - and we just
> > >> add two extra CONFIG_ variables to be declared in autoconf.h.
> > >>
> > >> ARM 64 only has alternative while ARM 32 has none of them.
> > >>
> > >> And while at it change the livepatch common code that
> > >> would benefit from this.
> > >>
> > >> Suggested-by: Julien Grall <julien.grall@xxxxxxx>
> > >> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> > >
> > > Surely livepatch should select alternatives ?
> >
> > DYM depend on? It clearly shouldn't select them, as whether
> > they're present is determined by arch code.
>
> And I am not sure if there is a need for Kconfig LIVEPATCH
> entry to depend on it?
>
> Especially as the common/livepatch.c has #ifef CONFIG_ALTERNATIVE
> (and also CONFIG_HAS_EX_TABLE) - added by this patch - to deal with
> architectures that do not have support them.
>
> Ssuch as ARM 32 or ARM64 without errata support built-in.
Err, ARM64 is always built with alternative, hence:
>
> I spun out an seperate patch that would thrown an -EOPNOTSUPP
> if these sections are part of the payload and the hypervisor
> was built without the support, like this:
>
> (This is to be on top of the patch discussed - or if folks
> prefer I can squash it in).
>
> From 3a4953dd0f7d2411e5d638a82bfe57c0e16a22b3 Mon Sep 17 00:00:00 2001
> From: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> Date: Tue, 6 Sep 2016 16:28:23 -0400
> Subject: [PATCH] livepatch: Reject payloads with .alternative or .ex_table if
> support is not built-in.
>
> ARM 64 can be built without alternative support (without the
> errata support) - and it would sad if the payload loaded
> had .alternative section but we did not support parsing it.
This would never happen.
So please ignore the patch below.
>
> As this could lead to sad results instead of ignoring this
> lets error out during loading.
>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
>
> ---
> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> Cc: Julien Grall <julien.grall@xxxxxxx>
> Cc: Jan Beulich <jbeulich@xxxxxxxx>
> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
>
> v3: New submission.
> ---
> xen/common/livepatch.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/xen/common/livepatch.c b/xen/common/livepatch.c
> index 73d4edb..342a5ec 100644
> --- a/xen/common/livepatch.c
> +++ b/xen/common/livepatch.c
> @@ -685,10 +685,10 @@ static int prepare_payload(struct payload *payload,
> sizeof(*region->frame[i].bugs);
> }
>
> -#ifdef CONFIG_HAS_ALTERNATIVE
> sec = livepatch_elf_sec_by_name(elf, ".altinstructions");
> if ( sec )
> {
> +#ifdef CONFIG_HAS_ALTERNATIVE
> struct alt_instr *a, *start, *end;
>
> if ( sec->sec->sh_size % sizeof(*a) )
> @@ -715,13 +715,17 @@ static int prepare_payload(struct payload *payload,
> }
> }
> apply_alternatives(start, end);
> - }
> +#else
> + dprintk(XENLOG_ERR, LIVEPATCH "%s: We don't support alternative
> patching!\n",
> + elf->name);
> + return -EOPNOTSUPP;
> #endif
> + }
>
> -#ifdef CONFIG_HAS_EX_TABLE
> sec = livepatch_elf_sec_by_name(elf, ".ex_table");
> if ( sec )
> {
> +#ifdef CONFIG_HAS_EX_TABLE
> struct exception_table_entry *s, *e;
>
> if ( !sec->sec->sh_size ||
> @@ -740,8 +744,12 @@ static int prepare_payload(struct payload *payload,
>
> region->ex = s;
> region->ex_end = e;
> - }
> +#else
> + dprintk(XENLOG_ERR, LIVEPATCH "%s: We don't support .ex_table!\n",
> + elf->name);
> + return -EOPNOTSUPP;
> #endif
> + }
>
> return 0;
> }
> --
> 2.4.11
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |