[PATCH v2 4/4] x86: Use typeof_member style in RSEQ area access expressions

Florian Weimer fweimer@redhat.com
Tue Sep 30 12:16:03 GMT 2025


* Uros Bizjak:

> Update RSEQ access macros to use `((struct rseq_area *)0)->member`
> in _Static_assert and __typeof expressions, instead of
> RSEQ_SELF()->member.  This adopts the typeof_member style, avoiding
> reliance on RSEQ_SELF for compile-time expressions.
>
> Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
> ---
>  sysdeps/i386/nptl/rseq-access.h       | 20 ++++++++++----------
>  sysdeps/x86_64/64/nptl/rseq-access.h  | 24 ++++++++++++------------
>  sysdeps/x86_64/x32/nptl/rseq-access.h | 12 ++++++------
>  3 files changed, 28 insertions(+), 28 deletions(-)
>
> diff --git a/sysdeps/i386/nptl/rseq-access.h b/sysdeps/i386/nptl/rseq-access.h
> index 753152cb58..0dd0cbb180 100644
> --- a/sysdeps/i386/nptl/rseq-access.h
> +++ b/sysdeps/i386/nptl/rseq-access.h
> @@ -19,9 +19,9 @@
>  /* Read member of the RSEQ area directly.  */
>  #define RSEQ_GETMEM(member) \
>    ({									      \
> -     _Static_assert (sizeof (RSEQ_SELF()->member) == 1			      \
> -		     || sizeof (RSEQ_SELF()->member) == 4		      \
> -		     || sizeof (RSEQ_SELF()->member) == 8,		      \
> +     _Static_assert (sizeof (((struct rseq_area *)0)->member) == 1	      \
> +		     || sizeof (((struct rseq_area *)0)->member) == 4	      \
> +		     || sizeof (((struct rseq_area *)0)->member) == 8,	      \
>  		     "size of rseq data");				      \
>       ((struct rseq_area __seg_gs *)__rseq_offset)->member;		      \
>    })

I think we use (struct rseq_area) {}.member in other contexts.  It
avoids the compile-time null pointer dereference.

Thanks,
Florian



More information about the Libc-alpha mailing list