Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1741786

Re: [lkp-robot] [x86/asm] f5caf621ee: PANIC:double_fault

From Josh Poimboeuf <jpoimboe@redhat.com>
Newsgroups linux.kernel
Subject Re: [lkp-robot] [x86/asm] f5caf621ee: PANIC:double_fault
Date 2017-09-28 21:20 +0200
Message-ID <uuMvM-4ww-11@gated-at.bofh.it> (permalink)
References <uuBTJ-6bp-17@gated-at.bofh.it> <uuJRg-2NO-17@gated-at.bofh.it> <uuKaB-2Wc-1@gated-at.bofh.it> <uuKtX-3hQ-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Thu, Sep 28, 2017 at 12:01:21PM -0500, Josh Poimboeuf wrote:
> On Thu, Sep 28, 2017 at 11:44:22AM -0500, Josh Poimboeuf wrote:
> > Agreed, changing it to "unsigned long" and "rsp" will probably fix it.
> > 
> > I had made it "unsigned int" because of a clang issue with "unsigned
> > long":
> > 
> >     CC      arch/x86/entry/vdso/vdso32/vclock_gettime.o
> >   In file included from arch/x86/entry/vdso/vdso32/vclock_gettime.c:32:
> >   In file included from arch/x86/entry/vdso/vdso32/../vclock_gettime.c:15:
> >   In file included from ./arch/x86/include/asm/vgtod.h:5:
> >   In file included from ./include/linux/clocksource.h:12:
> >   In file included from ./include/linux/timex.h:56:
> >   In file included from ./include/uapi/linux/timex.h:56:
> >   In file included from ./include/linux/time.h:5:
> >   In file included from ./include/linux/seqlock.h:35:
> >   In file included from ./include/linux/spinlock.h:50:
> >   In file included from ./include/linux/preempt.h:10:
> >   In file included from ./include/linux/list.h:8:
> >   In file included from ./include/linux/kernel.h:10:
> >   In file included from ./include/linux/bitops.h:37:
> >   In file included from ./arch/x86/include/asm/bitops.h:16:
> >   In file included from ./arch/x86/include/asm/alternative.h:9:
> >   ./arch/x86/include/asm/asm.h:142:42: error: register 'rsp' unsuitable for global register variables on this target
> >   register unsigned long __asm_call_sp asm("rsp");
> > 
> > And I think we saw the same error in the realmode code.
> > 
> > So we may need to tweak the macro a bit.
> 
> Going to try the following patch.
> 
> diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h
> index c1eadbaf1115..30c3c9ac784a 100644
> --- a/arch/x86/include/asm/asm.h
> +++ b/arch/x86/include/asm/asm.h
> @@ -11,10 +11,12 @@
>  # define __ASM_FORM_COMMA(x) " " #x ","
>  #endif
>  
> -#ifdef CONFIG_X86_32
> +#ifndef __x86_64__
> +/* 32 bit */
>  # define __ASM_SEL(a,b) __ASM_FORM(a)
>  # define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(a)
>  #else
> +/* 64 bit */
>  # define __ASM_SEL(a,b) __ASM_FORM(b)
>  # define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(b)
>  #endif
> @@ -139,7 +141,7 @@
>   * gets set up by the containing function.  If you forget to do this, objtool
>   * may print a "call without frame pointer save/setup" warning.
>   */
> -register unsigned int __asm_call_sp asm("esp");
> +register unsigned long __asm_call_sp asm(_ASM_SP);
>  #define ASM_CALL_CONSTRAINT "+r" (__asm_call_sp)
>  #endif

Confirmed that this patch works on both compilers, and fixes GCC 4.4.

GCC 4.4 before:

  ffffffff8147461d:       89 e0                   mov    %esp,%eax
  ffffffff8147461f:       4c 89 f7                mov    %r14,%rdi
  ffffffff81474622:       4c 89 fe                mov    %r15,%rsi
  ffffffff81474625:       ba 20 00 00 00          mov    $0x20,%edx
  ffffffff8147462a:       89 c4                   mov    %eax,%esp
  ffffffff8147462c:       e8 bf 52 05 00          callq  ffffffff814c98f0 <copy_user_generic_unrolled>

after:

  ffffffff8147461e:       48 89 e0                mov    %rsp,%rax
  ffffffff81474621:       4c 89 f7                mov    %r14,%rdi
  ffffffff81474624:       4c 89 fe                mov    %r15,%rsi
  ffffffff81474627:       ba 20 00 00 00          mov    $0x20,%edx
  ffffffff8147462c:       48 89 c4                mov    %rax,%rsp
  ffffffff8147462f:       e8 cc 52 05 00          callq  ffffffff814c9900 <copy_user_generic_unrolled>

It still has the "back up and restore the stack pointer just for the fun
of it" thing, but at least the corruption is gone.

Will finalize the patch and send it along to tip.

-- 
Josh

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: [lkp-robot] [x86/asm] f5caf621ee: PANIC:double_fault Linus Torvalds <torvalds@linux-foundation.org> - 2017-09-28 18:30 +0200
  Re: [lkp-robot] [x86/asm] f5caf621ee: PANIC:double_fault Josh Poimboeuf <jpoimboe@redhat.com> - 2017-09-28 18:50 +0200
    Re: [lkp-robot] [x86/asm] f5caf621ee: PANIC:double_fault Josh Poimboeuf <jpoimboe@redhat.com> - 2017-09-28 19:10 +0200
      Re: [lkp-robot] [x86/asm] f5caf621ee: PANIC:double_fault Josh Poimboeuf <jpoimboe@redhat.com> - 2017-09-28 21:20 +0200
        [PATCH] x86/asm: Fix inline asm call constraints for GCC 4.4 Josh Poimboeuf <jpoimboe@redhat.com> - 2017-09-29 00:00 +0200
          Re: [PATCH] x86/asm: Fix inline asm call constraints for GCC 4.4 Linus Torvalds <torvalds@linux-foundation.org> - 2017-09-29 02:00 +0200
            Re: [PATCH] x86/asm: Fix inline asm call constraints for GCC 4.4 Josh Poimboeuf <jpoimboe@redhat.com> - 2017-09-29 03:50 +0200
              Re: [PATCH] x86/asm: Fix inline asm call constraints for GCC 4.4 Ingo Molnar <mingo@kernel.org> - 2017-09-29 10:10 +0200
                Re: [PATCH] x86/asm: Fix inline asm call constraints for GCC 4.4 Ye Xiaolong <xiaolong.ye@intel.com> - 2017-09-29 12:40 +0200
            Re: [PATCH] x86/asm: Fix inline asm call constraints for GCC 4.4 Ingo Molnar <mingo@kernel.org> - 2017-09-29 10:00 +0200
              Re: [PATCH] x86/asm: Fix inline asm call constraints for GCC 4.4 Arnd Bergmann <arnd@arndb.de> - 2017-09-29 17:30 +0200
          [tip:x86/urgent] x86/asm: Fix inline asm call constraints for GCC  4.4 tip-bot for Josh Poimboeuf <tipbot@zytor.com> - 2017-09-29 11:40 +0200
          [tip:x86/urgent] x86/asm: Fix inline asm call constraints for GCC  4.4 tip-bot for Josh Poimboeuf <tipbot@zytor.com> - 2017-09-29 13:30 +0200

csiph-web