ovl: fold ovl_getxattr() into ovl_get_redirect_xattr()
This is a partial revert (with some cleanups) of commit 993a0b2aec
("ovl:
Do not lose security.capability xattr over metadata file copy-up"), which
introduced ovl_getxattr() in the first place.
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
Родитель
de7a52c9c6
Коммит
92f0d6c9cf
|
@ -882,49 +882,26 @@ bool ovl_is_metacopy_dentry(struct dentry *dentry)
|
|||
return (oe->numlower > 1);
|
||||
}
|
||||
|
||||
static ssize_t ovl_getxattr(struct dentry *dentry, char *name, char **value,
|
||||
size_t padding)
|
||||
{
|
||||
ssize_t res;
|
||||
char *buf = NULL;
|
||||
|
||||
res = vfs_getxattr(dentry, name, NULL, 0);
|
||||
if (res < 0) {
|
||||
if (res == -ENODATA || res == -EOPNOTSUPP)
|
||||
return -ENODATA;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (res != 0) {
|
||||
buf = kzalloc(res + padding, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
res = vfs_getxattr(dentry, name, buf, res);
|
||||
if (res < 0)
|
||||
goto fail;
|
||||
}
|
||||
*value = buf;
|
||||
|
||||
return res;
|
||||
|
||||
fail:
|
||||
pr_warn_ratelimited("failed to get xattr %s: err=%zi)\n",
|
||||
name, res);
|
||||
kfree(buf);
|
||||
return res;
|
||||
}
|
||||
|
||||
char *ovl_get_redirect_xattr(struct dentry *dentry, int padding)
|
||||
{
|
||||
int res;
|
||||
char *s, *next, *buf = NULL;
|
||||
|
||||
res = ovl_getxattr(dentry, OVL_XATTR_REDIRECT, &buf, padding + 1);
|
||||
if (res == -ENODATA)
|
||||
res = vfs_getxattr(dentry, OVL_XATTR_REDIRECT, NULL, 0);
|
||||
if (res == -ENODATA || res == -EOPNOTSUPP)
|
||||
return NULL;
|
||||
if (res < 0)
|
||||
return ERR_PTR(res);
|
||||
goto fail;
|
||||
if (res == 0)
|
||||
goto invalid;
|
||||
|
||||
buf = kzalloc(res + padding + 1, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
res = vfs_getxattr(dentry, OVL_XATTR_REDIRECT, buf, res);
|
||||
if (res < 0)
|
||||
goto fail;
|
||||
if (res == 0)
|
||||
goto invalid;
|
||||
|
||||
|
@ -943,6 +920,10 @@ char *ovl_get_redirect_xattr(struct dentry *dentry, int padding)
|
|||
invalid:
|
||||
pr_warn_ratelimited("invalid redirect (%s)\n", buf);
|
||||
res = -EINVAL;
|
||||
goto err_free;
|
||||
fail:
|
||||
pr_warn_ratelimited("failed to get redirect (%i)\n", res);
|
||||
err_free:
|
||||
kfree(buf);
|
||||
return ERR_PTR(res);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче