Re: [PATCH] f2fs: correct removexattr behavior for null valued extended attribute

From: Jaegeuk Kim
Date: Sat Jan 20 2018 - 17:07:16 EST


Thanks,

On 01/20, Chao Yu wrote:
> From: Daeho Jeong <daeho.jeong@xxxxxxxxxxx>
>
> __vfs_removexattr() transfers "NULL" value to the setxattr handler of
> the f2fs filesystem in order to remove the extended attribute. But,
> __f2fs_setxattr() just ignores the removal request when the value of
> the extended attribute is already NULL. We have to remove the extended
> attribute itself even if the value of that is already NULL.
>
> We can reporduce this bug with the below:
>
> 1. touch file
> 2. setfattr -n "user.foo" file
> 3. setfattr -x "user.foo" file
> 4. getfattr -d file
> > user.foo
>
> Signed-off-by: Daeho Jeong <daeho.jeong@xxxxxxxxxxx>
> Signed-off-by: Youngjin Gil <youngjin.gil@xxxxxxxxxxx>
> Tested-by: Hobin Woo <hobin.woo@xxxxxxxxxxx>
> Tested-by: Chao Yu <yuchao0@xxxxxxxxxx>
> Reviewed-by: Chao Yu <yuchao0@xxxxxxxxxx>
> Signed-off-by: Chao Yu <yuchao0@xxxxxxxxxx>
> ---
> fs/f2fs/xattr.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
> index 600162f4ddbf..ae2dfa709f5d 100644
> --- a/fs/f2fs/xattr.c
> +++ b/fs/f2fs/xattr.c
> @@ -600,7 +600,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
> goto exit;
> }
>
> - if (f2fs_xattr_value_same(here, value, size))
> + if (value && f2fs_xattr_value_same(here, value, size))
> goto exit;
> } else if ((flags & XATTR_REPLACE)) {
> error = -ENODATA;
> --
> 2.14.1.145.gb3622a4ee