All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Chen Zhongjin <chenzhongjin@huawei.com>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org,
	jthierry@redhat.com, catalin.marinas@arm.com, will@kernel.org,
	masahiroy@kernel.org, jpoimboe@redhat.com, ycote@redhat.com,
	herbert@gondor.apana.org.au, davem@davemloft.net,
	ardb@kernel.org, maz@kernel.org, tglx@linutronix.de,
	luc.vanoostenryck@gmail.com
Subject: Re: [RFC PATCH v4 22/37] arm64: kernel: Skip validation of kuser32.o
Date: Thu, 5 May 2022 11:56:45 +0100	[thread overview]
Message-ID: <YnOtbYOIT5OP7F0g@FVFF77S0Q05N.cambridge.arm.com> (raw)
In-Reply-To: <20220505092448.GE2501@worktop.programming.kicks-ass.net>

On Thu, May 05, 2022 at 11:24:48AM +0200, Peter Zijlstra wrote:
> On Thu, May 05, 2022 at 11:36:12AM +0800, Chen Zhongjin wrote:
> > Hi Peter,
> > 
> > IIRC now the blacklist mechanisms all run on check stage, which after
> > decoding, but the problem of kuser32.S happens in decoding stage. Other
> > than that the assembly symbols in kuser32 is STT_NOTYPE and
> > STACK_FRAME_NON_STANDARD will throw an error for this.
> > 
> > OBJECT_FILES_NON_STANDARD works for the single file but as you said
> > after LTO it's invalid. However STACK_FRAME_NON_STANDARD doesn't work
> > for kuser32 case at all.
> > 
> > Now my strategy for undecodable instructions is: show an error message
> > and mark insn->ignore = true, but do not stop anything so decoding work
> > can going on.
> > 
> > To totally solve this my idea is that applying blacklist before decode.
> > However for this part objtool doesn't have any insn or func info, so we
> > should add a new blacklist just for this case...
> 
> OK, so Mark explained that this is 32bit userspace (VDSO) code.
> 
> And as such there's really no point in running objtool on it. Does all
> that live in it's own section? Should it?

It's placed in .rodata by a linker script:

* The 32-bit vdso + kuser code is placed in .rodata, between the `vdso32_start`
  and `vdso32_end` symbols, as raw bytes (via .incbin).
  See arch/arm64/kernel/vdso32-wrap.S.

* The 64-bit vdso code is placed in .rodata, between the `vdso_start`
  and `vdso32` symbols, as raw bytes (via .incbin).
  See arch/arm64/kernel/vdso-wrap.S.

The objects under arch/arm64/kernel/{vdso,vdso32}/ are all userspace objects,
and from userspace's PoV the existing secrtions within those objects are
correct, so I don't think those should change.

How does x86 deal with its vdso objects?

Thanks,
Mark.

WARNING: multiple messages have this Message-ID (diff)
From: Mark Rutland <mark.rutland@arm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Chen Zhongjin <chenzhongjin@huawei.com>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org,
	jthierry@redhat.com, catalin.marinas@arm.com, will@kernel.org,
	masahiroy@kernel.org, jpoimboe@redhat.com, ycote@redhat.com,
	herbert@gondor.apana.org.au, davem@davemloft.net,
	ardb@kernel.org, maz@kernel.org, tglx@linutronix.de,
	luc.vanoostenryck@gmail.com
Subject: Re: [RFC PATCH v4 22/37] arm64: kernel: Skip validation of kuser32.o
Date: Thu, 5 May 2022 11:56:45 +0100	[thread overview]
Message-ID: <YnOtbYOIT5OP7F0g@FVFF77S0Q05N.cambridge.arm.com> (raw)
In-Reply-To: <20220505092448.GE2501@worktop.programming.kicks-ass.net>

On Thu, May 05, 2022 at 11:24:48AM +0200, Peter Zijlstra wrote:
> On Thu, May 05, 2022 at 11:36:12AM +0800, Chen Zhongjin wrote:
> > Hi Peter,
> > 
> > IIRC now the blacklist mechanisms all run on check stage, which after
> > decoding, but the problem of kuser32.S happens in decoding stage. Other
> > than that the assembly symbols in kuser32 is STT_NOTYPE and
> > STACK_FRAME_NON_STANDARD will throw an error for this.
> > 
> > OBJECT_FILES_NON_STANDARD works for the single file but as you said
> > after LTO it's invalid. However STACK_FRAME_NON_STANDARD doesn't work
> > for kuser32 case at all.
> > 
> > Now my strategy for undecodable instructions is: show an error message
> > and mark insn->ignore = true, but do not stop anything so decoding work
> > can going on.
> > 
> > To totally solve this my idea is that applying blacklist before decode.
> > However for this part objtool doesn't have any insn or func info, so we
> > should add a new blacklist just for this case...
> 
> OK, so Mark explained that this is 32bit userspace (VDSO) code.
> 
> And as such there's really no point in running objtool on it. Does all
> that live in it's own section? Should it?

It's placed in .rodata by a linker script:

* The 32-bit vdso + kuser code is placed in .rodata, between the `vdso32_start`
  and `vdso32_end` symbols, as raw bytes (via .incbin).
  See arch/arm64/kernel/vdso32-wrap.S.

* The 64-bit vdso code is placed in .rodata, between the `vdso_start`
  and `vdso32` symbols, as raw bytes (via .incbin).
  See arch/arm64/kernel/vdso-wrap.S.

The objects under arch/arm64/kernel/{vdso,vdso32}/ are all userspace objects,
and from userspace's PoV the existing secrtions within those objects are
correct, so I don't think those should change.

How does x86 deal with its vdso objects?

Thanks,
Mark.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-05-05 10:57 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-29  9:43 [RFC PATCH v4 00/37] objtool: add base support for arm64 Chen Zhongjin
2022-04-29  9:43 ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 01/37] tools: Add some generic functions and headers Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 02/37] tools: arm64: Make aarch64 instruction decoder available to tools Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 03/37] tools: bug: Remove duplicate definition Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 04/37] objtool: arm64: Add base definition for arm64 backend Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 05/37] objtool: arm64: Decode add/sub instructions Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 06/37] objtool: arm64: Decode jump and call related instructions Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 07/37] objtool: arm64: Decode other system instructions Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 08/37] objtool: arm64: Decode load/store instructions Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 09/37] objtool: arm64: Decode LDR instructions Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 10/37] objtool: arm64: Accept non-instruction data in code sections Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 11/37] objtool: arm64: Handle supported relocations in alternatives Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 12/37] objtool: arm64: Ignore replacement section for alternative callback Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 13/37] objtool: arm64: Enable stack validation for arm64 Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 14/37] objtool: check: Support data in text section Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 15/37] objtool: arm64: Add unwind_hint support Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 16/37] arm64: Add annotate_reachable() for objtools Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 17/37] arm64: bug: Add reachable annotation to warning macros Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 18/37] arm64: kgdb: Mark code following kgdb brk as reachable Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 19/37] arm64: irq-gic: Replace unreachable() with -EINVAL Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 20/37] arm64: Set intra-function call annotations Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 21/37] arm64: kernel: Skip validation of proton-pack.c.c and hibernate.c Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 22/37] arm64: kernel: Skip validation of kuser32.o Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29 11:05   ` Peter Zijlstra
2022-04-29 11:05     ` Peter Zijlstra
2022-05-05  3:36     ` Chen Zhongjin
2022-05-05  3:36       ` Chen Zhongjin
2022-05-05  9:24       ` Peter Zijlstra
2022-05-05  9:24         ` Peter Zijlstra
2022-05-05 10:56         ` Mark Rutland [this message]
2022-05-05 10:56           ` Mark Rutland
2022-05-06  2:18           ` Chen Zhongjin
2022-05-06  2:18             ` Chen Zhongjin
2022-05-06 10:06             ` Mark Rutland
2022-05-06 10:06               ` Mark Rutland
2022-05-07  6:35               ` Chen Zhongjin
2022-05-07  6:35                 ` Chen Zhongjin
2022-05-06 17:31           ` Josh Poimboeuf
2022-05-06 17:31             ` Josh Poimboeuf
2022-04-29  9:43 ` [RFC PATCH v4 23/37] arm64: kernel: Skip validation of sigreturn32.o Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 24/37] arm64: ftrace: Skip validation of entry-ftrace.o Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 25/37] arm64: bpf: Skip validation of ___bpf_prog_run Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29 11:13   ` Peter Zijlstra
2022-04-29 11:13     ` Peter Zijlstra
2022-04-29 20:09     ` Josh Poimboeuf
2022-04-29 20:09       ` Josh Poimboeuf
2022-04-29  9:43 ` [RFC PATCH v4 26/37] arm64: crypto: Remove unnecessary stackframe Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 27/37] arm64: sleep: Properly set frame pointer before call Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 28/37] arm64: Change symbol annotations Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 29/37] arm64: efi-header: Mark efi header as data Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 30/37] arm64: head: Mark constants " Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 31/37] arm64: proc: Mark constant " Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 32/37] arm64: crypto: Mark data in code sections Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 33/37] arm64: Annotate ASM symbols with unknown stack state Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 34/37] arm64: entry: Annotate valid stack in kernel entry Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 35/37] arm64: entry: Annotate code switching to tasks Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 36/37] arm64: entry: Align stack size for alternative Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin
2022-04-29  9:43 ` [RFC PATCH v4 37/37] arm64: kvm: Annotate stack state for guest enter/exit code Chen Zhongjin
2022-04-29  9:43   ` Chen Zhongjin

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=YnOtbYOIT5OP7F0g@FVFF77S0Q05N.cambridge.arm.com \
    --to=mark.rutland@arm.com \
    --cc=ardb@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=chenzhongjin@huawei.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=jpoimboe@redhat.com \
    --cc=jthierry@redhat.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luc.vanoostenryck@gmail.com \
    --cc=masahiroy@kernel.org \
    --cc=maz@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=will@kernel.org \
    --cc=ycote@redhat.com \
    /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 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.