Commit 4b162c53 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'hwmon-for-linus-v4.13-rc2' of...

Merge tag 'hwmon-for-linus-v4.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull hwmon fix from Guenter Roeck:
 "Avoid buffer overruns in applesmc driver"

* tag 'hwmon-for-linus-v4.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (applesmc) Avoid buffer overruns
parents ae75d1ae 1009ccdc
...@@ -566,6 +566,8 @@ static int applesmc_init_smcreg_try(void) ...@@ -566,6 +566,8 @@ static int applesmc_init_smcreg_try(void)
if (ret) if (ret)
return ret; return ret;
s->fan_count = tmp[0]; s->fan_count = tmp[0];
if (s->fan_count > 10)
s->fan_count = 10;
ret = applesmc_get_lower_bound(&s->temp_begin, "T"); ret = applesmc_get_lower_bound(&s->temp_begin, "T");
if (ret) if (ret)
...@@ -811,7 +813,8 @@ static ssize_t applesmc_show_fan_speed(struct device *dev, ...@@ -811,7 +813,8 @@ static ssize_t applesmc_show_fan_speed(struct device *dev,
char newkey[5]; char newkey[5];
u8 buffer[2]; u8 buffer[2];
sprintf(newkey, fan_speed_fmt[to_option(attr)], to_index(attr)); scnprintf(newkey, sizeof(newkey), fan_speed_fmt[to_option(attr)],
to_index(attr));
ret = applesmc_read_key(newkey, buffer, 2); ret = applesmc_read_key(newkey, buffer, 2);
speed = ((buffer[0] << 8 | buffer[1]) >> 2); speed = ((buffer[0] << 8 | buffer[1]) >> 2);
...@@ -834,7 +837,8 @@ static ssize_t applesmc_store_fan_speed(struct device *dev, ...@@ -834,7 +837,8 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
if (kstrtoul(sysfsbuf, 10, &speed) < 0 || speed >= 0x4000) if (kstrtoul(sysfsbuf, 10, &speed) < 0 || speed >= 0x4000)
return -EINVAL; /* Bigger than a 14-bit value */ return -EINVAL; /* Bigger than a 14-bit value */
sprintf(newkey, fan_speed_fmt[to_option(attr)], to_index(attr)); scnprintf(newkey, sizeof(newkey), fan_speed_fmt[to_option(attr)],
to_index(attr));
buffer[0] = (speed >> 6) & 0xff; buffer[0] = (speed >> 6) & 0xff;
buffer[1] = (speed << 2) & 0xff; buffer[1] = (speed << 2) & 0xff;
...@@ -903,7 +907,7 @@ static ssize_t applesmc_show_fan_position(struct device *dev, ...@@ -903,7 +907,7 @@ static ssize_t applesmc_show_fan_position(struct device *dev,
char newkey[5]; char newkey[5];
u8 buffer[17]; u8 buffer[17];
sprintf(newkey, FAN_ID_FMT, to_index(attr)); scnprintf(newkey, sizeof(newkey), FAN_ID_FMT, to_index(attr));
ret = applesmc_read_key(newkey, buffer, 16); ret = applesmc_read_key(newkey, buffer, 16);
buffer[16] = 0; buffer[16] = 0;
...@@ -1116,7 +1120,8 @@ static int applesmc_create_nodes(struct applesmc_node_group *groups, int num) ...@@ -1116,7 +1120,8 @@ static int applesmc_create_nodes(struct applesmc_node_group *groups, int num)
} }
for (i = 0; i < num; i++) { for (i = 0; i < num; i++) {
node = &grp->nodes[i]; node = &grp->nodes[i];
sprintf(node->name, grp->format, i + 1); scnprintf(node->name, sizeof(node->name), grp->format,
i + 1);
node->sda.index = (grp->option << 16) | (i & 0xffff); node->sda.index = (grp->option << 16) | (i & 0xffff);
node->sda.dev_attr.show = grp->show; node->sda.dev_attr.show = grp->show;
node->sda.dev_attr.store = grp->store; node->sda.dev_attr.store = grp->store;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment