public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Borislav Petkov <bp@alien8.de>, Juergen Gross <jgross@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	x86@kernel.org, linux-kernel@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH -tip v3 1/2] x86: xen: insn: Decode Xen and KVM emulate-prefix signature
Date: Fri, 6 Sep 2019 09:34:36 +0200	[thread overview]
Message-ID: <20190906073436.GS2349@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <156773434815.31441.12739136439382289412.stgit@devnote2>

On Fri, Sep 06, 2019 at 10:45:48AM +0900, Masami Hiramatsu wrote:

> diff --git a/arch/x86/include/asm/xen/interface.h b/arch/x86/include/asm/xen/interface.h
> index 62ca03ef5c65..fe33a9798708 100644
> --- a/arch/x86/include/asm/xen/interface.h
> +++ b/arch/x86/include/asm/xen/interface.h
> @@ -379,12 +379,15 @@ struct xen_pmu_arch {
>   * Prefix forces emulation of some non-trapping instructions.
>   * Currently only CPUID.
>   */
> +#include <asm/xen/prefix.h>
> +
>  #ifdef __ASSEMBLY__
> -#define XEN_EMULATE_PREFIX .byte 0x0f,0x0b,0x78,0x65,0x6e ;
> +#define XEN_EMULATE_PREFIX .byte __XEN_EMULATE_PREFIX ;
>  #define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
>  #else
> -#define XEN_EMULATE_PREFIX ".byte 0x0f,0x0b,0x78,0x65,0x6e ; "
> +#define XEN_EMULATE_PREFIX ".byte " __XEN_EMULATE_PREFIX_STR " ; "
>  #define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
> +
>  #endif

Possibly you can do something like:

#define XEN_EMULATE_PREFIX	__ASM_FORM(.byte __XEN_EMULATE_PREFIX ;)
#define XEN_CPUID		XEN_EMULATE_PREFIX __ASM_FORM(cpuid)

>  #endif /* _ASM_X86_XEN_INTERFACE_H */
> diff --git a/arch/x86/include/asm/xen/prefix.h b/arch/x86/include/asm/xen/prefix.h
> new file mode 100644
> index 000000000000..f901be0d7a95
> --- /dev/null
> +++ b/arch/x86/include/asm/xen/prefix.h
> @@ -0,0 +1,10 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef _TOOLS_ASM_X86_XEN_PREFIX_H
> +#define _TOOLS_ASM_X86_XEN_PREFIX_H
> +
> +#include <linux/stringify.h>
> +
> +#define __XEN_EMULATE_PREFIX  0x0f,0x0b,0x78,0x65,0x6e
> +#define __XEN_EMULATE_PREFIX_STR  __stringify(__XEN_EMULATE_PREFIX)
> +
> +#endif

How about we make this asm/virt_prefix.h or something and include:

/*
 * Virt escape sequences to trigger instruction emulation;
 * ideally these would decode to 'whole' instruction and not destroy
 * the instruction stream; sadly this is not true for the 'kvm' one :/
 */

#define __XEN_EMULATE_PREFIX  0x0f,0x0b,0x78,0x65,0x6e  /* ud2 ; .ascii "xen" */
#define __KVM_EMULATE_PREFIX  0x0f,0x0b,0x6b,0x76,0x6d	/* ud2 ; .ascii "kvm" */

> diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c
> index 0b5862ba6a75..b7eb50187db9 100644
> --- a/arch/x86/lib/insn.c
> +++ b/arch/x86/lib/insn.c

> @@ -58,6 +61,37 @@ void insn_init(struct insn *insn, const void *kaddr, int buf_len, int x86_64)
>  		insn->addr_bytes = 4;
>  }
>  
> +static const insn_byte_t xen_prefix[] = { __XEN_EMULATE_PREFIX };
> +/* See handle_ud()@arch/x86/kvm/x86.c */
> +static const insn_byte_t kvm_prefix[] = "\xf\xbkvm";

Then you can make this consistent; maybe even something like:

static const insn_byte_t *virt_prefix[] = {
	{ __XEN_EMULATE_PREFIX },
	{ __KVM_EMULATE_PREFIX },
	{ NULL },
};

And then change emulate_prefix_size to emulate_prefix_index ?

  reply	other threads:[~2019-09-06  7:35 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-06  1:45 [PATCH -tip v3 0/2] x86: kprobes: Prohibit kprobes on Xen/KVM emulate prefixes Masami Hiramatsu
2019-09-06  1:45 ` [PATCH -tip v3 1/2] x86: xen: insn: Decode Xen and KVM emulate-prefix signature Masami Hiramatsu
2019-09-06  7:34   ` Peter Zijlstra [this message]
2019-09-06  8:45     ` Masami Hiramatsu
2019-09-06  8:51       ` Masami Hiramatsu
2019-09-06  9:15         ` Peter Zijlstra
2019-09-06 10:28     ` Masami Hiramatsu
2019-09-06  1:45 ` [PATCH -tip v3 2/2] x86: kprobes: Prohibit probing on instruction which has emulate prefix Masami Hiramatsu

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=20190906073436.GS2349@hirez.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=andrew.cooper3@citrix.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=bp@alien8.de \
    --cc=jgross@suse.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@kernel.org \
    --cc=rdunlap@infradead.org \
    --cc=sstabellini@kernel.org \
    --cc=x86@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox