linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
To: Deepak Gupta <debug@rivosinc.com>
Cc: "Paul Walmsley" <pjw@kernel.org>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Borislav Petkov" <bp@alien8.de>,
	"Dave Hansen" <dave.hansen@linux.intel.com>,
	x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Liam R. Howlett" <Liam.Howlett@oracle.com>,
	"Vlastimil Babka" <vbabka@suse.cz>,
	"Lorenzo Stoakes" <lorenzo.stoakes@oracle.com>,
	"Paul Walmsley" <paul.walmsley@sifive.com>,
	"Palmer Dabbelt" <palmer@dabbelt.com>,
	"Albert Ou" <aou@eecs.berkeley.edu>,
	"Conor Dooley" <conor@kernel.org>,
	"Rob Herring" <robh@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"Christian Brauner" <brauner@kernel.org>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Oleg Nesterov" <oleg@redhat.com>,
	"Eric Biederman" <ebiederm@xmission.com>,
	"Kees Cook" <kees@kernel.org>, "Jonathan Corbet" <corbet@lwn.net>,
	"Shuah Khan" <shuah@kernel.org>, "Jann Horn" <jannh@google.com>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Benno Lossin" <lossin@kernel.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	linux-riscv <linux-riscv@lists.infradead.org>,
	devicetree <devicetree@vger.kernel.org>,
	linux-arch@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-kselftest@vger.kernel.org,
	"Alistair Francis" <alistair.francis@wdc.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	jim.shu@sifive.com, "Andy Chiu" <andybnac@gmail.com>,
	"Kito Cheng" <kito.cheng@sifive.com>,
	"Charlie Jenkins" <charlie@rivosinc.com>,
	"Atish Patra" <atishp@rivosinc.com>,
	"Evan Green" <evan@rivosinc.com>,
	"Clément Léger" <cleger@rivosinc.com>,
	"Alexandre Ghiti" <alexghiti@rivosinc.com>,
	samitolvanen@google.com, "Mark Brown" <broonie@kernel.org>,
	rick.p.edgecombe@intel.com, rust-for-linux@vger.kernel.org,
	"Zong Li" <zong.li@sifive.com>,
	"David Hildenbrand" <david@redhat.com>,
	"Florian Weimer" <fweimer@redhat.com>,
	bharrington@redhat.com, "Aurelien Jarno" <aurel32@debian.org>
Subject: Re: [PATCH v19 00/27] riscv control-flow integrity for usermode
Date: Wed, 24 Sep 2025 23:41:17 +0200	[thread overview]
Message-ID: <CAM=mAOmQy7DSeXU4jkgNDFFX5KUpveMf1UPREUD2HjNUf7R7rA@mail.gmail.com> (raw)
In-Reply-To: <aNQ7D6_ZYMhCdkmL@debug.ba.rivosinc.com>

[-- Attachment #1: Type: text/plain, Size: 7874 bytes --]

Deepak Gupta <debug@rivosinc.com> schrieb am Mi., 24. Sept. 2025, 20:40:

> On Wed, Sep 24, 2025 at 08:36:11AM -0600, Paul Walmsley wrote:
> >Hi,
> >
> >On Thu, 31 Jul 2025, Deepak Gupta wrote:
> >
> >[ ... ]
> >
> >> vDSO related Opens (in the flux)
> >> =================================
> >>
> >> I am listing these opens for laying out plan and what to expect in
> future
> >> patch sets. And of course for the sake of discussion.
> >>
> >
> >[ ... ]
> >
> >> How many vDSOs
> >> ---------------
> >> Shadow stack instructions are carved out of zimop (may be operations)
> and if CPU
> >> doesn't implement zimop, they're illegal instructions. Kernel could be
> running on
> >> a CPU which may or may not implement zimop. And thus kernel will have
> to carry 2
> >> different vDSOs and expose the appropriate one depending on whether CPU
> implements
> >> zimop or not.
> >
> >If we merge this series without this, then when CFI is enabled in the
> >Kconfig, we'll wind up with a non-portable kernel that won't run on older
> >hardware.  We go to great lengths to enable kernel binary portability
> >across the presence or absence of other RISC-V extensions, and I think
> >these CFI extensions should be no different.
> >
> >So before considering this for merging, I'd like to see at least an
> >attempt to implement the dual-vDSO approach (or something equivalent)
> >where the same kernel binary with CFI enabled can run on both pre-Zimop
> >and post-Zimop hardware, with the existing userspaces that are common
> >today.
>
> Added some distro folks in this email chain.
>
> After patchwork meeting today, I wanted to continue discussion here. So
> thanks
> Paul for looking into it and initiating a discussion here.
>
> This patch series has been in the queue for quite a long time and we have
> had
> deliberations on vDSO topic earlier as well and after those deliberations
> it
> was decided to go ahead with merge and it indeed was sent for 6.17 merge
> window. Unfortunatley due to other unforeseen reasons, entirety of riscv
> changes were not picked. So it's a bit disappointing to see back-paddling
> on
> this topic.
>
> Anyways, we are here. So I'll provide a bit of context for the list about
> deliberations and discussions we have been having for so many merge
> windows.
> This so that a holistic discussion can happen on this before we make a
> decision.
>
> Issue
> ======
>
> Instructions in RISC-V shadow stack extension (zicfiss - [1]) are carved
> out of
> "may be ops" aka zimop extension [2]. "may be ops" are illegal on non-RVA23
> hardware. This means any existing riscv CPU or future CPU which isn't RVA23
> compliant and not implementing zimop will treat these encodings as illegal.
>
> Current kernel patches enable shadow stack and landing pad support for
> userspace using config `CONFIG_RISCV_USER_CFI`. If this config is selected
> then
> vDSO that will be exposed to user space will also have shadow stack
> instructions in them. Kernel compiled with `CONFIG_RISCV_USER_CFI`, for
> sake of
> this discussion lets call it RVA23 compiled kernel.
>
> Issue that we discussed earlier and even today is "This RVA23 compiled
> kernel
> won't be able to support non-RVA23 userspace on non-RVA23 hardware
> because".
> Please note that issue exists only on non-RVA23 hardware (which is existing
> hardware and future hardware which is not implementing zimop). RVA23
> compiled
> kernel can support any sort of userspace on RVA23 hardware.
>
>
> Discussion
> ===========
>
> So the issue is not really shadow stack instructions but rather may be op
> instructions in codegen (binaries and vDSO) which aren't hidden behind any
> flag (to hide them if hardware doesn't support). And if I can narrow down
> further, primary issue we are discussing is that if cfi is enabled during
> kernel compile, it is bringing in a piece of code (vDSO) which won't work
> on existing hardware. But the counter point is if someone were to deploy
> RVA23 compiled kernel on non-RVA23 hardware, they must have compiled
> rest of the userspace without shadow stack instructions in them for such
> a hardware. And thus at this point they could simply choose *not* to turn
> on
> `CONFIG_RISCV_USER_CFI` when compiling such kernel. It's not that
> difficult to
> do so.
>
> Any distro who is shipping userspace (which all of them are) along with
> kernel
> will not be shipping two different userspaces (one with shadow stack and
> one
> without them). If distro are shipping two different userspaces, then they
> might
> as well ship two different kernels. Tagging some distro folks here to get
> their
> take on shipping different userspace depending on whether hardware is
> RVA23 or
> not. @Heinrich, @Florian, @redbeard and @Aurelien.
>

Ubuntu like other non-rolling distros maintains separate kernels per
release. Even if a kernel is backported there will be differences in
applied patches and configuration between the distro releases.

Looking at the userspace I don't see how we could have a CFI enabled distro
that would run on hardware without support for maybe operations. Without
CFI userland I cannot see a use case for a CFI enabled kernel for such
hardware either.

We cannot expect the whole software ecosystem including containers to
switch to CFI synchronously. Hence software that is compiled without CFI
must be able call into a CFI enabled kernel and its vDSO library.

Best regards

Heinrich


> Major distro's have already drawn a distinction here that they will drop
> support for hardware which isn't RVA23 for the sake of keeping binary
> distribution simple.
>
> Only other use case that was discussed of a powerful linux user who just
> wants
> to use a single kernel on all kinds of riscv hardware. I am imagining such
> a
> user knows enough about kernel and if is really dear to them, they can
> develop
> their own patches and send it upstream to support their own usecase and we
> can
> discuss them out. Current patchset don't prevent such a developer to send
> such
> patches upstream.
>
> I heard the argument in meeting today that "Zbb" enabling works similar for
> kernel today. I looked at "Zbb" enabling. It's for kernel usage and it's
> surgically placed in kernel using asm hidden behind alternatives. vDSO
> isn't
> compiled with Zbb. Shadow stack instructions are part of codegen for C
> files
> compiled into vDSO.
>
> Furthermore,
>
> Kernel control flow integrity will introduce shadow stack instructions all
> over the kernel binary. Such kernel won't be deployable on non-RVA23
> hardware.
> How to deal with this problem for a savvy kernel developer who wants to run
> same cfi enabled kernel binary on multiple hardware?
>
> Coming from engineering and hacker point of view, I understand the desire
> here
> but I still see that it's complexity enforced on rest of the kernel from a
> user
> base which anyways can achieve such goals. For majority of usecases, I
> don't
> see a reason to increase complexity in the kernel for build, possibly
> runtime
> patching and thus possibly introduce more issues and errors just for the
> sake
> of a science project.
>
> Being said that, re-iterating that currently default for
> `CONFIG_RISCV_USER_CFI`
> is "n" which means it won't be breaking anything unless a user opts "Y".
> So even
> though I really don't see a reason and usability to have complexity in
> kernel to
> carry multiple vDSOs, current patchsets are not a hinderance for such
> future
> capability (because current default is No) and motivated developer is
> welcome
> to build on top of it. Bottomline is I don't see a reason to block current
> patchset from merging in v6.18.
>
>
> [1] -
> https://github.com/riscv/riscv-isa-manual/blob/main/src/unpriv-cfi.adoc#shadow-stack-zicfiss
> [2] - https://github.com/riscv/riscv-isa-manual/blob/main/src/zimop.adoc
>
> >
> >thanks Deepak,
> >
> >- Paul
>

[-- Attachment #2: Type: text/html, Size: 9586 bytes --]

  reply	other threads:[~2025-09-24 21:41 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-31 23:19 Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 01/27] mm: VM_SHADOW_STACK definition for riscv Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 02/27] dt-bindings: riscv: zicfilp and zicfiss in dt-bindings (extensions.yaml) Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 03/27] riscv: zicfiss / zicfilp enumeration Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 04/27] riscv: zicfiss / zicfilp extension csr and bit definitions Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 05/27] riscv: usercfi state for task and save/restore of CSR_SSP on trap entry/exit Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 06/27] riscv/mm : ensure PROT_WRITE leads to VM_READ | VM_WRITE Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 07/27] riscv/mm: manufacture shadow stack pte Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 08/27] riscv/mm: teach pte_mkwrite to manufacture shadow stack PTEs Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 09/27] riscv/mm: write protect and shadow stack Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 10/27] riscv/mm: Implement map_shadow_stack() syscall Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 11/27] riscv/shstk: If needed allocate a new shadow stack on clone Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 12/27] riscv: Implements arch agnostic shadow stack prctls Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 13/27] prctl: arch-agnostic prctl for indirect branch tracking Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 14/27] riscv: Implements arch agnostic indirect branch tracking prctls Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 15/27] riscv/traps: Introduce software check exception and uprobe handling Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 16/27] riscv: signal: abstract header saving for setup_sigcontext Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 17/27] riscv/signal: save and restore of shadow stack for signal Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 18/27] riscv/kernel: update __show_regs to print shadow stack register Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 19/27] riscv/ptrace: riscv cfi status and state via ptrace and in core files Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 20/27] riscv/hwprobe: zicfilp / zicfiss enumeration in hwprobe Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 21/27] riscv: kernel command line option to opt out of user cfi Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 22/27] riscv: enable kernel access to shadow stack memory via FWFT sbi call Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 23/27] arch/riscv: compile vdso with landing pad and shadow stack note Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 24/27] riscv: create a config for shadow stack and landing pad instr support Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 25/27] riscv: Documentation for landing pad / indirect branch tracking Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 26/27] riscv: Documentation for shadow stack on riscv Deepak Gupta
2025-07-31 23:19 ` [PATCH v19 27/27] kselftest/riscv: kselftest for user mode cfi Deepak Gupta
2025-08-01  1:09 ` [PATCH v19 00/27] riscv control-flow integrity for usermode Benjamin LaHaise
2025-08-06 17:15 ` patchwork-bot+linux-riscv
2025-08-07 12:28   ` Mark Brown
2025-08-08  8:23     ` Deepak Gupta
2025-08-08 11:48       ` Mark Brown
2025-08-08 17:20         ` Deepak Gupta
2025-09-24 14:36 ` Paul Walmsley
2025-09-24 18:40   ` Deepak Gupta
2025-09-24 21:41     ` Heinrich Schuchardt [this message]
2025-09-25 12:30     ` Andy Chiu
2025-09-25 14:30       ` Deepak Gupta
2025-09-30 11:15     ` Florian Weimer
2025-10-01  0:13       ` Deepak Gupta
2025-09-26 19:29   ` Charles Mirabile
2025-09-26 19:52     ` Charles Mirabile
2025-09-26 20:03       ` Deepak Gupta
2025-09-26 19:57     ` Deepak Gupta
2025-09-26 20:28       ` Charles Mirabile
2025-09-26 21:07         ` Deepak Gupta
2025-09-30  9:20           ` Florian Weimer
2025-09-30 23:48             ` Deepak Gupta
2025-10-02 11:45               ` Florian Weimer
2025-10-02 16:45                 ` Deepak Gupta
2025-10-13 14:30                   ` Florian Weimer

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='CAM=mAOmQy7DSeXU4jkgNDFFX5KUpveMf1UPREUD2HjNUf7R7rA@mail.gmail.com' \
    --to=heinrich.schuchardt@canonical.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=a.hindborg@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=alex.gaynor@gmail.com \
    --cc=alexghiti@rivosinc.com \
    --cc=aliceryhl@google.com \
    --cc=alistair.francis@wdc.com \
    --cc=andybnac@gmail.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=arnd@arndb.de \
    --cc=atishp@rivosinc.com \
    --cc=aurel32@debian.org \
    --cc=bharrington@redhat.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=bp@alien8.de \
    --cc=brauner@kernel.org \
    --cc=broonie@kernel.org \
    --cc=charlie@rivosinc.com \
    --cc=cleger@rivosinc.com \
    --cc=conor+dt@kernel.org \
    --cc=conor@kernel.org \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=david@redhat.com \
    --cc=debug@rivosinc.com \
    --cc=devicetree@vger.kernel.org \
    --cc=ebiederm@xmission.com \
    --cc=evan@rivosinc.com \
    --cc=fweimer@redhat.com \
    --cc=gary@garyguo.net \
    --cc=hpa@zytor.com \
    --cc=jannh@google.com \
    --cc=jim.shu@sifive.com \
    --cc=kees@kernel.org \
    --cc=kito.cheng@sifive.com \
    --cc=krzk+dt@kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=lossin@kernel.org \
    --cc=mingo@redhat.com \
    --cc=ojeda@kernel.org \
    --cc=oleg@redhat.com \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=peterz@infradead.org \
    --cc=pjw@kernel.org \
    --cc=richard.henderson@linaro.org \
    --cc=rick.p.edgecombe@intel.com \
    --cc=robh@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=samitolvanen@google.com \
    --cc=shuah@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tmgross@umich.edu \
    --cc=vbabka@suse.cz \
    --cc=x86@kernel.org \
    --cc=zong.li@sifive.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox