[glibc] Consolidate dl-osinfo.h into the generic implementation
Adhemerval Zanella via Glibc-cvs <[email protected]> Tue, 16 Jun 2026 18:16:06 +0000 (GMT)
| Newsgroups | gmane.comp.lib.glibc.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=604fe0b87bf56f2c95206a8cffac71548b4436cb commit 604fe0b87bf56f2c95206a8cffac71548b4436cb Author: Adhemerval Zanella <[email protected]> Date: Fri Jun 12 13:10:15 2026 -0300 Consolidate dl-osinfo.h into the generic implementation The generic and the Linux _dl_setup_stack_chk_guard and _dl_setup_pointer_guard are identical when the kernel provides the AT_RANDOM auxiliary vector, which is always the case on the supported Linux kernels; the generic version only adds a fallback for a missing AT_RANDOM. Remove the Linux-specific dl-osinfo.h and use the generic one for all targets. The removed header pulled in <dl-sysdep.h>, which is what transitively declared __libc_enable_secure for dl-parse_auxv.h; include <unistd.h> there directly so it no longer relies on that. Include <string.h> in the generic header so it is self-contained. Reviewed-by: DJ Delorie <[email protected]> Diff: --- sysdeps/generic/dl-osinfo.h | 1 + sysdeps/unix/sysv/linux/dl-osinfo.h | 54 --------------------------------- sysdeps/unix/sysv/linux/dl-parse_auxv.h | 1 + 3 files changed, 2 insertions(+), 54 deletions(-) diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h index de46926abc..5bb55cfe8a 100644 --- a/sysdeps/generic/dl-osinfo.h +++ b/sysdeps/generic/dl-osinfo.h @@ -18,6 +18,7 @@ #include <endian.h> #include <stdint.h> +#include <string.h> static inline uintptr_t __attribute__ ((always_inline)) _dl_setup_stack_chk_guard (void *dl_random) diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h deleted file mode 100644 index 5ff92b76f9..0000000000 --- a/sysdeps/unix/sysv/linux/dl-osinfo.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Operating system specific code for generic dynamic loader functions. Linux. - Copyright (C) 2000-2026 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <dl-sysdep.h> -#include <endian.h> -#include <fcntl.h> -#include <stdint.h> -#include <not-cancel.h> - -static inline uintptr_t __attribute__ ((always_inline)) -_dl_setup_stack_chk_guard (void *dl_random) -{ - union - { - uintptr_t num; - unsigned char bytes[sizeof (uintptr_t)]; - } ret; - - /* We need in the moment only 8 bytes on 32-bit platforms and 16 - bytes on 64-bit platforms. Therefore we can use the data - directly and not use the kernel-provided data to seed a PRNG. */ - memcpy (ret.bytes, dl_random, sizeof (ret)); -#if BYTE_ORDER == LITTLE_ENDIAN - ret.num &= ~(uintptr_t) 0xff; -#elif BYTE_ORDER == BIG_ENDIAN - ret.num &= ~((uintptr_t) 0xff << (8 * (sizeof (ret) - 1))); -#else -# error "BYTE_ORDER unknown" -#endif - return ret.num; -} - -static inline uintptr_t __attribute__ ((always_inline)) -_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard) -{ - uintptr_t ret; - memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret)); - return ret; -} diff --git a/sysdeps/unix/sysv/linux/dl-parse_auxv.h b/sysdeps/unix/sysv/linux/dl-parse_auxv.h index 69b6905f7c..d1cd437323 100644 --- a/sysdeps/unix/sysv/linux/dl-parse_auxv.h +++ b/sysdeps/unix/sysv/linux/dl-parse_auxv.h @@ -22,6 +22,7 @@ #include <ldsodefs.h> #include <link.h> #include <rseq-internal.h> +#include <unistd.h> /* For __libc_enable_secure. */ typedef ElfW(Addr) dl_parse_auxv_t[AT_MINSIGSTKSZ + 1];