[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86/compat: correct SMEP/SMAP NOPs patching

>>> On 25.05.16 at 17:00, <JBeulich@xxxxxxxx> wrote:
> Correct the number of single byte NOPs we want to be replaced in case
> neither SMEP nor SMAP are available.
> Also simplify the expression adding these NOPs - at that location .
> equals .Lcr4_orig, and removing that part of the expression fixes a
> bogus ".space or fill with negative value, ignored" warning by very old
> gas (which actually is what made me look at those constructs again).

That gas is behaving really strangely: For one, this morning the
warning now also appears with the patch in place. I'm sure it wasn't
there Wednesday night. Further, warning or not, the generated
code is wrong (no NOPs getting inserted at all, obviously resulting
in the BUG_ON(a->replacementlen > a->instrlen) in
apply_alternatives_nocheck() to trigger during boot). And finally,
generated code is right (and the warning gone) when having gas
produce a listing via -a. In that case, however, it errors on the four
.rept in the hypercall (argument) tables, so we also can't easily use
that as a workaround. .list / .nolist don't alter behavior for either of
the two issues.

I've tried to find some other workaround, but I'm now willing to give
up, as there are clearly more useful things to do. We may want /
need to consider raising the bar for which binutils versions we
support building with.


> --- a/xen/arch/x86/x86_64/compat/entry.S
> +++ b/xen/arch/x86/x86_64/compat/entry.S
> @@ -175,7 +175,7 @@ compat_bad_hypercall:
>  ENTRY(compat_restore_all_guest)
>  .Lcr4_orig:
> -        .skip (.Lcr4_alt_end - .Lcr4_alt) - (. - .Lcr4_orig), 0x90
> +        .skip .Lcr4_alt_end - .Lcr4_alt, 0x90
>  .Lcr4_orig_end:
>          .pushsection .altinstr_replacement, "ax"
>  .Lcr4_alt:
> @@ -200,7 +200,8 @@ ENTRY(compat_restore_all_guest)
>          jne   1b
>  .Lcr4_alt_end:
>          .section .altinstructions, "a"
> -        altinstruction_entry .Lcr4_orig, .Lcr4_orig, X86_FEATURE_ALWAYS, 12, 
> 0
> +        altinstruction_entry .Lcr4_orig, .Lcr4_orig, X86_FEATURE_ALWAYS, \
> +                             (.Lcr4_orig_end - .Lcr4_orig), 0
>          altinstruction_entry .Lcr4_orig, .Lcr4_alt, X86_FEATURE_SMEP, \
>                               (.Lcr4_orig_end - .Lcr4_orig), \
>                               (.Lcr4_alt_end - .Lcr4_alt)

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.