summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--NEWS5
-rw-r--r--include/sys/sysctl.h10
-rw-r--r--scripts/check-installed-headers.sh24
-rw-r--r--sysdeps/unix/sysv/linux/sys/sysctl.h5
-rw-r--r--sysdeps/unix/sysv/linux/sysctl.c4
6 files changed, 26 insertions, 35 deletions
diff --git a/ChangeLog b/ChangeLog
index b2aa19a58d..865fcec63d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
 2019-06-12  Florian Weimer  <fweimer@redhat.com>
 
+	Linux: Deprecate sysctl.
+	* include/sysctl.h (__sysctl): Remove declaration.
+	* scripts/check-installed-headers.sh (sys/sysctl.h): Disable
+	check.
+	* sysdeps/unix/sysv/linux/sys/sysctl.h: Add deprecation warning.
+	(sysctl): Add deprecation attribute.
+	* sysdeps/unix/sysv/linux/sysctl.c: Include <linux/sysctl.h>
+	directly, to avoid the deprecation warning.  Do not include
+	<string.h>.
+	(__sysctl): Remove hidden alias.
+
+2019-06-12  Florian Weimer  <fweimer@redhat.com>
+
 	Linux: Use kernel headers for statx definitions if available.
 	* include/bits/statx-generic.h: New file.
 	* include/bits/types/struct_statx.h: Likewise.
diff --git a/NEWS b/NEWS
index 00f9e855a2..8a2fecef47 100644
--- a/NEWS
+++ b/NEWS
@@ -61,6 +61,11 @@ Deprecated and removed features, and other changes affecting compatibility:
 * On 32-bit Arm, support for the port-based I/O emulation and the <sys/io.h>
   header have been removed.
 
+* The Linux-specific <sys/sysctl.h> header and the sysctl function have been
+  deprecated and will be removed from a future version of glibc.
+  Application should directly access /proc instead.  For obtaining random
+  bits, the getentropy function can be used.
+
 Changes to build and runtime requirements:
 
 * GCC 6.2 or later is required to build the GNU C Library.
diff --git a/include/sys/sysctl.h b/include/sys/sysctl.h
index 2a15e91354..fa102aa226 100644
--- a/include/sys/sysctl.h
+++ b/include/sys/sysctl.h
@@ -1,13 +1,3 @@
 #ifndef _SYS_SYSCTL_H
 #include_next <sys/sysctl.h>
-
-# ifndef _ISOMAC
-
-/* Read or write system parameters (Linux, FreeBSD specific).  */
-extern int __sysctl (int *__name, int __nlen, void *__oldval,
-		     size_t *__oldlenp, void *__newval, size_t __newlen);
-libc_hidden_proto (__sysctl)
-
-
-# endif /* !_ISOMAC */
 #endif  /* _SYS_SYSCTL_H */
diff --git a/scripts/check-installed-headers.sh b/scripts/check-installed-headers.sh
index e4f37d33f8..ef6ed94a2e 100644
--- a/scripts/check-installed-headers.sh
+++ b/scripts/check-installed-headers.sh
@@ -53,7 +53,6 @@ trap "rm -f '$cih_test_c'" 0
 
 failed=0
 is_x86_64=unknown
-is_x32=unknown
 for header in "$@"; do
     # Skip various headers for which this test gets a false failure.
     case "$header" in
@@ -75,27 +74,10 @@ for header in "$@"; do
         (finclude/*)
             continue;;
 
-	# sys/sysctl.h is unsupported for x32.
+	# sys/sysctl.h produces a deprecation warning and therefore
+	# fails compilation with -Werror.
 	(sys/sysctl.h)
-            case "$is_x32" in
-                (yes) continue;;
-                (no)  ;;
-                (unknown)
-                    cat >"$cih_test_c" <<EOF
-#if defined __x86_64__ && defined __ILP32__
-# error "is x32"
-#endif
-EOF
-                    if $cc_cmd -fsyntax-only "$cih_test_c" > /dev/null 2>&1
-                    then
-                        is_x32=no
-                    else
-                        is_x32=yes
-                        continue
-                    fi
-                ;;
-            esac
-	    ;;
+	    continue;;
 
         # sys/vm86.h is "unsupported on x86-64" and errors out on that target.
         (sys/vm86.h)
diff --git a/sysdeps/unix/sysv/linux/sys/sysctl.h b/sysdeps/unix/sysv/linux/sys/sysctl.h
index 0f6e71ba7e..be34555668 100644
--- a/sysdeps/unix/sysv/linux/sys/sysctl.h
+++ b/sysdeps/unix/sysv/linux/sys/sysctl.h
@@ -18,6 +18,8 @@
 #ifndef	_SYS_SYSCTL_H
 #define	_SYS_SYSCTL_H	1
 
+#warning "The <sys/sysctl.h> header is deprecated and will be removed."
+
 #include <features.h>
 #define __need_size_t
 #include <stddef.h>
@@ -66,7 +68,8 @@ __BEGIN_DECLS
 
 /* Read or write system parameters.  */
 extern int sysctl (int *__name, int __nlen, void *__oldval,
-		   size_t *__oldlenp, void *__newval, size_t __newlen) __THROW;
+		   size_t *__oldlenp, void *__newval, size_t __newlen) __THROW
+  __attribute_deprecated__;
 
 __END_DECLS
 
diff --git a/sysdeps/unix/sysv/linux/sysctl.c b/sysdeps/unix/sysv/linux/sysctl.c
index 33afdd918b..0f18c69abe 100644
--- a/sysdeps/unix/sysv/linux/sysctl.c
+++ b/sysdeps/unix/sysv/linux/sysctl.c
@@ -17,8 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <errno.h>
-#include <string.h>	/* For the real memset prototype.  */
-#include <sys/sysctl.h>
+#include <linux/sysctl.h>
 
 #include <sysdep.h>
 #include <sys/syscall.h>
@@ -39,5 +38,4 @@ __sysctl (int *name, int nlen, void *oldval, size_t *oldlenp,
 
   return INLINE_SYSCALL (_sysctl, 1, &args);
 }
-libc_hidden_def (__sysctl)
 weak_alias (__sysctl, sysctl)