mirror of
https://github.com/torvalds/linux.git
synced 2026-10-29 21:06:02 +01:00
dm-pcache: fix implicit u8 truncation of gc_percent in message handler
When setting gc_percent via message, kstrtoul parses the input into an
unsigned long, which is then implicitly truncated to u8 when passed to
pcache_cache_set_gc_percent(). For example, value 266 (0x10A) silently
truncates to 10 (0x0A), successfully bypassing the > 90 upper bound
check in pcache_cache_set_gc_percent(), and setting a different value
than the user intended.
Use kstrtou8 directly instead of kstrtoul, so that overflow values are
properly rejected.
Cc: stable@vger.kernel.org
Fixes: 1d57628ff9 ("dm-pcache: add persistent cache target in device-mapper")
Signed-off-by: Jianyun Gao <jianyungao89@gmail.com>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
This commit is contained in:
parent
73c37fe54c
commit
fb9e17287a
|
|
@ -439,13 +439,13 @@ static int dm_pcache_message(struct dm_target *ti, unsigned int argc,
|
|||
char **argv, char *result, unsigned int maxlen)
|
||||
{
|
||||
struct dm_pcache *pcache = ti->private;
|
||||
unsigned long val;
|
||||
u8 val;
|
||||
|
||||
if (argc != 2)
|
||||
goto err;
|
||||
|
||||
if (!strcasecmp(argv[0], "gc_percent")) {
|
||||
if (kstrtoul(argv[1], 10, &val))
|
||||
if (kstrtou8(argv[1], 10, &val))
|
||||
goto err;
|
||||
|
||||
return pcache_cache_set_gc_percent(&pcache->cache, val);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user