Re: [PATCH v8 06/11] x86/CPU: Adapt assembly for PIE support

From: Thomas Garnier
Date: Mon Jul 08 2019 - 15:35:30 EST


On Mon, Jul 8, 2019 at 12:09 PM Alexey Dobriyan <adobriyan@xxxxxxxxx> wrote:
>
> Thomas Garnier wrote:
> > - "pushq $1f\n\t"
> > + "movabsq $1f, %q0\n\t"
> > + "pushq %q0\n\t"
> > "iretq\n\t"
> > UNWIND_HINT_RESTORE
> > "1:"
>
> Fake PIE. True PIE looks like this:

I used movabsq in couple assembly changes where the memory context is
unclear and relative reference might lead to issues. It happened on
early boot and hibernation save/restore paths. Do you think a relative
reference in this function will always be accurate?

>
> ffffffff81022d70 <do_sync_core>:
> ffffffff81022d70: 8c d0 mov eax,ss
> ffffffff81022d72: 50 push rax
> ffffffff81022d73: 54 push rsp
> ffffffff81022d74: 48 83 04 24 08 add QWORD PTR [rsp],0x8
> ffffffff81022d79: 9c pushf
> ffffffff81022d7a: 8c c8 mov eax,cs
> ffffffff81022d7c: 50 push rax
> ffffffff81022d7d: ===> 48 8d 05 03 00 00 00 lea rax,[rip+0x3] # ffffffff81022d87 <do_sync_core+0x17>
> ffffffff81022d84: 50 push rax
> ffffffff81022d85: 48 cf iretq
> ffffffff81022d87: c3 ret
>
> Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx>
>
> --- a/arch/x86/include/asm/processor.h
> +++ b/arch/x86/include/asm/processor.h
> @@ -710,7 +710,8 @@ static inline void sync_core(void)
> "pushfq\n\t"
> "mov %%cs, %0\n\t"
> "pushq %q0\n\t"
> - "pushq $1f\n\t"
> + "leaq 1f(%%rip), %q0\n\t"
> + "pushq %q0\n\t"
> "iretq\n\t"
> UNWIND_HINT_RESTORE
> "1:"