All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC
@ 2022-03-16  4:16 Lai Jiangshan
  2022-03-17 22:19 ` Josh Poimboeuf
  2022-05-18 18:44 ` [tip: x86/sev] x86/sev: Annotate stack change in the #VC handler tip-bot2 for Lai Jiangshan
  0 siblings, 2 replies; 8+ messages in thread
From: Lai Jiangshan @ 2022-03-16  4:16 UTC (permalink / raw)
  To: linux-kernel
  Cc: x86, Lai Jiangshan, Joerg Roedel, Josh Poimboeuf,
	Andy Lutomirski, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
	Dave Hansen, H. Peter Anvin

From: Lai Jiangshan <jiangshan.ljs@antgroup.com>

In idtentry_vc(), the real frame is changed after it switches to new
stack, ENCODE_FRAME_POINTER should be called in case for unwinder.

Cc: Joerg Roedel <jroedel@suse.de>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com>
---
 arch/x86/entry/entry_64.S | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index e20eabaa56b8..f99f2881ed83 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -540,6 +540,7 @@ SYM_CODE_START(\asmsym)
 	call	vc_switch_off_ist
 	movq	%rax, %rsp		/* Switch to new stack */
 
+	ENCODE_FRAME_POINTER
 	UNWIND_HINT_REGS
 
 	/* Update pt_regs */
-- 
2.19.1.6.gb485710b


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC
  2022-03-16  4:16 [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC Lai Jiangshan
@ 2022-03-17 22:19 ` Josh Poimboeuf
  2022-03-18  1:14   ` Lai Jiangshan
  2022-05-18 18:44 ` [tip: x86/sev] x86/sev: Annotate stack change in the #VC handler tip-bot2 for Lai Jiangshan
  1 sibling, 1 reply; 8+ messages in thread
From: Josh Poimboeuf @ 2022-03-17 22:19 UTC (permalink / raw)
  To: Lai Jiangshan
  Cc: linux-kernel, x86, Lai Jiangshan, Joerg Roedel, Andy Lutomirski,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin

On Wed, Mar 16, 2022 at 12:16:12PM +0800, Lai Jiangshan wrote:
> From: Lai Jiangshan <jiangshan.ljs@antgroup.com>
> 
> In idtentry_vc(), the real frame is changed after it switches to new
> stack, ENCODE_FRAME_POINTER should be called in case for unwinder.
> 
> Cc: Joerg Roedel <jroedel@suse.de>
> Cc: Josh Poimboeuf <jpoimboe@redhat.com>
> Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com>
> ---
>  arch/x86/entry/entry_64.S | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
> index e20eabaa56b8..f99f2881ed83 100644
> --- a/arch/x86/entry/entry_64.S
> +++ b/arch/x86/entry/entry_64.S
> @@ -540,6 +540,7 @@ SYM_CODE_START(\asmsym)
>  	call	vc_switch_off_ist
>  	movq	%rax, %rsp		/* Switch to new stack */
>  
> +	ENCODE_FRAME_POINTER
>  	UNWIND_HINT_REGS
>  
>  	/* Update pt_regs */

Looks right to me.  Any chance you have the ability to test this
scenario by unwinding from #VC with CONFIG_FRAME_POINTER?

-- 
Josh


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC
  2022-03-17 22:19 ` Josh Poimboeuf
@ 2022-03-18  1:14   ` Lai Jiangshan
  2022-03-18 17:03     ` Josh Poimboeuf
  0 siblings, 1 reply; 8+ messages in thread
From: Lai Jiangshan @ 2022-03-18  1:14 UTC (permalink / raw)
  To: Josh Poimboeuf
  Cc: LKML, X86 ML, Lai Jiangshan, Joerg Roedel, Andy Lutomirski,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin

On Fri, Mar 18, 2022 at 6:19 AM Josh Poimboeuf <jpoimboe@redhat.com> wrote:
>
> On Wed, Mar 16, 2022 at 12:16:12PM +0800, Lai Jiangshan wrote:
> > From: Lai Jiangshan <jiangshan.ljs@antgroup.com>
> >
> > In idtentry_vc(), the real frame is changed after it switches to new
> > stack, ENCODE_FRAME_POINTER should be called in case for unwinder.
> >
> > Cc: Joerg Roedel <jroedel@suse.de>
> > Cc: Josh Poimboeuf <jpoimboe@redhat.com>
> > Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com>
> > ---
> >  arch/x86/entry/entry_64.S | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
> > index e20eabaa56b8..f99f2881ed83 100644
> > --- a/arch/x86/entry/entry_64.S
> > +++ b/arch/x86/entry/entry_64.S
> > @@ -540,6 +540,7 @@ SYM_CODE_START(\asmsym)
> >       call    vc_switch_off_ist
> >       movq    %rax, %rsp              /* Switch to new stack */
> >
> > +     ENCODE_FRAME_POINTER
> >       UNWIND_HINT_REGS
> >
> >       /* Update pt_regs */
>
> Looks right to me.  Any chance you have the ability to test this
> scenario by unwinding from #VC with CONFIG_FRAME_POINTER?
>

I don't have the hardware to test it.  Actually, it was you to
inspire me to find this in the conversation of my patchset when
I tried to search all the code of switching of %rsp to see how
ENCODE_FRAME_POINTER and UNWIND_HINT_REGS are used once more.

> --
> Josh
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC
  2022-03-18  1:14   ` Lai Jiangshan
@ 2022-03-18 17:03     ` Josh Poimboeuf
  2022-04-12 12:24       ` Lai Jiangshan
  0 siblings, 1 reply; 8+ messages in thread
From: Josh Poimboeuf @ 2022-03-18 17:03 UTC (permalink / raw)
  To: Lai Jiangshan
  Cc: LKML, X86 ML, Lai Jiangshan, Joerg Roedel, Andy Lutomirski,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin

On Fri, Mar 18, 2022 at 09:14:09AM +0800, Lai Jiangshan wrote:
> On Fri, Mar 18, 2022 at 6:19 AM Josh Poimboeuf <jpoimboe@redhat.com> wrote:
> >
> > On Wed, Mar 16, 2022 at 12:16:12PM +0800, Lai Jiangshan wrote:
> > > From: Lai Jiangshan <jiangshan.ljs@antgroup.com>
> > >
> > > In idtentry_vc(), the real frame is changed after it switches to new
> > > stack, ENCODE_FRAME_POINTER should be called in case for unwinder.
> > >
> > > Cc: Joerg Roedel <jroedel@suse.de>
> > > Cc: Josh Poimboeuf <jpoimboe@redhat.com>
> > > Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com>
> > > ---
> > >  arch/x86/entry/entry_64.S | 1 +
> > >  1 file changed, 1 insertion(+)
> > >
> > > diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
> > > index e20eabaa56b8..f99f2881ed83 100644
> > > --- a/arch/x86/entry/entry_64.S
> > > +++ b/arch/x86/entry/entry_64.S
> > > @@ -540,6 +540,7 @@ SYM_CODE_START(\asmsym)
> > >       call    vc_switch_off_ist
> > >       movq    %rax, %rsp              /* Switch to new stack */
> > >
> > > +     ENCODE_FRAME_POINTER
> > >       UNWIND_HINT_REGS
> > >
> > >       /* Update pt_regs */
> >
> > Looks right to me.  Any chance you have the ability to test this
> > scenario by unwinding from #VC with CONFIG_FRAME_POINTER?
> >
> 
> I don't have the hardware to test it.  Actually, it was you to
> inspire me to find this in the conversation of my patchset when
> I tried to search all the code of switching of %rsp to see how
> ENCODE_FRAME_POINTER and UNWIND_HINT_REGS are used once more.

Ok, maybe Joerg can test it.  It looks obviously right to me though.
Since it fixes a real frame pointer unwinding bug, it probably needs:

  Fixes: a13644f3a53d ("x86/entry/64: Add entry code for #VC handler")

Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>

-- 
Josh


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC
  2022-03-18 17:03     ` Josh Poimboeuf
@ 2022-04-12 12:24       ` Lai Jiangshan
  2022-04-27  8:26         ` Lai Jiangshan
  0 siblings, 1 reply; 8+ messages in thread
From: Lai Jiangshan @ 2022-04-12 12:24 UTC (permalink / raw)
  To: Josh Poimboeuf
  Cc: LKML, X86 ML, Lai Jiangshan, Joerg Roedel, Andy Lutomirski,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin

On Sat, Mar 19, 2022 at 1:03 AM Josh Poimboeuf <jpoimboe@redhat.com> wrote:

> Ok, maybe Joerg can test it.  It looks obviously right to me though.

It looks also obviously right to me.

Hello, Joerg

Any feedback?

> Since it fixes a real frame pointer unwinding bug, it probably needs:
>
>   Fixes: a13644f3a53d ("x86/entry/64: Add entry code for #VC handler")
>
> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>

Hello, Borislav

Can you have a look at the patch, please?

Thanks
Lai

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC
  2022-04-12 12:24       ` Lai Jiangshan
@ 2022-04-27  8:26         ` Lai Jiangshan
  2022-05-13  9:04           ` Lai Jiangshan
  0 siblings, 1 reply; 8+ messages in thread
From: Lai Jiangshan @ 2022-04-27  8:26 UTC (permalink / raw)
  To: Josh Poimboeuf
  Cc: LKML, X86 ML, Lai Jiangshan, Joerg Roedel, Andy Lutomirski,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin

On Tue, Apr 12, 2022 at 8:24 PM Lai Jiangshan <jiangshanlai@gmail.com> wrote:
>
> On Sat, Mar 19, 2022 at 1:03 AM Josh Poimboeuf <jpoimboe@redhat.com> wrote:
>
> > Ok, maybe Joerg can test it.  It looks obviously right to me though.
>
> It looks also obviously right to me.
>
> Hello, Joerg
>
> Any feedback?
>
> > Since it fixes a real frame pointer unwinding bug, it probably needs:
> >
> >   Fixes: a13644f3a53d ("x86/entry/64: Add entry code for #VC handler")
> >
> > Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
>
> Hello, Borislav
>
> Can you have a look at the patch, please?
>
> Thanks
> Lai


Hello

Ping.

Thanks
Lai

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC
  2022-04-27  8:26         ` Lai Jiangshan
@ 2022-05-13  9:04           ` Lai Jiangshan
  0 siblings, 0 replies; 8+ messages in thread
From: Lai Jiangshan @ 2022-05-13  9:04 UTC (permalink / raw)
  To: Joerg Roedel, Brijesh Singh, Tom Lendacky
  Cc: LKML, X86 ML, Lai Jiangshan, Josh Poimboeuf, Andy Lutomirski,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin

+ Brijesh
+ Tom

On Wed, Apr 27, 2022 at 4:26 PM Lai Jiangshan <jiangshanlai@gmail.com> wrote:
>
> On Tue, Apr 12, 2022 at 8:24 PM Lai Jiangshan <jiangshanlai@gmail.com> wrote:
> >
> > On Sat, Mar 19, 2022 at 1:03 AM Josh Poimboeuf <jpoimboe@redhat.com> wrote:
> >
> > > Ok, maybe Joerg can test it.  It looks obviously right to me though.
> >
> > It looks also obviously right to me.
> >
> > Hello, Joerg
> >
> > Any feedback?
> >
> > > Since it fixes a real frame pointer unwinding bug, it probably needs:
> > >
> > >   Fixes: a13644f3a53d ("x86/entry/64: Add entry code for #VC handler")
> > >
> > > Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
> >
> > Hello, Borislav
> >
> > Can you have a look at the patch, please?
> >
> > Thanks
> > Lai
>
>
> Hello
>
> Ping.
>
> Thanks
> Lai


Hello, Joerg, Brijesh, Tom

Ping.

Thanks
Lai

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [tip: x86/sev] x86/sev: Annotate stack change in the #VC handler
  2022-03-16  4:16 [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC Lai Jiangshan
  2022-03-17 22:19 ` Josh Poimboeuf
@ 2022-05-18 18:44 ` tip-bot2 for Lai Jiangshan
  1 sibling, 0 replies; 8+ messages in thread
From: tip-bot2 for Lai Jiangshan @ 2022-05-18 18:44 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Lai Jiangshan, Borislav Petkov, Josh Poimboeuf, x86, linux-kernel

The following commit has been merged into the x86/sev branch of tip:

Commit-ID:     c42b145181aafd59ed31ccd879493389e3ea5a08
Gitweb:        https://git.kernel.org/tip/c42b145181aafd59ed31ccd879493389e3ea5a08
Author:        Lai Jiangshan <jiangshan.ljs@antgroup.com>
AuthorDate:    Wed, 16 Mar 2022 12:16:12 +08:00
Committer:     Borislav Petkov <bp@suse.de>
CommitterDate: Wed, 18 May 2022 20:36:03 +02:00

x86/sev: Annotate stack change in the #VC handler

In idtentry_vc(), vc_switch_off_ist() determines a safe stack to
switch to, off of the IST stack. Annotate the new stack switch with
ENCODE_FRAME_POINTER in case UNWINDER_FRAME_POINTER is used.

A stack walk before looks like this:

  CPU: 0 PID: 0 Comm: swapper Not tainted 5.18.0-rc7+ #2
  Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
  Call Trace:
   <TASK>
   dump_stack_lvl
   dump_stack
   kernel_exc_vmm_communication
   asm_exc_vmm_communication
   ? native_read_msr
   ? __x2apic_disable.part.0
   ? x2apic_setup
   ? cpu_init
   ? trap_init
   ? start_kernel
   ? x86_64_start_reservations
   ? x86_64_start_kernel
   ? secondary_startup_64_no_verify
   </TASK>

and with the fix, the stack dump is exact:

  CPU: 0 PID: 0 Comm: swapper Not tainted 5.18.0-rc7+ #3
  Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
  Call Trace:
   <TASK>
   dump_stack_lvl
   dump_stack
   kernel_exc_vmm_communication
   asm_exc_vmm_communication
  RIP: 0010:native_read_msr
  Code: ...
  < snipped regs >
   ? __x2apic_disable.part.0
   x2apic_setup
   cpu_init
   trap_init
   start_kernel
   x86_64_start_reservations
   x86_64_start_kernel
   secondary_startup_64_no_verify
   </TASK>

  [ bp: Test in a SEV-ES guest and rewrite the commit message to
    explain what exactly this does. ]

Fixes: a13644f3a53d ("x86/entry/64: Add entry code for #VC handler")
Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Link: https://lore.kernel.org/r/20220316041612.71357-1-jiangshanlai@gmail.com
---
 arch/x86/entry/entry_64.S | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index 4faac48..f7bd800 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -505,6 +505,7 @@ SYM_CODE_START(\asmsym)
 	call	vc_switch_off_ist
 	movq	%rax, %rsp		/* Switch to new stack */
 
+	ENCODE_FRAME_POINTER
 	UNWIND_HINT_REGS
 
 	/* Update pt_regs */

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-05-18 18:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-16  4:16 [PATCH] x86/sev: Add ENCODE_FRAME_POINTER after stack changed for #VC Lai Jiangshan
2022-03-17 22:19 ` Josh Poimboeuf
2022-03-18  1:14   ` Lai Jiangshan
2022-03-18 17:03     ` Josh Poimboeuf
2022-04-12 12:24       ` Lai Jiangshan
2022-04-27  8:26         ` Lai Jiangshan
2022-05-13  9:04           ` Lai Jiangshan
2022-05-18 18:44 ` [tip: x86/sev] x86/sev: Annotate stack change in the #VC handler tip-bot2 for Lai Jiangshan

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.