svn commit: r351113 - in head: sys/fs/fuse tests/sys/fs/fusefs

Alan Somers asomers at FreeBSD.org
Fri Aug 16 05:06:55 UTC 2019


Author: asomers
Date: Fri Aug 16 05:06:54 2019
New Revision: 351113
URL: https://svnweb.freebsd.org/changeset/base/351113

Log:
  fusefs: don't send the namespace during listextattr
  
  The FUSE_LISTXATTR operation always returns the full list of a file's
  extended attributes, in all namespaces. There's no way to filter the list
  server-side. However, currently FreeBSD's fusefs driver sends a namespace
  string with the FUSE_LISTXATTR request. That behavior was probably copied
  from fuse_vnop_getextattr, which has an attribute name argument. It's
  been there ever since extended attribute support was added in r324620. This
  commit removes it.
  
  Reviewed by:	cem
  MFC after:	2 weeks
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D21280

Modified:
  head/sys/fs/fuse/fuse_vnops.c
  head/tests/sys/fs/fusefs/mockfs.cc

Modified: head/sys/fs/fuse/fuse_vnops.c
==============================================================================
--- head/sys/fs/fuse/fuse_vnops.c	Fri Aug 16 04:54:38 2019	(r351112)
+++ head/sys/fs/fuse/fuse_vnops.c	Fri Aug 16 05:06:54 2019	(r351113)
@@ -2246,9 +2246,7 @@ fuse_vnop_listextattr(struct vop_listextattr_args *ap)
 	struct mount *mp = vnode_mount(vp);
 	struct thread *td = ap->a_td;
 	struct ucred *cred = ap->a_cred;
-	size_t len;
 	char *prefix;
-	char *attr_str;
 	char *bsd_list = NULL;
 	char *linux_list;
 	int bsd_list_len;
@@ -2274,9 +2272,7 @@ fuse_vnop_listextattr(struct vop_listextattr_args *ap)
 	else
 		prefix = EXTATTR_NAMESPACE_USER_STRING;
 
-	len = strlen(prefix) + sizeof(extattr_namespace_separator) + 1;
-
-	fdisp_init(&fdi, sizeof(*list_xattr_in) + len);
+	fdisp_init(&fdi, sizeof(*list_xattr_in));
 	fdisp_make_vp(&fdi, FUSE_LISTXATTR, vp, td, cred);
 
 	/*
@@ -2284,8 +2280,6 @@ fuse_vnop_listextattr(struct vop_listextattr_args *ap)
 	 */
 	list_xattr_in = fdi.indata;
 	list_xattr_in->size = 0;
-	attr_str = (char *)fdi.indata + sizeof(*list_xattr_in);
-	snprintf(attr_str, len, "%s%c", prefix, extattr_namespace_separator);
 
 	err = fdisp_wait_answ(&fdi);
 	if (err != 0) {
@@ -2310,8 +2304,6 @@ fuse_vnop_listextattr(struct vop_listextattr_args *ap)
 	fdisp_refresh_vp(&fdi, FUSE_LISTXATTR, vp, td, cred);
 	list_xattr_in = fdi.indata;
 	list_xattr_in->size = linux_list_len + sizeof(*list_xattr_out);
-	attr_str = (char *)fdi.indata + sizeof(*list_xattr_in);
-	snprintf(attr_str, len, "%s%c", prefix, extattr_namespace_separator);
 
 	err = fdisp_wait_answ(&fdi);
 	if (err != 0)

Modified: head/tests/sys/fs/fusefs/mockfs.cc
==============================================================================
--- head/tests/sys/fs/fusefs/mockfs.cc	Fri Aug 16 04:54:38 2019	(r351112)
+++ head/tests/sys/fs/fusefs/mockfs.cc	Fri Aug 16 05:06:54 2019	(r351113)
@@ -554,16 +554,13 @@ void MockFS::audit_request(const mockfs_buf_in &in) {
 			"Missing request attribute name";
 		break;
 	case FUSE_GETXATTR:
-		ASSERT_GE(inlen, fih + sizeof(in.body.setxattr)) <<
+		ASSERT_GE(inlen, fih + sizeof(in.body.getxattr)) <<
 			"Missing request body";
-		ASSERT_GT(inlen, fih + sizeof(in.body.setxattr)) <<
+		ASSERT_GT(inlen, fih + sizeof(in.body.getxattr)) <<
 			"Missing request attribute name";
 		break;
 	case FUSE_LISTXATTR:
-		ASSERT_GE(inlen, fih + sizeof(in.body.listxattr)) <<
-			"Missing request body";
-		ASSERT_GT(inlen, fih + sizeof(in.body.listxattr)) <<
-			"Missing namespace";
+		ASSERT_EQ(inlen, fih + sizeof(in.body.listxattr));
 		break;
 	case FUSE_REMOVEXATTR:
 		ASSERT_GT(inlen, fih) << "Missing request attribute name";


More information about the svn-src-all mailing list