Author: jhb
Date: Tue Mar 17 18:44:03 2020
New Revision: 359047
URL: https://svnweb.freebsd.org/changeset/base/359047

Log:
  Mark procfs-based process debugging as deprecated for FreeBSD 13.
  
  Attempting to use ioctls on /proc/<pid>/mem to control a process will
  trigger warnings on the console.  The <sys/pioctl.h> include file will
  also now emit a compile-time warning when used from userland.
  
  Reviewed by:  emaste
  MFC after:    1 week
  Relnotes:     yes
  Differential Revision:        https://reviews.freebsd.org/D23822

Modified:
  head/lib/libsysdecode/Makefile
  head/sys/fs/procfs/procfs_ioctl.c
  head/sys/sys/pioctl.h

Modified: head/lib/libsysdecode/Makefile
==============================================================================
--- head/lib/libsysdecode/Makefile      Tue Mar 17 18:17:32 2020        
(r359046)
+++ head/lib/libsysdecode/Makefile      Tue Mar 17 18:44:03 2020        
(r359047)
@@ -121,6 +121,9 @@ CFLAGS.gcc.ioctl.c+= -Wno-redundant-decls
 
 CFLAGS.gcc+=   ${CFLAGS.gcc.${.IMPSRC}}
 
+# Ignore deprecation warning in <sys/pioctl.h>
+CFLAGS.ioctl.c+= -Wno-\#warnings
+
 DEPENDOBJS+=   tables.h
 tables.h: mktables
        sh ${.CURDIR}/mktables ${SYSROOT:U${DESTDIR}}${INCLUDEDIR} ${.TARGET}

Modified: head/sys/fs/procfs/procfs_ioctl.c
==============================================================================
--- head/sys/fs/procfs/procfs_ioctl.c   Tue Mar 17 18:17:32 2020        
(r359046)
+++ head/sys/fs/procfs/procfs_ioctl.c   Tue Mar 17 18:44:03 2020        
(r359047)
@@ -69,10 +69,53 @@ procfs_ioctl(PFS_IOCTL_ARGS)
 #ifdef COMPAT_FREEBSD6
        int ival;
 #endif
+       static struct timeval lasttime;
+       static struct timeval interval = { .tv_sec = 1, .tv_usec = 0 };
 
        KASSERT(p != NULL,
            ("%s() called without a process", __func__));
        PROC_LOCK_ASSERT(p, MA_OWNED);
+
+       switch (cmd) {
+#if defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+       case _IOC(IOC_IN, 'p', 1, 0):
+#endif
+#ifdef COMPAT_FREEBSD6
+       case _IO('p', 1):
+#endif
+       case PIOCBIS:
+#if defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+       case _IOC(IOC_IN, 'p', 2, 0):
+#endif
+#ifdef COMPAT_FREEBSD6
+       case _IO('p', 2):
+#endif
+       case PIOCBIC:
+#if defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+       case _IOC(IOC_IN, 'p', 3, 0):
+#endif
+#ifdef COMPAT_FREEBSD6
+       case _IO('p', 3):
+#endif
+       case PIOCSFL:
+       case PIOCGFL:
+       case PIOCWAIT:
+       case PIOCSTATUS:
+#ifdef COMPAT_FREEBSD32
+       case PIOCWAIT32:
+       case PIOCSTATUS32:
+#endif
+#if defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+       case _IOC(IOC_IN, 'p', 5, 0):
+#endif
+#ifdef COMPAT_FREEBSD6
+       case _IO('p', 5):
+#endif
+       case PIOCCONT:
+               if (ratecheck(&lasttime, &interval) != 0)
+                       gone_in(13, "procfs-based process debugging");
+               break;
+       }
 
        error = 0;
        switch (cmd) {

Modified: head/sys/sys/pioctl.h
==============================================================================
--- head/sys/sys/pioctl.h       Tue Mar 17 18:17:32 2020        (r359046)
+++ head/sys/sys/pioctl.h       Tue Mar 17 18:44:03 2020        (r359047)
@@ -41,6 +41,10 @@
 #ifndef _SYS_PIOCTL_H
 # define _SYS_PIOCTL_H
 
+#ifndef _KERNEL
+#warning "<sys/pioctl.h> is deprecated, ptrace() should be used instead"
+#endif
+
 # include <sys/ioccom.h>
 
 struct procfs_status {
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to