Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b2a6f23 authored by Richard Weinberger's avatar Richard Weinberger Committed by Al Viro
Browse files

fs: xattr: Use kvfree()



... instead of open coding it.

Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent bdb97e91
Loading
Loading
Loading
Loading
+14 −24
Original line number Diff line number Diff line
@@ -324,7 +324,6 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
{
	int error;
	void *kvalue = NULL;
	void *vvalue = NULL;	/* If non-NULL, we used vmalloc() */
	char kname[XATTR_NAME_MAX + 1];

	if (flags & ~(XATTR_CREATE|XATTR_REPLACE))
@@ -341,10 +340,9 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
			return -E2BIG;
		kvalue = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
		if (!kvalue) {
			vvalue = vmalloc(size);
			if (!vvalue)
			kvalue = vmalloc(size);
			if (!kvalue)
				return -ENOMEM;
			kvalue = vvalue;
		}
		if (copy_from_user(kvalue, value, size)) {
			error = -EFAULT;
@@ -357,10 +355,8 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,

	error = vfs_setxattr(d, kname, kvalue, size, flags);
out:
	if (vvalue)
		vfree(vvalue);
	else
		kfree(kvalue);
	kvfree(kvalue);

	return error;
}

@@ -428,7 +424,6 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
{
	ssize_t error;
	void *kvalue = NULL;
	void *vvalue = NULL;
	char kname[XATTR_NAME_MAX + 1];

	error = strncpy_from_user(kname, name, sizeof(kname));
@@ -442,10 +437,9 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
			size = XATTR_SIZE_MAX;
		kvalue = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
		if (!kvalue) {
			vvalue = vmalloc(size);
			if (!vvalue)
			kvalue = vmalloc(size);
			if (!kvalue)
				return -ENOMEM;
			kvalue = vvalue;
		}
	}

@@ -461,10 +455,9 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
		   than XATTR_SIZE_MAX bytes. Not possible. */
		error = -E2BIG;
	}
	if (vvalue)
		vfree(vvalue);
	else
		kfree(kvalue);

	kvfree(kvalue);

	return error;
}

@@ -521,17 +514,15 @@ listxattr(struct dentry *d, char __user *list, size_t size)
{
	ssize_t error;
	char *klist = NULL;
	char *vlist = NULL;	/* If non-NULL, we used vmalloc() */

	if (size) {
		if (size > XATTR_LIST_MAX)
			size = XATTR_LIST_MAX;
		klist = kmalloc(size, __GFP_NOWARN | GFP_KERNEL);
		if (!klist) {
			vlist = vmalloc(size);
			if (!vlist)
			klist = vmalloc(size);
			if (!klist)
				return -ENOMEM;
			klist = vlist;
		}
	}

@@ -544,10 +535,9 @@ listxattr(struct dentry *d, char __user *list, size_t size)
		   than XATTR_LIST_MAX bytes. Not possible. */
		error = -E2BIG;
	}
	if (vlist)
		vfree(vlist);
	else
		kfree(klist);

	kvfree(klist);

	return error;
}