Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1619124

[PATCH 03/10] orangefs: clean up oversize xattr validation

From Martin Brandenburg <martin@omnibond.com>
Newsgroups linux.kernel
Subject [PATCH 03/10] orangefs: clean up oversize xattr validation
Date 2017-04-07 23:30 +0200
Message-ID <ttJC9-4GN-5@gated-at.bofh.it> (permalink)
References <ttJsu-4Dp-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Also don't check flags as this has been validated by the VFS already.

Fix an off-by-one error in the max size checking.

Stop logging just because userspace wants to write attributes which do
not fit.

This and the previous commit fix xfstests generic/020.

Signed-off-by: Martin Brandenburg <martin@omnibond.com>
---
 fs/orangefs/xattr.c | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c
index fba4db7..237c9c0 100644
--- a/fs/orangefs/xattr.c
+++ b/fs/orangefs/xattr.c
@@ -76,11 +76,8 @@ ssize_t orangefs_inode_getxattr(struct inode *inode, const char *name,
 	if (S_ISLNK(inode->i_mode))
 		return -EOPNOTSUPP;
 
-	if (strlen(name) >= ORANGEFS_MAX_XATTR_NAMELEN) {
-		gossip_err("Invalid key length (%d)\n",
-			   (int)strlen(name));
+	if (strlen(name) > ORANGEFS_MAX_XATTR_NAMELEN)
 		return -EINVAL;
-	}
 
 	fsuid = from_kuid(&init_user_ns, current_fsuid());
 	fsgid = from_kgid(&init_user_ns, current_fsgid());
@@ -172,6 +169,9 @@ static int orangefs_inode_removexattr(struct inode *inode, const char *name,
 	struct orangefs_kernel_op_s *new_op = NULL;
 	int ret = -ENOMEM;
 
+	if (strlen(name) > ORANGEFS_MAX_XATTR_NAMELEN)
+		return -EINVAL;
+
 	down_write(&orangefs_inode->xattr_sem);
 	new_op = op_alloc(ORANGEFS_VFS_OP_REMOVEXATTR);
 	if (!new_op)
@@ -231,23 +231,13 @@ int orangefs_inode_setxattr(struct inode *inode, const char *name,
 		     "%s: name %s, buffer_size %zd\n",
 		     __func__, name, size);
 
-	if (size >= ORANGEFS_MAX_XATTR_VALUELEN ||
-	    flags < 0) {
-		gossip_err("orangefs_inode_setxattr: bogus values of size(%d), flags(%d)\n",
-			   (int)size,
-			   flags);
+	if (size > ORANGEFS_MAX_XATTR_VALUELEN)
+		return -EINVAL;
+	if (strlen(name) > ORANGEFS_MAX_XATTR_NAMELEN)
 		return -EINVAL;
-	}
 
 	internal_flag = convert_to_internal_xattr_flags(flags);
 
-	if (strlen(name) >= ORANGEFS_MAX_XATTR_NAMELEN) {
-		gossip_err
-		    ("orangefs_inode_setxattr: bogus key size (%d)\n",
-		     (int)(strlen(name)));
-		return -EINVAL;
-	}
-
 	/* This is equivalent to a removexattr */
 	if (size == 0 && value == NULL) {
 		gossip_debug(GOSSIP_XATTR_DEBUG,
-- 
2.1.4

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/10] orangefs changes for 4.12 Martin Brandenburg <martin@omnibond.com> - 2017-04-07 23:20 +0200
  [PATCH 10/10] orangefs: do not check possibly stale size on truncate Martin Brandenburg <martin@omnibond.com> - 2017-04-07 23:20 +0200
  [PATCH 06/10] orangefs: support llseek on directories Martin Brandenburg <martin@omnibond.com> - 2017-04-07 23:20 +0200
  [PATCH 08/10] orangefs: remove ORANGEFS_READDIR macros Martin Brandenburg <martin@omnibond.com> - 2017-04-07 23:20 +0200
  [PATCH 05/10] orangefs: rewrite readdir to fix several bugs Martin Brandenburg <martin@omnibond.com> - 2017-04-07 23:20 +0200
  [PATCH 03/10] orangefs: clean up oversize xattr validation Martin Brandenburg <martin@omnibond.com> - 2017-04-07 23:30 +0200
  [PATCH 01/10] orangefs: remove unused get_fsid_from_ino Martin Brandenburg <martin@omnibond.com> - 2017-04-07 23:30 +0200

csiph-web