diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2020-05-11 15:54:14 +0300 |
---|---|---|
committer | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2020-05-15 15:45:14 +0300 |
commit | 35d13c7a05126a5a54a1ef40aff4c6984474e604 (patch) | |
tree | 07fbecfba23dd360d99e396c290e5a6a4c51930c /drivers/platform | |
parent | be51bd4585728baefc5669d4af2be0eb68b90e3e (diff) | |
download | linux-35d13c7a05126a5a54a1ef40aff4c6984474e604.tar.bz2 |
platform/x86: thinkpad_acpi: Use strndup_user() in dispatch_proc_write()
Simplify the user copy code by using strndup_user().
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r-- | drivers/platform/x86/thinkpad_acpi.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index 6fb540d02dac..bf651b850faa 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@ -885,19 +885,11 @@ static ssize_t dispatch_proc_write(struct file *file, if (!ibm || !ibm->write) return -EINVAL; - if (count > PAGE_SIZE - 1) - return -EINVAL; - - kernbuf = kmalloc(count + 1, GFP_KERNEL); - if (!kernbuf) - return -ENOMEM; - if (copy_from_user(kernbuf, userbuf, count)) { - kfree(kernbuf); - return -EFAULT; - } + kernbuf = strndup_user(userbuf, PAGE_SIZE); + if (IS_ERR(kernbuf)) + return PTR_ERR(kernbuf); - kernbuf[count] = 0; ret = ibm->write(kernbuf); if (ret == 0) ret = count; |