mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-26 18:43:33 -05:00
squashfs: xattr simplifications
Now that the xattr handler is passed to the xattr handler operations, we have access to the attribute name prefix, so simplify the squashfs xattr handlers a bit. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Cc: Phillip Lougher <phillip@squashfs.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
e409de992e
commit
0ddaf72c1d
1 changed files with 31 additions and 59 deletions
|
@ -212,96 +212,68 @@ failed:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
static size_t squashfs_xattr_handler_list(const struct xattr_handler *handler,
|
||||||
* User namespace support
|
struct dentry *d, char *list,
|
||||||
*/
|
size_t list_size, const char *name,
|
||||||
static size_t squashfs_user_list(const struct xattr_handler *handler,
|
size_t name_len)
|
||||||
struct dentry *d, char *list, size_t list_size,
|
|
||||||
const char *name, size_t name_len)
|
|
||||||
{
|
{
|
||||||
if (list && XATTR_USER_PREFIX_LEN <= list_size)
|
int len = strlen(handler->prefix);
|
||||||
memcpy(list, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN);
|
|
||||||
return XATTR_USER_PREFIX_LEN;
|
if (list && len <= list_size)
|
||||||
|
memcpy(list, handler->prefix, len);
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int squashfs_user_get(const struct xattr_handler *handler,
|
static int squashfs_xattr_handler_get(const struct xattr_handler *handler,
|
||||||
struct dentry *d, const char *name, void *buffer,
|
struct dentry *d, const char *name,
|
||||||
size_t size)
|
void *buffer, size_t size)
|
||||||
{
|
{
|
||||||
if (name[0] == '\0')
|
if (name[0] == '\0')
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
return squashfs_xattr_get(d_inode(d), SQUASHFS_XATTR_USER, name,
|
return squashfs_xattr_get(d_inode(d), handler->flags, name,
|
||||||
buffer, size);
|
buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* User namespace support
|
||||||
|
*/
|
||||||
static const struct xattr_handler squashfs_xattr_user_handler = {
|
static const struct xattr_handler squashfs_xattr_user_handler = {
|
||||||
.prefix = XATTR_USER_PREFIX,
|
.prefix = XATTR_USER_PREFIX,
|
||||||
.list = squashfs_user_list,
|
.flags = SQUASHFS_XATTR_USER,
|
||||||
.get = squashfs_user_get
|
.list = squashfs_xattr_handler_list,
|
||||||
|
.get = squashfs_xattr_handler_get
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Trusted namespace support
|
* Trusted namespace support
|
||||||
*/
|
*/
|
||||||
static size_t squashfs_trusted_list(const struct xattr_handler *handler,
|
static size_t squashfs_trusted_xattr_handler_list(const struct xattr_handler *handler,
|
||||||
struct dentry *d, char *list,
|
struct dentry *d, char *list,
|
||||||
size_t list_size, const char *name,
|
size_t list_size, const char *name,
|
||||||
size_t name_len)
|
size_t name_len)
|
||||||
{
|
{
|
||||||
if (!capable(CAP_SYS_ADMIN))
|
if (!capable(CAP_SYS_ADMIN))
|
||||||
return 0;
|
return 0;
|
||||||
|
return squashfs_xattr_handler_list(handler, d, list, list_size, name,
|
||||||
if (list && XATTR_TRUSTED_PREFIX_LEN <= list_size)
|
name_len);
|
||||||
memcpy(list, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN);
|
|
||||||
return XATTR_TRUSTED_PREFIX_LEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int squashfs_trusted_get(const struct xattr_handler *handler,
|
|
||||||
struct dentry *d, const char *name,
|
|
||||||
void *buffer, size_t size)
|
|
||||||
{
|
|
||||||
if (name[0] == '\0')
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
return squashfs_xattr_get(d_inode(d), SQUASHFS_XATTR_TRUSTED, name,
|
|
||||||
buffer, size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct xattr_handler squashfs_xattr_trusted_handler = {
|
static const struct xattr_handler squashfs_xattr_trusted_handler = {
|
||||||
.prefix = XATTR_TRUSTED_PREFIX,
|
.prefix = XATTR_TRUSTED_PREFIX,
|
||||||
.list = squashfs_trusted_list,
|
.flags = SQUASHFS_XATTR_TRUSTED,
|
||||||
.get = squashfs_trusted_get
|
.list = squashfs_trusted_xattr_handler_list,
|
||||||
|
.get = squashfs_xattr_handler_get
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Security namespace support
|
* Security namespace support
|
||||||
*/
|
*/
|
||||||
static size_t squashfs_security_list(const struct xattr_handler *handler,
|
|
||||||
struct dentry *d, char *list,
|
|
||||||
size_t list_size, const char *name,
|
|
||||||
size_t name_len)
|
|
||||||
{
|
|
||||||
if (list && XATTR_SECURITY_PREFIX_LEN <= list_size)
|
|
||||||
memcpy(list, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN);
|
|
||||||
return XATTR_SECURITY_PREFIX_LEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int squashfs_security_get(const struct xattr_handler *handler,
|
|
||||||
struct dentry *d, const char *name,
|
|
||||||
void *buffer, size_t size)
|
|
||||||
{
|
|
||||||
if (name[0] == '\0')
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
return squashfs_xattr_get(d_inode(d), SQUASHFS_XATTR_SECURITY, name,
|
|
||||||
buffer, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct xattr_handler squashfs_xattr_security_handler = {
|
static const struct xattr_handler squashfs_xattr_security_handler = {
|
||||||
.prefix = XATTR_SECURITY_PREFIX,
|
.prefix = XATTR_SECURITY_PREFIX,
|
||||||
.list = squashfs_security_list,
|
.flags = SQUASHFS_XATTR_SECURITY,
|
||||||
.get = squashfs_security_get
|
.list = squashfs_xattr_handler_list,
|
||||||
|
.get = squashfs_xattr_handler_get
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct xattr_handler *squashfs_xattr_handler(int type)
|
static const struct xattr_handler *squashfs_xattr_handler(int type)
|
||||||
|
|
Loading…
Add table
Reference in a new issue