re: btrfs: add btrfs_read_policy_to_enum helper and refactor read, policy store

From: Colin King (gmail)
Date: Thu Dec 19 2024 - 10:40:49 EST


Hi,

Static analysis on linux-next today has found a potential buffer overflow in fs/btrfs/sysfs.c in function btrfs_read_policy_to_enum()

The strcpy to string param has no length checks on str and hence if str is longer than param a buffer overflow on the stack occurs. This can potentially occur when a user writes a long string to the btrfs sysfs file read_policy via btrfs_read_policy_store()

int btrfs_read_policy_to_enum(const char *str, s64 *value)
{
char param[32] = {'\0'};
char *__maybe_unused value_str;
int index;
bool found = false;

if (!str || strlen(str) == 0)
return 0;

strcpy(param, str); /* issue here */

....
}

Colin