Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Mar 2019 23:44:26 +0000 (UTC)
From:      Eric Joyner <erj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r345312 - in head: share/man/man9 sys/net sys/sys
Message-ID:  <201903192344.x2JNiQrn055852@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: erj
Date: Tue Mar 19 23:44:26 2019
New Revision: 345312
URL: https://svnweb.freebsd.org/changeset/base/345312

Log:
  iflib: mark isc_driver_version as constant
  
  From Jake:
  The iflib core never modifies the isc_driver_version string. Allow
  drivers to safely assign pointers to constant buffers by marking this
  parameter const.
  
  Submitted by:	Jacob Keller <jacob.e.keller@intel.com>
  Reviewed by:	erj@, gallatin@, jhb@
  MFC after:	1 week
  Sponsored by:	Intel Corporation
  Differential Revision:	https://reviews.freebsd.org/D19577

Modified:
  head/share/man/man9/sysctl.9
  head/sys/net/iflib.c
  head/sys/net/iflib.h
  head/sys/sys/sysctl.h

Modified: head/share/man/man9/sysctl.9
==============================================================================
--- head/share/man/man9/sysctl.9	Tue Mar 19 21:46:21 2019	(r345311)
+++ head/share/man/man9/sysctl.9	Tue Mar 19 23:44:26 2019	(r345312)
@@ -48,6 +48,7 @@
 .Nm SYSCTL_ADD_SBINTIME_MSEC ,
 .Nm SYSCTL_ADD_SBINTIME_USEC ,
 .Nm SYSCTL_ADD_STRING ,
+.Nm SYSCTL_ADD_CONST_STRING ,
 .Nm SYSCTL_ADD_STRUCT ,
 .Nm SYSCTL_ADD_U8 ,
 .Nm SYSCTL_ADD_U16 ,
@@ -82,6 +83,7 @@
 .Nm SYSCTL_SBINTIME_MSEC ,
 .Nm SYSCTL_SBINTIME_USEC ,
 .Nm SYSCTL_STRING ,
+.Nm SYSCTL_CONST_STRING ,
 .Nm SYSCTL_STRUCT ,
 .Nm SYSCTL_U8 ,
 .Nm SYSCTL_U16 ,
@@ -291,6 +293,16 @@
 .Fa "const char *descr"
 .Fc
 .Ft struct sysctl_oid *
+.Fo SYSCTL_ADD_CONST_STRING
+.Fa "struct sysctl_ctx_list *ctx"
+.Fa "struct sysctl_oid_list *parent"
+.Fa "int number"
+.Fa "const char *name"
+.Fa "int ctlflags"
+.Fa "const char *ptr"
+.Fa "const char *descr"
+.Fc
+.Ft struct sysctl_oid *
 .Fo SYSCTL_ADD_STRUCT
 .Fa "struct sysctl_ctx_list *ctx"
 .Fa "struct sysctl_oid_list *parent"
@@ -443,6 +455,7 @@
 .Fn SYSCTL_SBINTIME_MSEC parent number name ctlflags ptr descr
 .Fn SYSCTL_SBINTIME_USEC parent number name ctlflags ptr descr
 .Fn SYSCTL_STRING parent number name ctlflags arg len descr
+.Fn SYSCTL_CONST_STRING parent number name ctlflags arg descr
 .Fn SYSCTL_STRUCT parent number name ctlflags ptr struct_type descr
 .Fn SYSCTL_U8 parent number name ctlflags ptr val descr
 .Fn SYSCTL_U16 parent number name ctlflags ptr val descr
@@ -607,6 +620,11 @@ If the
 .Fa len
 argument in zero, the string length is computed at every access to the OID using
 .Xr strlen 3 .
+Use the
+.Fn SYSCTL_CONST_STRING
+macro or the
+.Fn SYSCTL_ADD_CONST_STRING
+function to add a sysctl for a constant string.
 .Sh CREATING OPAQUE SYSCTLS
 The
 .Fn SYSCTL_OPAQUE
@@ -658,6 +676,7 @@ Static sysctls are declared using one of the
 .Fn SYSCTL_SBINTIME_MSEC ,
 .Fn SYSCTL_SBINTIME_USEC ,
 .Fn SYSCTL_STRING ,
+.Fn SYSCTL_CONST_STRING ,
 .Fn SYSCTL_STRUCT ,
 .Fn SYSCTL_U8 ,
 .Fn SYSCTL_U16 ,
@@ -690,6 +709,7 @@ Dynamic nodes are created using one of the
 .Fn SYSCTL_ADD_SBINTIME_MSEC ,
 .Fn SYSCTL_ADD_SBINTIME_USEC ,
 .Fn SYSCTL_ADD_STRING ,
+.Fn SYSCTL_ADD_CONST_STRING ,
 .Fn SYSCTL_ADD_STRUCT ,
 .Fn SYSCTL_ADD_U8 ,
 .Fn SYSCTL_ADD_U16 ,

Modified: head/sys/net/iflib.c
==============================================================================
--- head/sys/net/iflib.c	Tue Mar 19 21:46:21 2019	(r345311)
+++ head/sys/net/iflib.c	Tue Mar 19 23:44:26 2019	(r345312)
@@ -6257,8 +6257,8 @@ iflib_add_device_sysctl_pre(if_ctx_t ctx)
 						      CTLFLAG_RD, NULL, "IFLIB fields");
 	oid_list = SYSCTL_CHILDREN(node);
 
-	SYSCTL_ADD_STRING(ctx_list, oid_list, OID_AUTO, "driver_version",
-		       CTLFLAG_RD, ctx->ifc_sctx->isc_driver_version, 0,
+	SYSCTL_ADD_CONST_STRING(ctx_list, oid_list, OID_AUTO, "driver_version",
+		       CTLFLAG_RD, ctx->ifc_sctx->isc_driver_version,
 		       "driver version");
 
 	SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_ntxqs",

Modified: head/sys/net/iflib.h
==============================================================================
--- head/sys/net/iflib.h	Tue Mar 19 21:46:21 2019	(r345311)
+++ head/sys/net/iflib.h	Tue Mar 19 23:44:26 2019	(r345312)
@@ -248,7 +248,7 @@ struct if_shared_ctx {
 
 	/* fields necessary for probe */
 	pci_vendor_info_t *isc_vendor_info;
-	char *isc_driver_version;
+	const char *isc_driver_version;
 	/* optional function to transform the read values to match the table*/
 	void (*isc_parse_devinfo) (uint16_t *device_id, uint16_t *subvendor_id,
 				   uint16_t *subdevice_id, uint16_t *rev_id);

Modified: head/sys/sys/sysctl.h
==============================================================================
--- head/sys/sys/sysctl.h	Tue Mar 19 21:46:21 2019	(r345311)
+++ head/sys/sys/sysctl.h	Tue Mar 19 23:44:26 2019	(r345312)
@@ -354,6 +354,25 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);
 	    NULL); \
 })
 
+/* Oid for a constant '\0' terminated string. */
+#define	SYSCTL_CONST_STRING(parent, nbr, name, access, arg, descr)	\
+	SYSCTL_OID(parent, nbr, name, CTLTYPE_STRING|(access),		\
+	    __DECONST(char *, arg), 0, sysctl_handle_string, "A", descr); \
+	CTASSERT(!(access & CTLFLAG_WR));				\
+	CTASSERT(((access) & CTLTYPE) == 0 ||				\
+	    ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_STRING)
+
+#define	SYSCTL_ADD_CONST_STRING(ctx, parent, nbr, name, access, arg, descr) \
+({									\
+	char *__arg = __DECONST(char *, arg);				\
+	CTASSERT(!(access & CTLFLAG_WR));				\
+	CTASSERT(((access) & CTLTYPE) == 0 ||				\
+	    ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_STRING);	\
+	sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_STRING|(access),	\
+	    __arg, 0, sysctl_handle_string, "A", __DESCR(descr),	\
+	    NULL); \
+})
+
 /* Oid for a bool.  If ptr is NULL, val is returned. */
 #define	SYSCTL_NULL_BOOL_PTR ((bool *)NULL)
 #define	SYSCTL_BOOL(parent, nbr, name, access, ptr, val, descr)	\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201903192344.x2JNiQrn055852>