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


Reply via email to