diff mbox series

[04/16] elf, uapi: Add definitions for VER_FLG_BASE and VER_FLG_WEAK

Message ID 20250203-parse_vdso-nolibc-v1-4-9cb6268d77be@linutronix.de (mailing list archive)
State New
Headers show
Series selftests: vDSO: parse_vdso: Make compatible with nolibc | expand

Commit Message

Thomas Weißschuh Feb. 3, 2025, 9:05 a.m. UTC
The definitions are used by tools/testing/selftests/vDSO/parse_vdso.c.
To be able to build the vDSO selftests without a libc dependency,
add the definitions to the kernels own UAPI headers.

Link: https://docs.oracle.com/cd/E19683-01/816-1386/chapter6-80869/index.html
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
 include/uapi/linux/elf.h | 3 +++
 1 file changed, 3 insertions(+)

Comments

Kees Cook Feb. 4, 2025, 3:10 p.m. UTC | #1
On Mon, Feb 03, 2025 at 10:05:05AM +0100, Thomas Weißschuh wrote:
> The definitions are used by tools/testing/selftests/vDSO/parse_vdso.c.
> To be able to build the vDSO selftests without a libc dependency,
> add the definitions to the kernels own UAPI headers.

For all the UAPI changes, where are the defines "normally" found? i.e.
how does adding these to UAPI not break something that already has them?
Or have these never been defined before? I'm confused about how removing
the libc dependency exposes the lack of these defines. Are they defined
in a non-exported libc header somewhere?

-Kees
Thomas Weißschuh Feb. 4, 2025, 3:17 p.m. UTC | #2
On Tue, Feb 04, 2025 at 07:10:00AM -0800, Kees Cook wrote:
> On Mon, Feb 03, 2025 at 10:05:05AM +0100, Thomas Weißschuh wrote:
> > The definitions are used by tools/testing/selftests/vDSO/parse_vdso.c.
> > To be able to build the vDSO selftests without a libc dependency,
> > add the definitions to the kernels own UAPI headers.
> 
> For all the UAPI changes, where are the defines "normally" found? i.e.
> how does adding these to UAPI not break something that already has them?
> Or have these never been defined before? I'm confused about how removing
> the libc dependency exposes the lack of these defines. Are they defined
> in a non-exported libc header somewhere?

They are normally defined directly in libc <elf.h>, which does not use
UAPI headers. Libc elf.h and Linux UAPI elf.h can not be used at the
same time because they define the same symbols.
In theory some user of UAPI elf.h could have defined these new symbols
on their own without ifdef guards. However UAPI elf.h is regularly
updated with new symbols.
Kees Cook Feb. 4, 2025, 3:32 p.m. UTC | #3
On Tue, Feb 04, 2025 at 04:17:03PM +0100, Thomas Weißschuh wrote:
> On Tue, Feb 04, 2025 at 07:10:00AM -0800, Kees Cook wrote:
> > On Mon, Feb 03, 2025 at 10:05:05AM +0100, Thomas Weißschuh wrote:
> > > The definitions are used by tools/testing/selftests/vDSO/parse_vdso.c.
> > > To be able to build the vDSO selftests without a libc dependency,
> > > add the definitions to the kernels own UAPI headers.
> > 
> > For all the UAPI changes, where are the defines "normally" found? i.e.
> > how does adding these to UAPI not break something that already has them?
> > Or have these never been defined before? I'm confused about how removing
> > the libc dependency exposes the lack of these defines. Are they defined
> > in a non-exported libc header somewhere?
> 
> They are normally defined directly in libc <elf.h>, which does not use
> UAPI headers. Libc elf.h and Linux UAPI elf.h can not be used at the
> same time because they define the same symbols.
> In theory some user of UAPI elf.h could have defined these new symbols
> on their own without ifdef guards. However UAPI elf.h is regularly
> updated with new symbols.

Okay, great. As long as the collision risk is low, I'm fine with all the
UAPI additions. Thanks for doing this!
Kees Cook Feb. 4, 2025, 3:33 p.m. UTC | #4
On Mon, Feb 03, 2025 at 10:05:05AM +0100, Thomas Weißschuh wrote:
> The definitions are used by tools/testing/selftests/vDSO/parse_vdso.c.
> To be able to build the vDSO selftests without a libc dependency,
> add the definitions to the kernels own UAPI headers.
> 
> Link: https://docs.oracle.com/cd/E19683-01/816-1386/chapter6-80869/index.html
> Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>

Reviewed-by: Kees Cook <kees@kernel.org>
diff mbox series

Patch

diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h
index c5383cc7bb13c931fea083de5243c4006f795006..d040f12ff1c0ae3dde5c371c81d6089118fbe8ed 100644
--- a/include/uapi/linux/elf.h
+++ b/include/uapi/linux/elf.h
@@ -136,6 +136,9 @@  typedef __s64	Elf64_Sxword;
 #define STT_COMMON  5
 #define STT_TLS     6
 
+#define VER_FLG_BASE 0x1
+#define VER_FLG_WEAK 0x2
+
 #define ELF_ST_BIND(x)		((x) >> 4)
 #define ELF_ST_TYPE(x)		((x) & 0xf)
 #define ELF32_ST_BIND(x)	ELF_ST_BIND(x)