Re: [patch 03/10] rseq: Dont advertise time slice extensions if disabled

Dmitry Vyukov
2026-04-29T08:37:12Z

On Wed, 29 Apr 2026 at 01:33, Thomas Gleixner <tglx@kernel.org> wrote:
>
> If time slice extensions have been disabled on the kernel command line,
> then advertising them in RSEQ flags is wrong.
>
> Adjust the conditionals to reflect reality, fixup the misleading comments
> about the gap of these flags and the rseq::flags field.
>
> Fixes: d6200245c75e ("rseq: Allow registering RSEQ with slice extension")
> Signed-off-by: Thomas Gleixner <tglx@kernel.org>
> Cc: stable@vger.kernel.org

Reviewed-by: Dmitry Vyukov <dvyukov@google.com>

> ---
> include/uapi/linux/rseq.h | 5 ++++-
> kernel/rseq.c | 9 +++++----
> 2 files changed, 9 insertions(+), 5 deletions(-)
>
> --- a/include/uapi/linux/rseq.h
> +++ b/include/uapi/linux/rseq.h
> @@ -28,7 +28,7 @@ enum rseq_cs_flags_bit {
> RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,
> RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,
> RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,
> - /* (3) Intentional gap to put new bits into a separate byte */
> + /* (3) Intentional gap to keep new bits separate */
>
> /* User read only feature flags */
> RSEQ_CS_FLAG_SLICE_EXT_AVAILABLE_BIT = 4,
> @@ -161,6 +161,9 @@ struct rseq {
> * - RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT
> * - RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL
> * - RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE
> + *
> + * It is now used for feature status advertisement by the kernel.
> + * See: enum rseq_cs_flags_bit for further information.
> */
> __u32 flags;
>
> --- a/kernel/rseq.c
> +++ b/kernel/rseq.c
> @@ -462,10 +462,11 @@ SYSCALL_DEFINE4(rseq, struct rseq __user
> return -EFAULT;
>
> if (IS_ENABLED(CONFIG_RSEQ_SLICE_EXTENSION)) {
> - rseqfl |= RSEQ_CS_FLAG_SLICE_EXT_AVAILABLE;
> - if (rseq_slice_extension_enabled() &&
> - (flags & RSEQ_FLAG_SLICE_EXT_DEFAULT_ON))
> - rseqfl |= RSEQ_CS_FLAG_SLICE_EXT_ENABLED;
> + if (rseq_slice_extension_enabled()) {
> + rseqfl |= RSEQ_CS_FLAG_SLICE_EXT_AVAILABLE;
> + if (flags & RSEQ_FLAG_SLICE_EXT_DEFAULT_ON)
> + rseqfl |= RSEQ_CS_FLAG_SLICE_EXT_ENABLED;
> + }
> }
>
> scoped_user_write_access(rseq, efault) {
>