diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2020-05-17 15:37:50 -0400 |
---|---|---|
committer | Sasha Levin <sashal@kernel.org> | 2020-06-29 20:07:56 -0400 |
commit | 885237aebb80b80086602f81686531241e028fc0 (patch) | |
tree | d0a33695b8c35d48721b22c2c398ee4af3daf164 /arch/sparc | |
parent | a039515ce219ac78d7119e79e295910956de6e7e (diff) |
sparc64: fix misuses of access_process_vm() in genregs32_[sg]et()
[ Upstream commit 142cd25293f6a7ecbdff4fb0af17de6438d46433 ]
We do need access_process_vm() to access the target's reg_window.
However, access to caller's memory (storing the result in
genregs32_get(), fetching the new values in case of genregs32_set())
should be done by normal uaccess primitives.
Fixes: ad4f95764040 ([SPARC64]: Fix user accesses in regset code.)
Cc: stable@kernel.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/kernel/ptrace_64.c | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c index c1566170964f..829592d5efe0 100644 --- a/arch/sparc/kernel/ptrace_64.c +++ b/arch/sparc/kernel/ptrace_64.c @@ -534,13 +534,8 @@ static int genregs32_get(struct task_struct *target, ®, sizeof(reg), 0) != sizeof(reg)) return -EFAULT; - if (access_process_vm(target, - (unsigned long) u, - ®, sizeof(reg), 1) - != sizeof(reg)) + if (put_user(reg, u++)) return -EFAULT; - pos++; - u++; } } } @@ -639,11 +634,7 @@ static int genregs32_set(struct task_struct *target, } } else { for (; count > 0 && pos < 32; count--) { - if (access_process_vm(target, - (unsigned long) - u, - ®, sizeof(reg), 0) - != sizeof(reg)) + if (get_user(reg, u++)) return -EFAULT; if (access_process_vm(target, (unsigned long) |