2024-05-13 08:15:22

by Ingo Molnar

[permalink] [raw]
Subject: [GIT PULL] x86/shstk change for v6.10

Linus,

Please pull the latest x86/shstk Git tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-shstk-2024-05-13

# HEAD: 2883f01ec37dd8668e7222dfdb5980c86fdfe277 x86/shstk: Enable shadow stacks for x32

Enable shadow stacks for x32.

While we normally don't do such feature-enabling on 32-bit
kernels anymore, this change is small, straightforward & tested on
upstream glibc.

Thanks,

Ingo

------------------>
H.J. Lu (1):
x86/shstk: Enable shadow stacks for x32


arch/x86/entry/syscalls/syscall_64.tbl | 2 +-
arch/x86/kernel/shstk.c | 4 ++--
arch/x86/kernel/signal_64.c | 6 ++++++
3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
index 7e8d46f4147f..cc78226ffc35 100644
--- a/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/arch/x86/entry/syscalls/syscall_64.tbl
@@ -374,7 +374,7 @@
450 common set_mempolicy_home_node sys_set_mempolicy_home_node
451 common cachestat sys_cachestat
452 common fchmodat2 sys_fchmodat2
-453 64 map_shadow_stack sys_map_shadow_stack
+453 common map_shadow_stack sys_map_shadow_stack
454 common futex_wake sys_futex_wake
455 common futex_wait sys_futex_wait
456 common futex_requeue sys_futex_requeue
diff --git a/arch/x86/kernel/shstk.c b/arch/x86/kernel/shstk.c
index 59e15dd8d0f8..6f1e9883f074 100644
--- a/arch/x86/kernel/shstk.c
+++ b/arch/x86/kernel/shstk.c
@@ -163,8 +163,8 @@ static int shstk_setup(void)
if (features_enabled(ARCH_SHSTK_SHSTK))
return 0;

- /* Also not supported for 32 bit and x32 */
- if (!cpu_feature_enabled(X86_FEATURE_USER_SHSTK) || in_32bit_syscall())
+ /* Also not supported for 32 bit */
+ if (!cpu_feature_enabled(X86_FEATURE_USER_SHSTK) || in_ia32_syscall())
return -EOPNOTSUPP;

size = adjust_shstk_size(0);
diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c
index 23d8aaf8d9fd..8a94053c5444 100644
--- a/arch/x86/kernel/signal_64.c
+++ b/arch/x86/kernel/signal_64.c
@@ -315,6 +315,9 @@ int x32_setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)

uc_flags = frame_uc_flags(regs);

+ if (setup_signal_shadow_stack(ksig))
+ return -EFAULT;
+
if (!user_access_begin(frame, sizeof(*frame)))
return -EFAULT;

@@ -377,6 +380,9 @@ COMPAT_SYSCALL_DEFINE0(x32_rt_sigreturn)
if (!restore_sigcontext(regs, &frame->uc.uc_mcontext, uc_flags))
goto badframe;

+ if (restore_signal_shadow_stack())
+ goto badframe;
+
if (compat_restore_altstack(&frame->uc.uc_stack))
goto badframe;



2024-05-14 02:38:41

by Linus Torvalds

[permalink] [raw]
Subject: Re: [GIT PULL] x86/shstk change for v6.10

On Mon, 13 May 2024 at 01:13, Ingo Molnar <[email protected]> wrote:
>
> Enable shadow stacks for x32.
>
> While we normally don't do such feature-enabling on 32-bit
> kernels anymore, this change is small, straightforward & tested on
> upstream glibc.

Color me confused.

"feature-enabling on 32-bit kernels"

This is not for 32-bit kernels, as far as I can tell. This is just the
x32 user mode for x86-64 kernels.

Or am I missing something?

I've pulled this, but does anybody actually use x32? I feel like it
was a failed experiment. No?

Linus

2024-05-14 02:53:31

by pr-tracker-bot

[permalink] [raw]
Subject: Re: [GIT PULL] x86/shstk change for v6.10

The pull request you sent on Mon, 13 May 2024 10:13:34 +0200:

> git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-shstk-2024-05-13

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/a5131c3fdf2608f1c15f3809e201cf540eb28489

Thank you!

--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html

2024-05-14 10:18:57

by Borislav Petkov

[permalink] [raw]
Subject: Re: [GIT PULL] x86/shstk change for v6.10

On Mon, May 13, 2024 at 07:38:13PM -0700, Linus Torvalds wrote:
> I've pulled this, but does anybody actually use x32? I feel like it
> was a failed experiment. No?

Well, I did ask that at the time:

https://lore.kernel.org/r/20240322164912.GAZf22iBdqdkIFcrsl@fat_crate.local

The answer on another subthread was: "Because it just works?"

--
Regards/Gruss,
Boris.

https://people.kernel.org/tglx/notes-about-netiquette

2024-05-15 08:07:45

by Ingo Molnar

[permalink] [raw]
Subject: Re: [GIT PULL] x86/shstk change for v6.10


* Linus Torvalds <[email protected]> wrote:

> On Mon, 13 May 2024 at 01:13, Ingo Molnar <[email protected]> wrote:
> >
> > Enable shadow stacks for x32.
> >
> > While we normally don't do such feature-enabling on 32-bit
> > kernels anymore, this change is small, straightforward & tested on
> > upstream glibc.
>
> Color me confused.
>
> "feature-enabling on 32-bit kernels"
>
> This is not for 32-bit kernels, as far as I can tell. This is just the
> x32 user mode for x86-64 kernels.
>
> Or am I missing something?

Brainfart: feature-enabling for 32-bit user-space ...

> I've pulled this, but does anybody actually use x32? I feel like it
> was a failed experiment. No?

Yeah, so H.J. Lu suggested that shadow-stacks are a natural extension of
our security facilities on OSs where x32 is already enabled:

https://lore.kernel.org/all/CAMe9rOo1ZONFgBkuN_Ni3REBRsedNwj3gNnXj1oxB0bQzuNipA@mail.gmail.com/

H.J: *which* are those OSs? I don't think any major Linux distro enables
x32 anymore - here's Ubuntu and Fedora for example:

kepler:~/tip> grep X32 /boot/config-6.5.0-35-generic
# CONFIG_X86_X32_ABI is not set


kepler:~/s/fedora> grep X32 lib/modules/6.9.0-64.fc41.x86_64/config
# CONFIG_X86_X32_ABI is not set

Another feedback was that the observed lack of x32 kernel regressions
upstream could be because 'it just works':

https://lore.kernel.org/all/CAMe9rOoEQ3jUUXy+Kai9Hg83b+79azmGfu8DBR=A3HSL05kj0A@mail.gmail.com/

.. so at this point I think we should be permissive towards well-tested
patches, barring contrary evidence.

'Contrary evidence' would be for example some x32 regression that wasn't
fixed for a long time while nobody cared, at which point we'd remove x32
instead of fixing something that wasn't working for a long time. I'm not
aware of such a regression yet, BYMMV.

Thanks,

Ingo

2024-05-23 15:14:33

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [GIT PULL] x86/shstk change for v6.10

On Wed, May 15, 2024 at 10:07:33AM +0200, Ingo Molnar wrote:
> H.J: *which* are those OSs? I don't think any major Linux distro enables
> x32 anymore - here's Ubuntu and Fedora for example:
>
> kepler:~/tip> grep X32 /boot/config-6.5.0-35-generic
> # CONFIG_X86_X32_ABI is not set
>
>
> kepler:~/s/fedora> grep X32 lib/modules/6.9.0-64.fc41.x86_64/config
> # CONFIG_X86_X32_ABI is not set

For what it's worth, Arch Linux just turned it back on at a user's
request:

https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/commit/b0c9bf78acbdcdf90405c427cf6b751259baee74

https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/issues/51

Cheers,
Nathan