aboutsummaryrefslogtreecommitdiffstats
path: root/fs/hfsplus
diff options
context:
space:
mode:
authorAndreas Gruenbacher <agruenba@redhat.com>2015-12-02 08:44:36 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2015-12-06 21:33:52 -0500
commit98e9cb5711c68223f0e4d5201b9a6add255ec550 (patch)
tree12fee55d296fc85a6e8188368ca4944fc4d913a8 /fs/hfsplus
parent97d79299223baab330b194437e676d301f12d5f6 (diff)
vfs: Distinguish between full xattr names and proper prefixes
Add an additional "name" field to struct xattr_handler. When the name is set, the handler matches attributes with exactly that name. When the prefix is set instead, the handler matches attributes with the given prefix and with a non-empty suffix. This patch should avoid bugs like the one fixed in commit c361016a in the future. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Reviewed-by: James Morris <james.l.morris@oracle.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/hfsplus')
-rw-r--r--fs/hfsplus/xattr.c12
1 files changed, 0 insertions, 12 deletions
diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c
index e41a010cd89c..ab01530b4930 100644
--- a/fs/hfsplus/xattr.c
+++ b/fs/hfsplus/xattr.c
@@ -431,9 +431,6 @@ int hfsplus_setxattr(struct dentry *dentry, const char *name,
431 char *xattr_name; 431 char *xattr_name;
432 int res; 432 int res;
433 433
434 if (!strcmp(name, ""))
435 return -EINVAL;
436
437 xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1, 434 xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1,
438 GFP_KERNEL); 435 GFP_KERNEL);
439 if (!xattr_name) 436 if (!xattr_name)
@@ -589,9 +586,6 @@ ssize_t hfsplus_getxattr(struct dentry *dentry, const char *name,
589 int res; 586 int res;
590 char *xattr_name; 587 char *xattr_name;
591 588
592 if (!strcmp(name, ""))
593 return -EINVAL;
594
595 xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1, 589 xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1,
596 GFP_KERNEL); 590 GFP_KERNEL);
597 if (!xattr_name) 591 if (!xattr_name)
@@ -853,9 +847,6 @@ static int hfsplus_osx_getxattr(const struct xattr_handler *handler,
853 struct dentry *dentry, const char *name, 847 struct dentry *dentry, const char *name,
854 void *buffer, size_t size) 848 void *buffer, size_t size)
855{ 849{
856 if (!strcmp(name, ""))
857 return -EINVAL;
858
859 /* 850 /*
860 * Don't allow retrieving properly prefixed attributes 851 * Don't allow retrieving properly prefixed attributes
861 * by prepending them with "osx." 852 * by prepending them with "osx."
@@ -876,9 +867,6 @@ static int hfsplus_osx_setxattr(const struct xattr_handler *handler,
876 struct dentry *dentry, const char *name, 867 struct dentry *dentry, const char *name,
877 const void *buffer, size_t size, int flags) 868 const void *buffer, size_t size, int flags)
878{ 869{
879 if (!strcmp(name, ""))
880 return -EINVAL;
881
882 /* 870 /*
883 * Don't allow setting properly prefixed attributes 871 * Don't allow setting properly prefixed attributes
884 * by prepending them with "osx." 872 * by prepending them with "osx."