svn commit: r340055 - in head: share/man/man9 sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/fs/ext2fs sys/fs/fuse sys/fs/nandfs sys/fs/nfs sys/fs/nfsclient sys/fs/tmpfs sys/kern sys/sys sys/uf...

Brooks Davis brooks at FreeBSD.org
Fri Nov 2 14:42:40 UTC 2018


Author: brooks
Date: Fri Nov  2 14:42:36 2018
New Revision: 340055
URL: https://svnweb.freebsd.org/changeset/base/340055

Log:
  Make vop_symlink take a const target path.
  
  This will enable callers to take const paths as part of syscall
  decleration improvements.
  
  Where doing so is easy and non-distruptive carry the const through
  implementations. In UFS the value is passed to an interface that must
  take non-const values. In ZFS, const poisoning would touch code shared
  with upstream and it's not worth adding diffs.
  
  Bump __FreeBSD_version for external API consumers.
  
  Reviewed by:	kib (prior version)
  Obtained from:	CheriBSD
  Sponsored by:	DARPA, AFRL
  Differential Revision:	https://reviews.freebsd.org/D17805

Modified:
  head/share/man/man9/VOP_CREATE.9
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  head/sys/fs/ext2fs/ext2_vnops.c
  head/sys/fs/fuse/fuse_vnops.c
  head/sys/fs/nandfs/nandfs_vnops.c
  head/sys/fs/nfs/nfs_var.h
  head/sys/fs/nfsclient/nfs_clrpcops.c
  head/sys/fs/tmpfs/tmpfs.h
  head/sys/fs/tmpfs/tmpfs_subr.c
  head/sys/fs/tmpfs/tmpfs_vnops.c
  head/sys/kern/vnode_if.src
  head/sys/sys/param.h
  head/sys/ufs/ufs/ufs_vnops.c

Modified: head/share/man/man9/VOP_CREATE.9
==============================================================================
--- head/share/man/man9/VOP_CREATE.9	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/share/man/man9/VOP_CREATE.9	Fri Nov  2 14:42:36 2018	(r340055)
@@ -28,7 +28,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd July 24, 1996
+.Dd November 2, 2018
 .Dt VOP_CREATE 9
 .Os
 .Sh NAME
@@ -48,7 +48,7 @@
 .Ft int
 .Fn VOP_MKDIR "struct vnode *dvp" "struct vnode **vpp" "struct componentname *cnp" "struct vattr *vap"
 .Ft int
-.Fn VOP_SYMLINK "struct vnode *dvp" "struct vnode **vpp" "struct componentname *cnp" "struct vattr *vap" "char *target"
+.Fn VOP_SYMLINK "struct vnode *dvp" "struct vnode **vpp" "struct componentname *cnp" "struct vattr *vap" "const char *target"
 .Sh DESCRIPTION
 These entry points create a new file, socket, fifo, device, directory or symlink
 in a given directory.

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Fri Nov  2 14:42:36 2018	(r340055)
@@ -5314,7 +5314,7 @@ zfs_freebsd_symlink(ap)
 	vattr_init_mask(vap);
 
 	return (zfs_symlink(ap->a_dvp, ap->a_vpp, cnp->cn_nameptr, vap,
-	    ap->a_target, cnp->cn_cred, cnp->cn_thread));
+	    __DECONST(char *, ap->a_target), cnp->cn_cred, cnp->cn_thread));
 }
 
 static int

Modified: head/sys/fs/ext2fs/ext2_vnops.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_vnops.c	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/fs/ext2fs/ext2_vnops.c	Fri Nov  2 14:42:36 2018	(r340055)
@@ -1521,8 +1521,8 @@ ext2_symlink(struct vop_symlink_args *ap)
 		ip->i_size = len;
 		ip->i_flag |= IN_CHANGE | IN_UPDATE;
 	} else
-		error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0,
-		    UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
+		error = vn_rdwr(UIO_WRITE, vp, __DECONST(void *, ap->a_target),
+		    len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
 		    ap->a_cnp->cn_cred, NOCRED, NULL, NULL);
 	if (error)
 		vput(vp);

Modified: head/sys/fs/fuse/fuse_vnops.c
==============================================================================
--- head/sys/fs/fuse/fuse_vnops.c	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/fs/fuse/fuse_vnops.c	Fri Nov  2 14:42:36 2018	(r340055)
@@ -1708,7 +1708,7 @@ fuse_vnop_symlink(struct vop_symlink_args *ap)
 	struct vnode *dvp = ap->a_dvp;
 	struct vnode **vpp = ap->a_vpp;
 	struct componentname *cnp = ap->a_cnp;
-	char *target = ap->a_target;
+	const char *target = ap->a_target;
 
 	struct fuse_dispatcher fdi;
 

Modified: head/sys/fs/nandfs/nandfs_vnops.c
==============================================================================
--- head/sys/fs/nandfs/nandfs_vnops.c	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/fs/nandfs/nandfs_vnops.c	Fri Nov  2 14:42:36 2018	(r340055)
@@ -1939,8 +1939,8 @@ nandfs_symlink(struct vop_symlink_args *ap)
 
 
 	len = strlen(ap->a_target);
-	error = vn_rdwr(UIO_WRITE, *vpp, ap->a_target, len, (off_t)0,
-	    UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
+	error = vn_rdwr(UIO_WRITE, *vpp, __DECONST(void *, ap->a_target),
+	    len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
 	    cnp->cn_cred, NOCRED, NULL, NULL);
 	if (error)
 		vput(*vpp);

Modified: head/sys/fs/nfs/nfs_var.h
==============================================================================
--- head/sys/fs/nfs/nfs_var.h	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/fs/nfs/nfs_var.h	Fri Nov  2 14:42:36 2018	(r340055)
@@ -474,7 +474,7 @@ int nfsrpc_rename(vnode_t, vnode_t, char *, int, vnode
 int nfsrpc_link(vnode_t, vnode_t, char *, int,
     struct ucred *, NFSPROC_T *, struct nfsvattr *, struct nfsvattr *,
     int *, int *, void *);
-int nfsrpc_symlink(vnode_t, char *, int, char *, struct vattr *,
+int nfsrpc_symlink(vnode_t, char *, int, const char *, struct vattr *,
     struct ucred *, NFSPROC_T *, struct nfsvattr *, struct nfsvattr *,
     struct nfsfh **, int *, int *, void *);
 int nfsrpc_mkdir(vnode_t, char *, int, struct vattr *,

Modified: head/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- head/sys/fs/nfsclient/nfs_clrpcops.c	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/fs/nfsclient/nfs_clrpcops.c	Fri Nov  2 14:42:36 2018	(r340055)
@@ -2627,7 +2627,7 @@ nfsmout:
  * nfs symbolic link create rpc
  */
 APPLESTATIC int
-nfsrpc_symlink(vnode_t dvp, char *name, int namelen, char *target,
+nfsrpc_symlink(vnode_t dvp, char *name, int namelen, const char *target,
     struct vattr *vap, struct ucred *cred, NFSPROC_T *p, struct nfsvattr *dnap,
     struct nfsvattr *nnap, struct nfsfh **nfhpp, int *attrflagp,
     int *dattrflagp, void *dstuff)

Modified: head/sys/fs/tmpfs/tmpfs.h
==============================================================================
--- head/sys/fs/tmpfs/tmpfs.h	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/fs/tmpfs/tmpfs.h	Fri Nov  2 14:42:36 2018	(r340055)
@@ -411,7 +411,7 @@ void	tmpfs_ref_node(struct tmpfs_node *node);
 void	tmpfs_ref_node_locked(struct tmpfs_node *node);
 int	tmpfs_alloc_node(struct mount *mp, struct tmpfs_mount *, enum vtype,
 	    uid_t uid, gid_t gid, mode_t mode, struct tmpfs_node *,
-	    char *, dev_t, struct tmpfs_node **);
+	    const char *, dev_t, struct tmpfs_node **);
 void	tmpfs_free_node(struct tmpfs_mount *, struct tmpfs_node *);
 bool	tmpfs_free_node_locked(struct tmpfs_mount *, struct tmpfs_node *, bool);
 void	tmpfs_free_tmp(struct tmpfs_mount *);
@@ -424,7 +424,7 @@ int	tmpfs_alloc_vp(struct mount *, struct tmpfs_node *
 	    struct vnode **);
 void	tmpfs_free_vp(struct vnode *);
 int	tmpfs_alloc_file(struct vnode *, struct vnode **, struct vattr *,
-	    struct componentname *, char *);
+	    struct componentname *, const char *);
 void	tmpfs_check_mtime(struct vnode *);
 void	tmpfs_dir_attach(struct vnode *, struct tmpfs_dirent *);
 void	tmpfs_dir_detach(struct vnode *, struct tmpfs_dirent *);

Modified: head/sys/fs/tmpfs/tmpfs_subr.c
==============================================================================
--- head/sys/fs/tmpfs/tmpfs_subr.c	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/fs/tmpfs/tmpfs_subr.c	Fri Nov  2 14:42:36 2018	(r340055)
@@ -182,7 +182,7 @@ tmpfs_ref_node_locked(struct tmpfs_node *node)
 int
 tmpfs_alloc_node(struct mount *mp, struct tmpfs_mount *tmp, enum vtype type,
     uid_t uid, gid_t gid, mode_t mode, struct tmpfs_node *parent,
-    char *target, dev_t rdev, struct tmpfs_node **node)
+    const char *target, dev_t rdev, struct tmpfs_node **node)
 {
 	struct tmpfs_node *nnode;
 	vm_object_t obj;
@@ -717,7 +717,7 @@ tmpfs_free_vp(struct vnode *vp)
  */
 int
 tmpfs_alloc_file(struct vnode *dvp, struct vnode **vpp, struct vattr *vap,
-    struct componentname *cnp, char *target)
+    struct componentname *cnp, const char *target)
 {
 	int error;
 	struct tmpfs_dirent *de;

Modified: head/sys/fs/tmpfs/tmpfs_vnops.c
==============================================================================
--- head/sys/fs/tmpfs/tmpfs_vnops.c	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/fs/tmpfs/tmpfs_vnops.c	Fri Nov  2 14:42:36 2018	(r340055)
@@ -1176,7 +1176,7 @@ tmpfs_symlink(struct vop_symlink_args *v)
 	struct vnode **vpp = v->a_vpp;
 	struct componentname *cnp = v->a_cnp;
 	struct vattr *vap = v->a_vap;
-	char *target = v->a_target;
+	const char *target = v->a_target;
 
 #ifdef notyet /* XXX FreeBSD BUG: kern_symlink is not setting VLNK */
 	MPASS(vap->va_type == VLNK);

Modified: head/sys/kern/vnode_if.src
==============================================================================
--- head/sys/kern/vnode_if.src	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/kern/vnode_if.src	Fri Nov  2 14:42:36 2018	(r340055)
@@ -325,7 +325,7 @@ vop_symlink {
 	OUT struct vnode **vpp;
 	IN struct componentname *cnp;
 	IN struct vattr *vap;
-	IN char *target;
+	IN const char *target;
 };
 
 

Modified: head/sys/sys/param.h
==============================================================================
--- head/sys/sys/param.h	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/sys/param.h	Fri Nov  2 14:42:36 2018	(r340055)
@@ -60,7 +60,7 @@
  *		in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1300002	/* Master, propagated to newvers */
+#define __FreeBSD_version 1300003	/* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,

Modified: head/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- head/sys/ufs/ufs/ufs_vnops.c	Fri Nov  2 14:15:52 2018	(r340054)
+++ head/sys/ufs/ufs/ufs_vnops.c	Fri Nov  2 14:42:36 2018	(r340055)
@@ -2095,7 +2095,7 @@ ufs_symlink(ap)
 		struct vnode **a_vpp;
 		struct componentname *a_cnp;
 		struct vattr *a_vap;
-		char *a_target;
+		const char *a_target;
 	} */ *ap;
 {
 	struct vnode *vp, **vpp = ap->a_vpp;
@@ -2116,8 +2116,8 @@ ufs_symlink(ap)
 		ip->i_flag |= IN_CHANGE | IN_UPDATE;
 		error = UFS_UPDATE(vp, 0);
 	} else
-		error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0,
-		    UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
+		error = vn_rdwr(UIO_WRITE, vp, __DECONST(void *, ap->a_target),
+		    len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
 		    ap->a_cnp->cn_cred, NOCRED, NULL, NULL);
 	if (error)
 		vput(vp);


More information about the svn-src-head mailing list