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) <brauner@kernel.org>
---
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