Message ID | 20190402100742.8355-4-anand.jain@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: fix property bugs | expand |
On 2.04.19 г. 13:07 ч., Anand Jain wrote: > 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 len passed from the userland. > > Fix it by using the expected string length in strncmp(). > > Signed-off-by: Anand Jain <anand.jain@oracle.com> This mimics the code in prop_compression_apply and so if ->validate() fails we just return without changing anything. So this LGTM: Reviewed-by: Nikolay Borisov <nborisov@suse.com> > --- > fs/btrfs/props.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/fs/btrfs/props.c b/fs/btrfs/props.c > index 3cc007e3c7f8..72a06c4d3c70 100644 > --- a/fs/btrfs/props.c > +++ b/fs/btrfs/props.c > @@ -275,11 +275,11 @@ static int prop_compression_validate(const char *value, size_t len) > if (!value) > return 0; > > - 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; >
On Tue, Apr 02, 2019 at 06:07:40PM +0800, Anand Jain wrote: > 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 len passed from the userland. > > Fix it by using the expected string length in strncmp(). > > Signed-off-by: Anand Jain <anand.jain@oracle.com> Reviewed-by: David Sterba <dsterba@suse.com>
diff --git a/fs/btrfs/props.c b/fs/btrfs/props.c index 3cc007e3c7f8..72a06c4d3c70 100644 --- a/fs/btrfs/props.c +++ b/fs/btrfs/props.c @@ -275,11 +275,11 @@ static int prop_compression_validate(const char *value, size_t len) if (!value) return 0; - 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;
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 len passed from the userland. Fix it by using the expected string length in strncmp(). Signed-off-by: Anand Jain <anand.jain@oracle.com> --- fs/btrfs/props.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)