On Mon, Jul 8, 2019 at 12:09 PM Alexey Dobriyan <adobri...@gmail.com> 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 <adobri...@gmail.com>
>
> --- 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:"

Reply via email to