mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 04:33:26 +02:00
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>
This commit is contained in:
committed by
Al Viro
parent
97d7929922
commit
98e9cb5711
@@ -769,8 +769,6 @@ posix_acl_xattr_get(const struct xattr_handler *handler,
|
||||
struct posix_acl *acl;
|
||||
int error;
|
||||
|
||||
if (strcmp(name, "") != 0)
|
||||
return -EINVAL;
|
||||
if (!IS_POSIXACL(d_backing_inode(dentry)))
|
||||
return -EOPNOTSUPP;
|
||||
if (d_is_symlink(dentry))
|
||||
@@ -797,8 +795,6 @@ posix_acl_xattr_set(const struct xattr_handler *handler,
|
||||
struct posix_acl *acl = NULL;
|
||||
int ret;
|
||||
|
||||
if (strcmp(name, "") != 0)
|
||||
return -EINVAL;
|
||||
if (!IS_POSIXACL(inode))
|
||||
return -EOPNOTSUPP;
|
||||
if (!inode->i_op->set_acl)
|
||||
@@ -832,7 +828,7 @@ posix_acl_xattr_list(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, char *list, size_t list_size,
|
||||
const char *name, size_t name_len)
|
||||
{
|
||||
const char *xname = handler->prefix;
|
||||
const char *xname = handler->name;
|
||||
size_t size;
|
||||
|
||||
if (!IS_POSIXACL(d_backing_inode(dentry)))
|
||||
@@ -845,7 +841,7 @@ posix_acl_xattr_list(const struct xattr_handler *handler,
|
||||
}
|
||||
|
||||
const struct xattr_handler posix_acl_access_xattr_handler = {
|
||||
.prefix = XATTR_NAME_POSIX_ACL_ACCESS,
|
||||
.name = XATTR_NAME_POSIX_ACL_ACCESS,
|
||||
.flags = ACL_TYPE_ACCESS,
|
||||
.list = posix_acl_xattr_list,
|
||||
.get = posix_acl_xattr_get,
|
||||
@@ -854,7 +850,7 @@ const struct xattr_handler posix_acl_access_xattr_handler = {
|
||||
EXPORT_SYMBOL_GPL(posix_acl_access_xattr_handler);
|
||||
|
||||
const struct xattr_handler posix_acl_default_xattr_handler = {
|
||||
.prefix = XATTR_NAME_POSIX_ACL_DEFAULT,
|
||||
.name = XATTR_NAME_POSIX_ACL_DEFAULT,
|
||||
.flags = ACL_TYPE_DEFAULT,
|
||||
.list = posix_acl_xattr_list,
|
||||
.get = posix_acl_xattr_get,
|
||||
|
Reference in New Issue
Block a user