} 
setxattr(struct dentry *d, char __user *name, void __user *value,	 size_t size, int flags){	int error;	void *kvalue = NULL;	char kname[XATTR_NAME_MAX + 1];	if (flags & ~(XATTR_CREATE|XATTR_REPLACE))		return -EINVAL;	error = strncpy_from_user(kname, name, sizeof(kname));	if (error == 0 || error == sizeof(kname))		error = -ERANGE;	if (error < 0)		return error;	if (size) {		if (size > XATTR_SIZE_MAX)			return -E2BIG;		kvalue = kmalloc(size, GFP_KERNEL);		if (!kvalue)			return -ENOMEM;		if (copy_from_user(kvalue, value, size)) {			kfree(kvalue);			return -EFAULT;		}	}	error = -EOPNOTSUPP;	if (d->d_inode->i_op && d->d_inode->i_op->setxattr) {		down(&d->d_inode->i_sem);		error = security_inode_setxattr(d, kname, kvalue, size, flags);		if (error)			goto out;		error = d->d_inode->i_op->setxattr(d, kname, kvalue, size, flags);		if (!error)			security_inode_post_setxattr(d, kname, kvalue, size, flags);out:		up(&d->d_inode->i_sem);	}	if (kvalue)		kfree(kvalue);	return error;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/0eeca28300df110bd6ed54b31193c83b87921443/xattr.c/buggy/fs/xattr.c