Implement ->proc_write_buf() so procfs copies in what is written to /proc/cpu/alignment before it pins the entry, and take the mode from that copy. Writes larger than PAGE_SIZE - 1 bytes fail with -EINVAL now.
Signed-off-by: Christian Brauner (Amutable) <[email protected]> --- arch/arm/mm/alignment.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c index 3e5e30968634..11ceefdfa388 100644 --- a/arch/arm/mm/alignment.c +++ b/arch/arm/mm/alignment.c @@ -144,14 +144,13 @@ static int alignment_proc_show(struct seq_file *m, void *v) return 0; } -static ssize_t alignment_proc_write(struct file *file, const char __user *buffer, +static ssize_t alignment_proc_write(struct file *file, char *buffer, size_t count, loff_t *pos) { char mode; if (count > 0) { - if (get_user(mode, buffer)) - return -EFAULT; + mode = buffer[0]; if (mode >= '0' && mode <= '5') ai_usermode = safe_usermode(mode - '0', true); } @@ -160,7 +159,7 @@ static ssize_t alignment_proc_write(struct file *file, const char __user *buffer static const struct proc_ops alignment_proc_ops = { .proc_show = alignment_proc_show, - .proc_write = alignment_proc_write, + .proc_write_buf = alignment_proc_write, }; #endif /* CONFIG_PROC_FS */ -- 2.53.0
