Commit 92f0d6c9 authored by Miklos Szeredi's avatar Miklos Szeredi
Browse files

ovl: fold ovl_getxattr() into ovl_get_redirect_xattr()



This is a partial revert (with some cleanups) of commit 993a0b2a ("ovl:
Do not lose security.capability xattr over metadata file copy-up"), which
introduced ovl_getxattr() in the first place.

Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent de7a52c9
Loading
Loading
Loading
Loading
+17 −36
Original line number Diff line number Diff line
@@ -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)
char *ovl_get_redirect_xattr(struct dentry *dentry, int padding)
{
	ssize_t res;
	char *buf = NULL;
	int res;
	char *s, *next, *buf = NULL;

	res = vfs_getxattr(dentry, name, NULL, 0);
	if (res < 0) {
	res = vfs_getxattr(dentry, OVL_XATTR_REDIRECT, NULL, 0);
	if (res == -ENODATA || res == -EOPNOTSUPP)
			return -ENODATA;
		return NULL;
	if (res < 0)
		goto fail;
	}
	if (res == 0)
		goto invalid;

	if (res != 0) {
		buf = kzalloc(res + padding, GFP_KERNEL);
	buf = kzalloc(res + padding + 1, GFP_KERNEL);
	if (!buf)
			return -ENOMEM;
		return ERR_PTR(-ENOMEM);

		res = vfs_getxattr(dentry, name, buf, res);
	res = vfs_getxattr(dentry, OVL_XATTR_REDIRECT, 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)
		return NULL;
	if (res < 0)
		return ERR_PTR(res);
	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);
}