| From 272e5326c7837697882ce3162029ba893059b616 Mon Sep 17 00:00:00 2001 |
| From: Anand Jain <anand.jain@oracle.com> |
| Date: Tue, 2 Apr 2019 18:07:40 +0800 |
| Subject: btrfs: prop: fix vanished compression property after failed set |
| |
| From: Anand Jain <anand.jain@oracle.com> |
| |
| commit 272e5326c7837697882ce3162029ba893059b616 upstream. |
| |
| The compression property resets to NULL, instead of the old value if we |
| fail to set the new compression parameter. |
| |
| $ btrfs prop get /btrfs compression |
| compression=lzo |
| $ btrfs prop set /btrfs compression zli |
| ERROR: failed to set compression for /btrfs: Invalid argument |
| $ btrfs prop get /btrfs compression |
| |
| This is because the compression property ->validate() is successful for |
| 'zli' as the strncmp() used the length passed from the userspace. |
| |
| Fix it by using the expected string length in strncmp(). |
| |
| Fixes: 63541927c8d1 ("Btrfs: add support for inode properties") |
| Fixes: 5c1aab1dd544 ("btrfs: Add zstd support") |
| CC: stable@vger.kernel.org # 4.14+ |
| Reviewed-by: Nikolay Borisov <nborisov@suse.com> |
| Signed-off-by: Anand Jain <anand.jain@oracle.com> |
| Reviewed-by: David Sterba <dsterba@suse.com> |
| Signed-off-by: David Sterba <dsterba@suse.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/btrfs/props.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/fs/btrfs/props.c |
| +++ b/fs/btrfs/props.c |
| @@ -366,11 +366,11 @@ int btrfs_subvol_inherit_props(struct bt |
| |
| static int prop_compression_validate(const char *value, size_t len) |
| { |
| - if (!strncmp("lzo", value, len)) |
| + if (!strncmp("lzo", value, 3)) |
| return 0; |
| - else if (!strncmp("zlib", value, len)) |
| + else if (!strncmp("zlib", value, 4)) |
| return 0; |
| - else if (!strncmp("zstd", value, len)) |
| + else if (!strncmp("zstd", value, 4)) |
| return 0; |
| |
| return -EINVAL; |