Implement ->proc_write_buf() so procfs copies in what is written before it pins the entry, and take the device name from that copy. Writes larger than PAGE_SIZE - 1 bytes fail with -EINVAL now.
Signed-off-by: Christian Brauner (Amutable) <[email protected]> --- drivers/acpi/proc.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/acpi/proc.c b/drivers/acpi/proc.c index b8a0bd4580e0..feb8283fd855 100644 --- a/drivers/acpi/proc.c +++ b/drivers/acpi/proc.c @@ -86,7 +86,7 @@ static void physical_device_enable_wakeup(struct acpi_device *adev) static ssize_t acpi_system_write_wakeup_device(struct file *file, - const char __user * buffer, + char *buffer, size_t count, loff_t * ppos) { struct acpi_device *dev, *tmp; @@ -96,8 +96,7 @@ acpi_system_write_wakeup_device(struct file *file, if (count > 4) count = 4; - if (copy_from_user(strbuf, buffer, count)) - return -EFAULT; + memcpy(strbuf, buffer, count); strbuf[count] = '\0'; sscanf(strbuf, "%s", str); @@ -123,7 +122,7 @@ acpi_system_write_wakeup_device(struct file *file, static const struct proc_ops acpi_system_wakeup_device_proc_ops = { .proc_show = acpi_system_wakeup_device_seq_show, - .proc_write = acpi_system_write_wakeup_device, + .proc_write_buf = acpi_system_write_wakeup_device, }; void __init acpi_sleep_proc_init(void) -- 2.53.0
