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);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to