Commit 02405387 authored by Armin Wolf's avatar Armin Wolf Committed by Guenter Roeck

hwmon: (dell-smm) Simplify ioctl handler

The second switch-case has no real purpose:

- for I8K_BIOS_VERSION, val does not represent a return value,
  making the check for error values unnecessary.
- for I8K_MACHINE_ID, val remains zero, so the error check is
  unnecessary too.

Remove the switch-case and move the calls to copy_to_user()
into the first switch-case for I8K_BIOS_VERSION/_MACHINE_ID.
Omit buff[] since data->bios_machineid already contains the string
with the necessary zero padding through devm_kzalloc().

Tested on a Dell Inspiron 3505.
Signed-off-by: default avatarArmin Wolf <W_Armin@gmx.de>
Reviewed-by: default avatarPali Rohár <pali@kernel.org>
Link: https://lore.kernel.org/r/20211211155422.16830-2-W_Armin@gmx.deSigned-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 9c6d5551
...@@ -454,7 +454,6 @@ i8k_ioctl_unlocked(struct file *fp, struct dell_smm_data *data, unsigned int cmd ...@@ -454,7 +454,6 @@ i8k_ioctl_unlocked(struct file *fp, struct dell_smm_data *data, unsigned int cmd
{ {
int val = 0; int val = 0;
int speed, err; int speed, err;
unsigned char buff[16];
int __user *argp = (int __user *)arg; int __user *argp = (int __user *)arg;
if (!argp) if (!argp)
...@@ -468,15 +467,19 @@ i8k_ioctl_unlocked(struct file *fp, struct dell_smm_data *data, unsigned int cmd ...@@ -468,15 +467,19 @@ i8k_ioctl_unlocked(struct file *fp, struct dell_smm_data *data, unsigned int cmd
val = (data->bios_version[0] << 16) | val = (data->bios_version[0] << 16) |
(data->bios_version[1] << 8) | data->bios_version[2]; (data->bios_version[1] << 8) | data->bios_version[2];
break;
if (copy_to_user(argp, &val, sizeof(val)))
return -EFAULT;
return 0;
case I8K_MACHINE_ID: case I8K_MACHINE_ID:
if (restricted && !capable(CAP_SYS_ADMIN)) if (restricted && !capable(CAP_SYS_ADMIN))
return -EPERM; return -EPERM;
strscpy_pad(buff, data->bios_machineid, sizeof(buff)); if (copy_to_user(argp, data->bios_machineid, sizeof(data->bios_machineid)))
break; return -EFAULT;
return 0;
case I8K_FN_STATUS: case I8K_FN_STATUS:
val = i8k_get_fn_status(); val = i8k_get_fn_status();
break; break;
...@@ -527,24 +530,9 @@ i8k_ioctl_unlocked(struct file *fp, struct dell_smm_data *data, unsigned int cmd ...@@ -527,24 +530,9 @@ i8k_ioctl_unlocked(struct file *fp, struct dell_smm_data *data, unsigned int cmd
if (val < 0) if (val < 0)
return val; return val;
switch (cmd) {
case I8K_BIOS_VERSION:
if (copy_to_user(argp, &val, 4))
return -EFAULT;
break;
case I8K_MACHINE_ID:
if (copy_to_user(argp, buff, 16))
return -EFAULT;
break;
default:
if (copy_to_user(argp, &val, sizeof(int))) if (copy_to_user(argp, &val, sizeof(int)))
return -EFAULT; return -EFAULT;
break;
}
return 0; return 0;
} }
......
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