Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 May 2021 00:53:04 GMT
From:      Kirk McKusick <mckusick@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: f9738ecc4115 - stable/12 - Fix handling of embedded symbolic links
Message-ID:  <202105310053.14V0r453065459@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by mckusick:

URL: https://cgit.FreeBSD.org/src/commit/?id=f9738ecc411548be9a8f67c5d33839c6e886b8b3

commit f9738ecc411548be9a8f67c5d33839c6e886b8b3
Author:     Kirk McKusick <mckusick@FreeBSD.org>
AuthorDate: 2021-05-17 00:02:42 +0000
Commit:     Kirk McKusick <mckusick@FreeBSD.org>
CommitDate: 2021-05-31 00:54:42 +0000

    Fix handling of embedded symbolic links
    
    Sponsored by: Netflix
    
    (cherry picked from commit 9a2fac6ba65fbd14d37ccedbc2aec27a190128ea)
---
 sys/kern/vfs_subr.c     | 3 ++-
 sys/sys/mount.h         | 2 +-
 sys/ufs/ffs/ffs_inode.c | 4 +---
 sys/ufs/ufs/ufs_vnops.c | 4 +---
 4 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 601f159d0c67..15ea8a1275c9 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -3859,7 +3859,8 @@ DB_SHOW_COMMAND(mount, db_show_mount)
 	db_printf("    mnt_activevnodelistsize = %d\n",
 	    mp->mnt_activevnodelistsize);
 	db_printf("    mnt_writeopcount = %d\n", mp->mnt_writeopcount);
-	db_printf("    mnt_maxsymlinklen = %d\n", mp->mnt_maxsymlinklen);
+	db_printf("    mnt_maxsymlinklen = %jd\n",
+	    (uintmax_t)mp->mnt_maxsymlinklen);
 	db_printf("    mnt_iosize_max = %d\n", mp->mnt_iosize_max);
 	db_printf("    mnt_hashseed = %u\n", mp->mnt_hashseed);
 	db_printf("    mnt_lockref = %d\n", mp->mnt_lockref);
diff --git a/sys/sys/mount.h b/sys/sys/mount.h
index f1a42cb3d29b..d3a3b6fa0558 100644
--- a/sys/sys/mount.h
+++ b/sys/sys/mount.h
@@ -209,7 +209,7 @@ struct mount {
 	uint64_t	mnt_flag;		/* (i) flags shared with user */
 	struct vfsoptlist *mnt_opt;		/* current mount options */
 	struct vfsoptlist *mnt_optnew;		/* new options passed to fs */
-	int		mnt_maxsymlinklen;	/* max size of short symlink */
+	uint64_t	mnt_maxsymlinklen;	/* max size of short symlink */
 	struct statfs	mnt_stat;		/* cache of filesystem stats */
 	struct ucred	*mnt_cred;		/* credentials of mounter */
 	void *		mnt_data;		/* private data */
diff --git a/sys/ufs/ffs/ffs_inode.c b/sys/ufs/ffs/ffs_inode.c
index 8fbe02cd572b..d0fa00cfaf6e 100644
--- a/sys/ufs/ffs/ffs_inode.c
+++ b/sys/ufs/ffs/ffs_inode.c
@@ -302,9 +302,7 @@ ffs_truncate(vp, length, flags, cred)
 	}
 	if ((flags & IO_NORMAL) == 0)
 		return (0);
-	if (vp->v_type == VLNK &&
-	    (ip->i_size < vp->v_mount->mnt_maxsymlinklen ||
-	     datablocks == 0)) {
+	if (vp->v_type == VLNK && ip->i_size < vp->v_mount->mnt_maxsymlinklen) {
 #ifdef INVARIANTS
 		if (length != 0)
 			panic("ffs_truncate: partial truncate of symlink");
diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c
index eee8004bb029..0174e0baebb6 100644
--- a/sys/ufs/ufs/ufs_vnops.c
+++ b/sys/ufs/ufs/ufs_vnops.c
@@ -2279,10 +2279,8 @@ ufs_readlink(ap)
 	doff_t isize;
 
 	isize = ip->i_size;
-	if ((isize < vp->v_mount->mnt_maxsymlinklen) ||
-	    DIP(ip, i_blocks) == 0) { /* XXX - for old fastlink support */
+	if (isize < vp->v_mount->mnt_maxsymlinklen)
 		return (uiomove(SHORTLINK(ip), isize, ap->a_uio));
-	}
 	return (VOP_READ(vp, ap->a_uio, 0, ap->a_cred));
 }
 



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