On Thu, Feb 07, 2019 at 01:36:47PM +0300, Dan Carpenter wrote:
> Hello Dennis Zhou,
>
> The patch a67dc67a2cb8: "btrfs: change set_level() to bound the level
> passed in" from Jan 28, 2019, leads to the following static checker
> warning:
>
> fs/btrfs/compression.c:1576 btrfs_compress_str2level()
> error: uninitialized symbol 'level'.
>
> fs/btrfs/compression.c
> 1566 unsigned int btrfs_compress_str2level(unsigned int type, const char *str)
> 1567 {
> 1568 unsigned int level;
> 1569 int ret;
> 1570
> 1571 if (!type)
> 1572 return 0;
> 1573
> 1574 if (str[0] == ':') {
> 1575 ret = kstrtouint(str + 1, 10, &level);
> --> 1576 if (ret)
> 1577 level = 0;
>
> I feel like if the user gives bad input then we should just return an
> error code instead of picking a level.
We've debated a bit and a warning with fallback to default is the
preferred option.
>
> 1578 }
>
> level is not initialized if the first character is not ':'.
Right that's a bug, can be fixed by initializing level to 0, the
set_level() implementations will fall back to default then.
Thanks for the report.
>
> 1579
> 1580 level = btrfs_compress_op[type]->set_level(level);
> 1581
> 1582 return level;
> 1583 }